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
620
画像処理サービスを作る際の落とし穴をImageFluxではいかにして超えてきたか / ImageFlux meetup #4 (5)
imageflux
1
3.4k
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.8k
ImageFlux Live Streamingについて
imageflux
0
32k
ImageFlux Updates 2018
imageflux
2
1.4k
Other Decks in Technology
See All in Technology
我々は雰囲気で仕事をしている / How can we do vibe coding as well
naospon
2
220
広島発!スタートアップ開発の裏側
tsankyo
0
230
自社製CMSからmicroCMSへのリプレースがプロダクトグロースを加速させた話
nextbeatdev
0
120
モダンフロントエンド 開発研修
recruitengineers
PRO
2
200
見てわかるテスト駆動開発
recruitengineers
PRO
3
200
Claude Code x Androidアプリ 開発
kgmyshin
1
560
いま、あらためて考えてみるアカウント管理 with IaC / Account management with IaC
kohbis
2
680
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
8.6k
小さなチーム 大きな仕事 - 個人開発でAIをフル活用する
himaratsu
0
120
RAID6 を楔形文字で組んで現代人を怖がらせましょう(実装編)
mimifuwa
0
300
サイボウズフロントエンドの横断活動から考える AI時代にできること
mugi_uno
4
1.4k
Yahoo!ニュースにおけるソフトウェア開発
lycorptech_jp
PRO
0
320
Featured
See All Featured
The Cult of Friendly URLs
andyhume
79
6.5k
Git: the NoSQL Database
bkeepers
PRO
431
65k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.4k
KATA
mclloyd
32
14k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Thoughts on Productivity
jonyablonski
69
4.8k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
110
20k
Making Projects Easy
brettharned
117
6.3k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Agile that works and the tools we love
rasmusluckow
329
21k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
Designing Experiences People Love
moore
142
24k
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ͰϥΠϒ৴ߦ͍͖ͬͯ·͢ʂ • ·ͩαʔϏε༷͕ܾ·͍ͬͯͳ͍ͨΊώΞϦϯάΛߦ͍ͬͯΔஈ֊Ͱ͢ • ڵຯ͋Δํੋඇ͓͕͚͍ͩ͘͞