WebRTC映像をAirPlayに対応させる挑戦.pdf
by
monolithic-adam
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
WebRTC映像をAirPlayに対応させる挑戦 2026/09/11 iOSDC 2026 セーフィー株式会社 アプリケーション開発部 iOS エンジニア ヘンリーアダム
Slide 2
Slide 2 text
⾃⼰紹介 aaaaa © Safie Inc.|2
Slide 3
Slide 3 text
⾃⼰紹介 Adam Henry(アダムヘンリー) ● 2024年3⽉セーフィー⼊社 ● iOS エンジニア ● 2018, 2022, 2026 iOSDC Speaker @monolithic-adam @monolithic_adam © Safie Inc.|3
Slide 4
Slide 4 text
Safie Viewer for iOS の紹介 Safie Viewer for iOS クラウド録画サービスSafie(セーフィー)は Safie Viewerでリアルタイム映像や過去の録画映 像を⾒ることができます。 ● ● ● DAU 25,000前後 ストア評価 4.4 iOS 17.0+ ○ ● ● 直近の 3 バージョンサポート ⽇本語/英語/タイ語/ベトナム語対応 WebRTC / HLSのハイブリッド動画再⽣に 対応 © Safie Inc.|4
Slide 5
Slide 5 text
アジェンダ aaaaa © Safie Inc.|5
Slide 6
Slide 6 text
アジェンダ ● 外部ディスプレイに配信したい ● 軽く今⽇話す技術の紹介 ○ HLS ○ WebRTC ○ AirPlay ● AirPlayに対応させる挑戦 ● 成功したか‧仕様どこに落ち着いたか ● まとめ © Safie Inc.|6
Slide 7
Slide 7 text
外部ディスプレイに配信したい aaaaa © Safie Inc.|7
Slide 8
Slide 8 text
外部ディスプレイに配信したい ● 「現場の⼤画⾯モニターに映像を流したいユースケースは⼀定ある」→ AirPlay で簡単に⾶ば せたら嬉しい © Safie Inc.|8
Slide 9
Slide 9 text
技術紹介 aaaaa © Safie Inc.|9
Slide 10
Slide 10 text
HLS ● Appleが開発したProtocol ● HTTP Live Streaming (HLS) は⼀般的な Web サーバーから HTTP 経由で⾳声や映像を配信する 技術です。 © Safie Inc.|10
Slide 11
Slide 11 text
WebRTC ● World Wide Web Consortium (W3C)が開発したProtocol ● WebRTC(Web Real-Time Communication)は、プラグインや追加のソフトウェアを必要と せず、ブラウザやアプリケーション間で⾳声、映像、および任意のデータをユーザー同⼠が直 接、リアルタイムにやり取りできるプロトコル。 © Safie Inc.|11
Slide 12
Slide 12 text
AirPlay ● iOS 4, 2010年にリリースされました(Originally AirTunes) ○ 画像‧映像‧オーディオをApple TV, スマートテレビなどに配信できる技術で す。 ● iOS 11.4でAirPlay 2で複数台のスピーカー‧Apple TV同時に配信できる ようになったり、反応速度の改善あったりする © Safie Inc.|12
Slide 13
Slide 13 text
課題 aaaaa © Safie Inc.|13
Slide 14
Slide 14 text
課題 ● Safie Viewer には2つの再⽣モードがある ○ 通常モード: AVPlayer を利⽤して再⽣、 AVPlayerLayer に映像がレンダリングされる ○ 低遅延モード: WebRTC を利⽤して再⽣、 RTCMTLVideoView に映像がレンダリングされる ● HLS の場合はAudioSessionの.airplay設定とAVPlayer にて allowsExternalPlayback = true を 指定すると AirPlay に乗ってくれる ● WebRTC はAVPlayerを通らないのでExternal Playback の⼊⼝がない © Safie Inc.|14
Slide 15
Slide 15 text
課題 © Safie Inc.|15
Slide 16
Slide 16 text
課題 ● ここで⼀回⽴ち⽌まってどうやってできそうか © Safie Inc.|16
Slide 17
Slide 17 text
課題 © Safie Inc.|17
Slide 18
Slide 18 text
フレーム変換 aaaaa © Safie Inc.|18
Slide 19
Slide 19 text
AVSampleBufferDisplayLayer ● AVFoundation 系レイヤーのAVSampleBufferDisplayLayerにWebRTC のフレームを流し込め ば、AirPlay に載せることはできるのかな? © Safie Inc.|19
Slide 20
Slide 20 text
RTCVideoTrackのRenderer ● RTCVideoTrack.add()はRTCVideoRenderer何枚でも接続できる。 ○ アプリの 3D デワープ機能が、カスタムレンダラーでフレームを受け取って Metal テクスチャ化してい る。 © Safie Inc.|20
Slide 21
Slide 21 text
RTCVideoFrame → CVPixelBuffer: バッファは2形態ある © Safie Inc.|21
Slide 22
Slide 22 text
CMSampleBuffer 化 © Safie Inc.|22
Slide 23
Slide 23 text
displayImmediately の設定 © Safie Inc.|23
Slide 24
Slide 24 text
enqueue © Safie Inc.|24
Slide 25
Slide 25 text
WebRTC のフレームは、AVFoundation の世界へ © Safie Inc.|25
Slide 26
Slide 26 text
AirPlay State判定 ● © Safie Inc.|26
Slide 27
Slide 27 text
切り替え ● © Safie Inc.|27
Slide 28
Slide 28 text
AirPlay State判定 ● © Safie Inc.|28
Slide 29
Slide 29 text
パフォーマンス © Safie Inc.|29
Slide 30
Slide 30 text
フレーム変換全体図 ● © Safie Inc.|30
Slide 31
Slide 31 text
ということで。。。 aaaaa © Safie Inc.|31
Slide 32
Slide 32 text
失敗 © Safie Inc.|32
Slide 33
Slide 33 text
今後 aaaaa © Safie Inc.|33
Slide 34
Slide 34 text
代替案 ● 現実的な範囲でベストな代替案を、ユーザー体験を考えて4つの案が出てきました ○ Screen Mirroring ○ Second Screen ○ HLS Bridge ○ HLS Fallback © Safie Inc.|34
Slide 35
Slide 35 text
Screen Mirroring © Safie Inc.|35
Slide 36
Slide 36 text
Screen Mirroring © Safie Inc.|36
Slide 37
Slide 37 text
Second Screen © Safie Inc.|37
Slide 38
Slide 38 text
Second Screen © Safie Inc.|38
Slide 39
Slide 39 text
HLS Bridge © Safie Inc.|39
Slide 40
Slide 40 text
HLS Bridge © Safie Inc.|40
Slide 41
Slide 41 text
HLS Fallback © Safie Inc.|41
Slide 42
Slide 42 text
HLS Fallback © Safie Inc.|42
Slide 43
Slide 43 text
外部ディスプレイ対応 © Safie Inc.|43
Slide 44
Slide 44 text
まとめ aaaaa © Safie Inc.|44
Slide 45
Slide 45 text
まとめ ● HLS対応するにはAudioSessionの設定とallowsExternalPlaybackさえ設定すれば簡単に AirPlay対応できる ● ● WebRTC映像をAirPlayに対応まで持っていけなかったです ○ 映像を取り出せる⽅法を⾒つかったが、AirPlayまで載せる⽅法はなかった。。。 ○ 挑戦のおかげでちょっとAVFoundation/AirPlay周り詳しくなりました 現実的な代替としては「AirPlay 中だけ HLS に切り替える」案が最有⼒(導⼊は今後の判断) © Safie Inc.|45
Slide 46
Slide 46 text
参考資料 ● https://developer.apple.com/documentation/avfoundation/integrating-airplay-for-long-f orm-video-apps ● https://developer.apple.com/library/archive/referencelibrary/GettingStarted/AboutHTTP LiveStreaming/about/about.html ● https://developer.apple.com/documentation/avfoundation/avsamplebufferdisplaylayer ● https://developer.apple.com/documentation/avfoundation/avplayer/allowsexternalplay back ● https://developer.apple.com/documentation/avfaudio/avaudiosession/routesharingpoli cy-swift.enum/longformaudio ● https://webrtc.googlesource.com/src/ © Safie Inc.|46
Slide 47
Slide 47 text
ご清聴ありがとうございました Thank you! © Safie Inc.|47
Slide 48
Slide 48 text
We are hiring! © Safie Inc.|48