h.264で相互接続 - webrtc meetup tokyo #10

11
H.264 ででででで 2016/05/17 WebRTC meet up #10 @higed

Upload: goforbroke

Post on 08-Feb-2017

1.149 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: H.264で相互接続 - WebRTC Meetup Tokyo #10

H.264 で相互接続2016/05/17

WebRTC meet up #10@higed

Page 2: H.264で相互接続 - WebRTC Meetup Tokyo #10

自己紹介• Twitter:@higed

• JavaScript/Python

• Node.jsでサーバを書きます• 最近は Seleniumをやっています

• アーキテクチャやノウハウについて,情報交換できると嬉しいです• 低レイヤを勉強中です

Page 3: H.264で相互接続 - WebRTC Meetup Tokyo #10

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

Page 4: H.264で相互接続 - WebRTC Meetup Tokyo #10

何で相互接続の話?• 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

Page 5: H.264で相互接続 - WebRTC Meetup Tokyo #10

いつ,困るのか?• 全てのデバイスが同じ実装のコーデックとは限らない• ネイティブアプリと繋ぐとき• 会議をMCU/SFUで録画するとき• テレビ会議専用端末と繋ぐ• 標準が切り分けの手がかりになることがある

MCU/SFU

Page 6: H.264で相互接続 - WebRTC Meetup Tokyo #10

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/

Page 7: H.264で相互接続 - WebRTC Meetup Tokyo #10

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が分かる

Page 8: H.264で相互接続 - WebRTC Meetup Tokyo #10

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→整数部でサイズを規定

Page 9: H.264で相互接続 - WebRTC Meetup Tokyo #10

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など )

Page 10: H.264で相互接続 - WebRTC Meetup Tokyo #10

まとめ• H.264は当面,主要ブラウザにおける共通コーデックとなりそうです• ネイティブアプリ /サーバも H.264で繋ぐ場合,開発者同士で問題を解決が必要な場合があります• 解決するための基準として, IETF標準が役に立つことがあります

Page 11: H.264で相互接続 - WebRTC Meetup Tokyo #10

参考 :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