h.264で相互接続 - webrtc meetup tokyo #10
TRANSCRIPT
H.264 で相互接続2016/05/17
WebRTC meet up #10@higed
自己紹介• Twitter:@higed
• JavaScript/Python
• Node.jsでサーバを書きます• 最近は Seleniumをやっています
• アーキテクチャやノウハウについて,情報交換できると嬉しいです• 低レイヤを勉強中です
Firefox46 SDPv=0o=mozilla...THIS_IS_SDPARTA-46.0.1 6924584915519705408 0 IN IP4 0.0.0.0m=video 50515 UDP/TLS/RTP/SAVPF 120 126 97a=fmtp:126 profile-level-id=42e01f;level-asymmetry-allowed=1;packetization-mode=1a=fmtp:97 profile-level-id=42e01f;level-asymmetry-allowed=1…a=rtpmap:126 H264/90000a=rtpmap:97 H264/90000
話すこと
WebRTC手動シグナリング( SDP+ICE), https://lab.infocom.co.jp/demo/webrtc-hand-signaling-easy.html
• H.264で異なるデバイス同士を相互接続するための解説• 相互接続=異なる機器同士で通信ができること
• WebRTCの SDPでいうと,media type=videoの部分にあたります
• 扱わないこと• audio, STUN, SDPの詳細
media type = videomedia format = H.264
何で相互接続の話?• H.264が共通コーデックになりつつある
• Chrome M52 => H.264
• Firefox 46 => H.264
• MS Edge => H.264/UC
• 先行する FF/Chromeは相互接続に着手https://bugs.chromium.org/p/chromium/issues/detail?id=543540
いつ,困るのか?• 全てのデバイスが同じ実装のコーデックとは限らない• ネイティブアプリと繋ぐとき• 会議をMCU/SFUで録画するとき• テレビ会議専用端末と繋ぐ• 標準が切り分けの手がかりになることがある
MCU/SFU
Video コーデックは何が決まれば良いのか• エンコーダ+ Packetizer
→符号とパケットは密結合 • Videoに必要なパラメータ• コーデック,解像度,ビットレート,帯域, etc…
• 視聴側能力に合わせる
Video配信側 視聴側
Videopacketize
rVideo
encoderSendUDP
ReceiveUDP
Video de-packetize
rVideo
decoder
http://www.callstats.io/2015/10/30/error-resilience-mechanisms-webrtc-video/
RFC6184
• ITU-Tと連携した IETFドラフト• H.264の RTPにおけるフォーマットを規定する
• SVC/MVCは除く• Offer/Answerの SDPを突き合わせると分かることも https://tools.ietf.org/html/rfc6184
a=fmtp:126 profile-level-id=42e01f;level-asymmetry-allowed=1;packetization-mode=1a=fmtp:97 profile-level-id=42e01f;level-asymmetry-allowed=1
SDPでやり取りするmedia formatが分かる
Firefox46 SDP
a=fmtp:126 profile-level-id=42e01f;level-asymmetry-allowed=1;packetization-mode=1a=fmtp:97 profile-level-id=42e01f;level-asymmetry-allowed=1
profile-leve-id
0x42(66) :profile_idc…BaseLine Profile0xe0:profile_iop…互換性フラグ0x1f(31) :level_idc…Level 3.1(1280x720)→[email protected] で BP,MP, HPで復号可能
• Profile デコーダの能力+フォーマットアプリケーションに応じた機能群・ BaseLineProfile:テレビ会議,携帯電話向け・基本ツール+エラー耐性・ Iスライス, Pスライス
• Level 画像サイズとビットレートL1:QCIF, L2:CIF, L3:SDTV,L4:HDTV, L5:4K, L6:8K→整数部でサイズを規定
Firefox46 SDP
a=fmtp:126 profile-level-id=42e01f;level-asymmetry-allowed=1;packetization-mode=1a=fmtp:97 profile-level-id=42e01f;level-asymmetry-allowed=1
packetization-mode• packetization-mode
• ビデオストリームをパケット化する, NAL(Network Abstraction Layer)のモードを表す.
• モードに応じてサポートするPayload Typeは変わる.
asymmetry-allows1…Offer/Answerで異なる Levelの仕様を許可packetization-mode0…(MUST)Single NALモード専用1…(SHOULD)非インタリーブモード (Single NAL, FU-Aなど )
まとめ• H.264は当面,主要ブラウザにおける共通コーデックとなりそうです• ネイティブアプリ /サーバも H.264で繋ぐ場合,開発者同士で問題を解決が必要な場合があります• 解決するための基準として, IETF標準が役に立つことがあります
参考 :Chrome SDP( 抜粋 )Chrome canary M52
m=video 54173 UDP/TLS/RTP/SAVPF 100 101 107 116 117 96 97 99 98a=rtpmap:100 VP8/90000a=rtpmap:101 VP9/90000a=rtpmap:107 H264/90000a=fmtp:107 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f