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