Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ピクシブの大規模ライブ配信 / ImageFlux Live
Search
ImageFlux
January 26, 2018
Technology
6
11k
ピクシブの大規模ライブ配信 / ImageFlux Live
ImageFlux meetup #1
MICHII Shunsuke, pixiv Technologies Inc.
2018-01-25
ImageFlux
January 26, 2018
Tweet
Share
More Decks by ImageFlux
See All by ImageFlux
ImageFluxについて / CAMPHOR- 2021-12-18
imageflux
0
580
画像処理サービスを作る際の落とし穴をImageFluxではいかにして超えてきたか / ImageFlux meetup #4 (5)
imageflux
1
3.3k
Webサービスにおける画像変換の実践 / ImageFlux meetup - hands-on
imageflux
2
18k
最高の購入体験を実現するための画像ダイナミックチューニング / ImageFlux meetup - Guest session #1
imageflux
3
18k
ImageFlux Live Streamingでサービス開発に集中する / ImageFlux meetup #2 - Guest Session #3
imageflux
0
5.7k
ImageFlux Live Streamingについて
imageflux
0
32k
ImageFlux Updates 2018
imageflux
2
1.3k
Other Decks in Technology
See All in Technology
LINE Notify互換のボットを作った話
kenichirokimura
0
170
大規模プロジェクトにおける 品質管理の要点と実践 / 20250327 Suguru Ishii
shift_evolve
0
270
チームの性質によって変わる ADR との向き合い方と、生成 AI 時代のこれから / How to deal with ADR depends on the characteristics of the team
mh4gf
4
320
PHPでアクターモデルを活用したSagaパターンの実践法 / php-saga-pattern-with-actor-model
ytake
0
1k
ドメインイベントを活用したPHPコードのリファクタリング
kajitack
2
1.1k
スケールアップ企業のQA組織のバリューを最大限に引き出すための取り組み
tarappo
4
900
Go の analysis パッケージで自作するリファクタリングツール
kworkdev
PRO
1
370
SSH公開鍵認証による接続 / Connecting with SSH Public Key Authentication
kaityo256
PRO
2
210
Dapr For Java Developers SouJava 25
salaboy
1
130
バックエンドエンジニアによるフロントエンドテスト拡充の具体的手法
kinosuke01
1
630
LINEギフトのLINEミニアプリアクセシビリティ改善事例
lycorptech_jp
PRO
0
240
お問い合わせ対応の改善取り組みとその進め方
masartz
1
340
Featured
See All Featured
The Invisible Side of Design
smashingmag
299
50k
How STYLIGHT went responsive
nonsquared
99
5.4k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
28
1.6k
The Power of CSS Pseudo Elements
geoffreycrofte
75
5.7k
What's in a price? How to price your products and services
michaelherold
245
12k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
135
33k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.5k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
2.9k
KATA
mclloyd
29
14k
Rebuilding a faster, lazier Slack
samanthasiow
80
8.9k
Why Our Code Smells
bkeepers
PRO
336
57k
GitHub's CSS Performance
jonrohan
1030
460k
Transcript
େنϥΠϒ৴ MICHII Shunsuke | pixiv Technologies Inc. ImageFlux meetup #1
2018-01-25 ٕज़ηογϣϯ
MICHII Shunsuke | harukasan ImageFluxࣄۀऀ ϐΫγϒςΫϊϩδʔζגࣜձࣾࣥߦһ ImageFluxͰGoΛॻ͍ͨΓΠϯϑϥपΓΛ୲
ImageFlux Live • ϒϥβ͔ΒϓϥάΠϯෆཁͰϥΠϒ৴Λ։࢝ • HLSܗࣜͰϒϥβɺϞόΠϧΞϓϦʹ৴ • hls.jsͳͲҰൠతͳHLSΫϥΠΞϯτͰ࠶ੜՄೳ • ͖ͳղ૾/࣭ʹεέʔϦϯάͯ͠৴
ࣄྫ: pixiv Sketch Live
ࣄྫ: pixiv ONE • ϐΫγϒॳͷϥΠϒυϩʔΠϯάΠϕϯτ • ಉ࣌ࢹௌऀ: 5,000ϢʔβʔҎ্ • ϒϥβ͔Βͷେن৴ࣄྫ
ImageFluxͱϥΠϒ৴ • ImageFluxͷϛογϣϯ: ϐΫγϒͷٕज़ΛεϐϯΞτ͢Δ͜ͱͰϐΫγϒͷٕज़্Λࢦ͢ • pixiv Sketch LiveͷͨΊʹImageFluxνʔϜͰϥΠϒ৴ಈతมΛ։ൃ • ϥΠϒ৴ಈతมΛαʔϏεͱͯ͠ఏڙ༧ఆ
• ϐΫγϒͱͯ͠ImageFluxͱͯ͠ϥΠϒ৴ΛڧԽ
ImageFlux Live ৴ऀ ImageFlux Live WebRTC HLS ࢹௌऀ • WebRTCετϦʔϜͰड͚औͬͨಈըΛHLSʹมͯ͠৴
• HLSܗࣜʹม͢Δ͜ͱͰɺଓΛؾʹͤͣେن৴͕Մೳ • WebRTCͳͷͰԆɺ͔ͭHLSͳͷͰେن৴Ͱ͖Δʂ
HLS (HTTP Live Streaming) • Apple͕։ൃͨ͠ϥΠϒετϦʔϛϯά༷ • ϒϥβ/iOS/AndroidͰ࠶ੜՄೳ • iOS:
ωΠςΟϒͰରԠ • Android: ExoPlayer • ϒϥβ: hls.js
HLS (HTTP Live Streaming) .m3u8 hls0.ts hls1.ts hls2.ts ϓϨΠϦετϑΝΠϧ ಈըετϦʔϜϑΝΠϧ
#EXTM3U #EXT-X-TARGETDURATION:3 #EXT-X-VERSION:3 #EXT-X-MEDIA-SEQUENCE:0 #EXTINF:3.00000, hls0.ts #EXTINF:3.00000, hls1.ts #EXTINF:3.00000, hls2.ts ϑΝΠϧͷ͞
HLS (HTTP Live Streaming) .m3u8 hls0.ts hls1.ts ϓϨΠϠʔ #EXTM3U #EXT-X-TARGETDURATION:3
#EXT-X-VERSION:3 #EXT-X-MEDIA-SEQUENCE:0 #EXTINF:3.00000, hls0.ts #EXTINF:3.00000, hls1.ts ϙʔϦϯά
HLS (HTTP Live Streaming) .m3u8 hls0.ts hls1.ts ϓϨΠϠʔ ϙʔϦϯά #EXTM3U
#EXT-X-TARGETDURATION:3 #EXT-X-VERSION:3 #EXT-X-MEDIA-SEQUENCE:0 #EXTINF:3.00000, hls0.ts #EXTINF:3.00000, hls1.ts
HLS (HTTP Live Streaming) .m3u8 hls0.ts hls1.ts hls2.ts ϓϨΠϠʔ #EXTM3U
#EXT-X-TARGETDURATION:3 #EXT-X-VERSION:3 #EXT-X-MEDIA-SEQUENCE:0 #EXTINF:3.00000, hls0.ts #EXTINF:3.00000, hls1.ts #EXTINF:3.00000, hls2.ts ϙʔϦϯά
HLS (HTTP Live Streaming) .m3u8 hls0.ts hls1.ts hls2.ts ϓϨΠϠʔ #EXTM3U
#EXT-X-TARGETDURATION:3 #EXT-X-VERSION:3 #EXT-X-MEDIA-SEQUENCE:0 #EXTINF:3.00000, hls0.ts #EXTINF:3.00000, hls1.ts #EXTINF:3.00000, hls2.ts ϙʔϦϯά
HLSͱԆ • ηάϝϯτϑΝΠϧͷ͞ʹ࠷ͷͳ͕͞ • EXT-X-STARTλάΛ͏ͱϓϨΠϦετͷ࠶ੜΦϑηοτΛܾΊΒΕΔ • pixiv Sketch LiveͷઃఆͩͱԆ10ʙඵ͘Β͍ •
͍·ͷͱ͜ΖؤுΔͱ3ඵ͘Β͍·ͰॖΊͦ͏
γεςϜߏ Transcoder Transcoder Transcoder RTP stream Stream Manager Msgpack stream
TS TS TS ৴ऀ WebRTC SFU WebRTC API Transcoder: H.264/AVC, OpusετϦʔϜΛ τϥϯείʔυ͠ɺMPEG2-TS ʹmuxingͯ͠ग़ྗ Stream Manager: Transcoderͷϓϩηεཧ RTPετϦʔϜΛύʔε͠ɺॱং ੍ޚΛߦͬͯTranscoderʹ͓͘Δ Transcoder͕ग़ྗͨ͠TSϑΝΠϧ ΛHLSʹه API: ετϦʔϜΛ࢝ΊΔAPI ·ͩαʔϏε༷͕ܾ·͍ͬͯ·ͤΜ
WebRTC SFU • WebRTC SFU / ηογϣϯཧʹWebRTC SFU SoraΛ࠾༻ •
Sora͕ղআͨ͠RTPετϦʔϜΛStream Managerʹసૹ RTP stream WebRTC SFU WebRTC
Stream Manager Transcoder Stream Manager RTP stream UDP HTTP API
TCP • GoͰॻ͔Εͨγϯάϧϓϩηεαʔό • ඞཁͳͷTranscoderϓϩηεΛىಈ • RTPετϦʔϜΛσίʔυɺύʔεͯ͠Msgpackʹ٧Ίͯ͠τϥϯείʔμʹసૹ • RTPετϦʔϜUDPͷͨΊॱং੍ޚɺόοϑΝϦϯά͕ඞཁʹͳΔ Msgpack
RTP • ϦΞϧλΠϜੑͷͨΊʹ࠶ૹ੍ޚͳͲΛল͍ͨϓϩτίϧ • UDPͳͷͰॱং੍ޚ͞Ε͍ͯͳ͍͕ɺγʔέϯε൪߸ؚ͕·Ε͍ͯΔͷͰ γʔέϯε൪߸Λϕʔεʹฒͼସ͑Δඞཁ͕͋Δ • RFC3350(RTP)ͰϖΠϩʔυͷ༰·Ͱఆٛ͞Ε͍ͯͳ͍ • H.264:
RFC6184 • Opus: RFC7587
Transcoder • RustͰॻ͔ΕͨCLIϓϩηε • bindgenΛར༻ͯ͠C++ͷSDKΛόΠϯυ • livavformatΛར༻ͯ͠ԻͱಈըΛmuxing Tesla NVIDIA Video
Codec SDK Transcoder Libavformat
NVDEC/NVENC • NVIDIA Tesla GPUʹࡌ͞Ε͍ͯΔNVDEC/NVENCΛར༻ https://developer.nvidia.com/nvidia-video-codec-sdk
NVDEC/NVENC • ࣮ࡍʹσίʔυ/ΤϯίʔυॲཧΛΔͷCUDAίΞͰͳ͘ઐ༻νοϓ • ઐ༻νοϓͷʹΑͬͯॲཧͰ͖ΔετϦʔϜ͕ܾ·Δ • decoder/encoder/cudaͦΕͧΕͷෛՙΛϞχλϦϯά͢Δͷ͕ॏཁ • CUDAεέʔϦϯάʹ͚ͩ༻
NVDEC/NVENC Τϯίʔμෛՙ͕ߴΊ
Rust • ͍͞͠ΐʹࢼͯ͠ΒͬͨΞϧόΠτ͕Ұ൪͘ॻ͚Δͷ͕Rustͩͬͨ • ϝϞϦ·ΘΓͷॻ͖ํ͕C++ΑΓ҆͘͢͝શ/؆୯ • cgoͱҧͬͯbindgenόΠϯσΟϯάίʔυΛੜͯ͘͠ΕΔͷͰཧղ͠ ͍͢
ࠓޙͷల • αʔϏε༷ͷܾఆ • ύέοτϩε࣌ͷΤϥʔॲཧ্ • ϋʔυΣΞΤϯίʔμͷݕূ • αʔϏεͱͯ͠ϦϦʔεʂ
·ͱΊ • ImageFluxͰϥΠϒ৴ߦ͍͖ͬͯ·͢ʂ • ·ͩαʔϏε༷͕ܾ·͍ͬͯͳ͍ͨΊώΞϦϯάΛߦ͍ͬͯΔஈ֊Ͱ͢ • ڵຯ͋Δํੋඇ͓͕͚͍ͩ͘͞