はじめに
WowzaがWebRTCに対応しているので
Camera(H.264/G.711) -> Wowza(H.264/Opus) -> webrtc-examples
で視聴確認を行った。その際エラーが出て視聴が行えず、対応に時間を要したのでメモとして残しておく。
なおCameraはH.264/G.711を配信しているのでWowzaにてトランスコード設定(G.711→Opus) を実施している。
※最初は「Wowza(H.264/AAC)」にしてて「あれ?音が出ないぞ?」となり「Wowza(H.264/Opus)」にした経緯もあったりなかったり。
何故Opus?
以下に記載があるが現時点ではOpusがオススメなのと、WebRTCの設定画面では「only」という記載があったことも関係している。
webrtc-examples とは?
WowzaのWebRTC関連ページ(公式)を見ていくと紹介されているサンプル。
実行してブラウザでアクセスするとWebRTCのpublishやplayが試せる。
トランスコード設定
Wowzaのトランスコード設定で本記事に関係するAudio設定だけを以下に抜粋する。
※ここでは設定が「Audio Codec」、「Audio Bitrate」のみである点に注目。
エラーの内容
webrtc-examplesで必要情報を入力し、いざPlay!と思ったら以下のエラーメッセージが出た。
PeerConnection Error: Failed to execute 'setRemoteDescription' on 'RTCPeerConnection': Failed to set remote offer sdp: Failed to set remote audio description send parameters for m-section with mid='audio'.
webrtc-examplesのサンプル上では以下のように。
この時のSDPの内容は以下の通り。(本記事に関係する部分だけ抜粋)
m=audio 9 RTP/SAVPF 96
a=rtpmap:96 OPUS/8000/1
"OPUS/8000/1" の部分は "コーデック/サンプリングレート/チャンネル数" と思われる。
それを踏まえ(?)エラーメッセージを基に調べて行くとどうやらサンプリングレート:48000Hz、チャンネル数:2(ステレオ)じゃないとダメということが分かった。
ただし先述の「トランスコード設定」では「Audio Codec」、「Audio Bitrate」のみ。
さらに次はトランスコード設定でサンプリングレートとチャンネル数を指定する方法を調べる。
すると、、、
トランスコード設定(サンプリングレートとチャンネル数)
先述の「トランスコード設定」で設定した内容は以下のようにXML形式で保存されている。
<Encode>
<Name>MyTransCodeName</Name>
<Enable>true</Enable>
<Description>Copy of: 720p</Description>
<StreamName>mp4:${SourceStreamName}_mycamera</StreamName>
<Audio>
<Codec>Opus</Codec>
<Bitrate>16000</Bitrate>
</Audio>
</Encode>
これを以下のように修正するとよいようだ。(<Resample> ~ </Resample>を追加)
<Encode>
<Name>MyTransCodeName</Name>
<Enable>true</Enable>
<Description>Copy of: 720p</Description>
<StreamName>mp4:${SourceStreamName}_mycamera</StreamName>
<Audio>
<Codec>Opus</Codec>
<Bitrate>16000</Bitrate>
<Resample>
<Enable>true</Enable>
<SampleRate>48000</SampleRate>
<Channels>2</Channels>
</Resample>
</Audio>
</Encode>
保存した後、Wowzaを再起動して配信&視聴を実施すると先述のエラーメッセージが出ることなく無事に視聴ができた。またSDPも以下のように変わっていた。
m=audio 9 RTP/SAVPF 96
a=rtpmap:96 OPUS/48000/2
最後に
- なぜデフォルトが8000/1?
- なぜUIで設定できない??
不思議である。