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
630
画像処理サービスを作る際の落とし穴を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.9k
ImageFlux Live Streamingについて
imageflux
0
32k
ImageFlux Updates 2018
imageflux
2
1.4k
Other Decks in Technology
See All in Technology
Digitization部 紹介資料
sansan33
PRO
1
5.9k
ソフトウェアテストのAI活用_ver1.50
fumisuke
0
300
AIと共に開発する時代の組織、プロセス設計 freeeでの実践から見えてきたこと
freee
3
590
[JDDStudy #10] 社内Agent勉強会の取り組み紹介
yp_genzitsu
1
130
技術の総合格闘技!?AIインフラの現在と未来。
ebiken
PRO
0
250
AI時代に必要なデータプラットフォームの要件とは by @Kazaneya_PR / 20251107
kazaneya
PRO
4
960
こんな時代だからこそ! 想定しておきたいアクセスキー漏洩後のムーブ
takuyay0ne
4
540
隙間ツール開発のすすめ / PHP Conference Fukuoka 2025
meihei3
0
340
CDKの魔法を少し解いてみる ― synth・build・diffで覗くIaCの裏側 ―
takahumi27
1
120
Rubyist入門: The Way to The Timeless Way of Programming
snoozer05
PRO
5
250
【Android】テキスト選択色の問題修正で心がけたこと
tonionagauzzi
0
130
今、MySQLのバックアップを作り直すとしたら何がどう良いのかを考える旅
yoku0825
0
170
Featured
See All Featured
4 Signs Your Business is Dying
shpigford
186
22k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Context Engineering - Making Every Token Count
addyosmani
9
380
Building Flexible Design Systems
yeseniaperezcruz
329
39k
A Modern Web Designer's Workflow
chriscoyier
697
190k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.2k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
192
56k
Become a Pro
speakerdeck
PRO
29
5.6k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
660
The Power of CSS Pseudo Elements
geoffreycrofte
80
6k
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ͰϥΠϒ৴ߦ͍͖ͬͯ·͢ʂ • ·ͩαʔϏε༷͕ܾ·͍ͬͯͳ͍ͨΊώΞϦϯάΛߦ͍ͬͯΔஈ֊Ͱ͢ • ڵຯ͋Δํੋඇ͓͕͚͍ͩ͘͞