Presented at Battle Conference U30 http://bcu30.jp/ 11 MAR. 2017 Sample app repository: https://github.com/ra1028/LiveStreamingApp
HTTP Live Streamingin iOS2017/03/11 Battle Conference U30Ryo Aoyama / ra1028CyberAgent, Inc
View Slide
FRESH! ϩάΠϯෆཁɾߴը࣭Ͱੜ์ૹ͕ݟ์
Contents̋ ͬ͘͟ΓHLSʹ͍ͭͯ̋ ͬͱͬ͘͟ΓAVFoundationʹ͍ͭͯ̋ σϞ
HLS
AppleۘͷετϦʔϛϯάಈը৴ϓϩτίϧHTTP Live StreamingLive or VOD(Video On Demand)HLSηάϝϯτϑΝΠϧ ʴ ϓϨΠϦετ
ಈըϑΝΠϧΛ͋ΔҰఆ࣌ؒͷࡉ͔͍MPEG2-TSηάϝϯτϑΝΠϧʹׂͨ͠ͷηάϝϯτϑΝΠϧ .ts
ηάϝϯτϑΝΠϧͷҐஔɺ࠶ੜ࣌ؒɺߋ৽සͳͲͷใ͕هࡌ͞ΕͨϝλσʔλϑΝΠϧϓϨΠϦετ .m3u8
ΦϦδφϧͷಈըϑΝΠϧηάϝϯτϑΝΠϧ܈ʹׂ
ߋ৽සใΛͬͯఆظతʹϓϨΠϦετͷߋ৽Λࢹ
ߋ৽͕͋Ε࠷৽ͷtsϑΝΠϧΛऔಘ͢Δ
ߋ৽͕ͳ͚Εࢹ͠ͳ͕Β࣍ͷߋ৽·Ͱͭ͜ͷ͕࣌ؒൃੜ͠ͳ͍Α͏ͷʹߋ৽සͱTSϑΝΠϧ࠶ੜ࣌ؒௐ͢Δɻ
͜ͷλά͕͋Δ͜ͱͰϓϨΠϦετऴྃ͢Δࣄ͕Ͱ͖ΔͨΊɺVODͱΈͳ͢͜ͱ͕Ͱ͖Δɻ
جຊతʹɺಈըΛMPEG2-TSϑΝΠϧʹׂɺϓϨΠϦετΛߋ৽ΫϥΠΞϯτଆͰϓϨΠϦετΛࢹɺߋ৽͞ΕͨΒ࠷৽ͷ.tsϑΝΠϧΛ࠶ੜ͜Ε͚ͩͰ݁͢ΔγϯϓϧͳϓϩτίϧɻHLS·ͱΊ
iOSͰHLS͔ΒಈըΛ࠶ੜ͢ΔʹAVFoundation
ࣸਅɺԻָɺಈըͷAPIΛఏڙ͢ΔɺiOS, macOS, tvOS͚ͷFrameworkɻHLSAppleͷͨΊެࣜͰڧྗʹαϙʔτ͞Ε͍ͯΔɻͨͩ͠ɺཧղ͍͠APIͱ҉ͷ༷͕͖ͭ·ͱ͏…AVFoundation
AVAssetಈըࣗମͷϝσΟΞσʔλϝλσʔλΛϩʔυ͠ɺอ࣋͢ΔΫϥεɻ͜ͷΫϥεΛҾͱͯ͠ ͷΠϯελϯεΛ࡞ΔɻAVPlayerItem
AVPlayerItemಈըͷ࠶ੜεςʔλελΠϜυϝλσʔλͳͲΛऔಘ͢ΔΫϥεɻഔհͱͯ͠AVAssetͷใΛऔಘ͢Δ͜ͱ͕Ͱ͖Δɻ͜ͷΫϥεΛҾͱͯ͠ ͷΠϯελϯεΛ࡞ΔɻAVPlayer
AVPlayerಈըͷ࠶ੜɺఀࢭͳͲΛཧ͢ΔίϯτϩʔϥΫϥεɻԻɺ࠶ੜϨʔτͷઃఆγʔΫͳͲ͜ͷΫϥεΛհͯ͠ߦ͏ɻ͜ͷΫϥεΛ ʹઃఆ͢Δ͜ͱͰಈըΛඳը͢Δ͜ͱ͕Ͱ͖ΔɻAVPlayerLayer
AVPlayerLayerAVPlayer͔ΒͷใΛͬͯಈըΛඳը͢ΔUIΛఏڙ͢ΔΫϥεɻCALayerͷαϒΫϥεͳͷͰUIViewͷlayerClassΛoverrideͯ͠༻͢Δ͜ͱ͕ଟ͍ɻ
AVPlayerItemAVAssetAVPlayerಈըใͷऔಘྃ(࠶ੜՄೳ)AVPlayerLayerUIViewΠϯελϯεΛੜ(ϝΠϯεϨουʂ)දࣔ४උྃUIʹಈըใΛ༩͑ɺඳըͤ͞Δ
AVPlayerItemAVAssetAVPlayerAVPlayerLayerUIViewಈըΛมߋ͢Δ߹͜ΕΒͷάϧʔϓશͯഁغ͢Δಛʹͷ̎ͭಉҰεϨουͰಉ࣌ʹഁغ
ࡉ͔ͳ੍ޚΛߦΘͳ͍࠶ੜ·Ͱɺ͔ͳΓ؆қతʹHLSΛѻ͏ࣄ͕Ͱ͖ΔɻνϡʔχϯάͷͨΊʹϚϧνεϨουͰѻ͏ʹҙ͕ඞཁɻAVFoundation·ͱΊ
Demo
৴αʔόʔͱͯ͠ΧϝϥͰࡱͬͨಈը͔ΒHLSΛ৴͢ΔɻDemoαʔόʔiPhoneʹΞΫηεͯ͠AVFoundationͰ࠶ੜ͢Δɻ
DemoGitHub Repository:https://github.com/ra1028/LiveStreamingApp
iOSͷAVFoundationɺAndroidͷExoPlayerͳͲʹΑͬͯωΠςΟϒͰڧྗʹαϙʔτ͞Ε͍ͯΔɻiPhoneαʔόʔͰ৴Ͱ͖ͯ͠·͏΄Ͳγϯϓϧͳಈը৴ϓϩτίϧɻAdaptive bitrate streamingͰճઢʹΑΓө૾࣭ΛΓସ͑ͯɺ҆ఆͨ͠࠶ੜΛ୲อͰ͖Δɻ·ͱΊ