XMPPサーバーに接続された他のWebRTC対応デバイスへの音声/ビデオ通話を可能にするAndroidデバイス用のアプリケーションの開発に取り組んでいます。私はすでに Android デバイス間でアプリケーションを音声/ビデオ チャットすることに成功しており、現在、その機能を WebRTC 対応ブラウザーに拡張する作業を行っています。ブラウザからブラウザへの音声/ビデオ通話に成功しましたが、そのシステムは SDP プロトコルで動作し、構築した Android アプリケーションはジングル プロトコルで動作します。以前に行われたように、SDP プロトコルで動作するように Android アプリケーションを書き直すことができることを知っています。ただし、Android デバイスでジングル プロトコルを引き続き使用したいのですが、
すでに行われている SDP / Jingle トランスレータ ( Phono ライブラリ具体的には)現在、ブラウザ クライアントと Android デバイスを使用して、音声/ビデオ コールのメディアの側面を正常にネゴシエートしています。ただし、一方が他方に接続しようとしている間、物事は失敗しているようです。私の一部は、失敗はICE / JINGLEの翻訳にあると信じています. 「onececandidate」を介してブラウザーに渡される氷の候補には、ユーザー名とパスワードの情報が含まれていないことに気付きました。ブラウザ クライアントによって生成された元の SDP オファーのユーザー名とパスワードの情報を、適切な各候補 (音声とビデオ) にコピーしようとしましたが、成功しませんでした。また、トランスポートスタンザにユーザー名とパスワードの情報を含めないようにしましたが、それも何も得られませんでした。
私はブラウザ側で通信中にwiresharkを実行しましたが、Androidデバイスが最終的に「セッション終了」信号を送信するまで、ブラウザとAndroidデバイスの間でバインディングエラーが発生し続けました. 具体的には、次のことを確認しています。
STUN 158 Binding Request ユーザー: r8bGP7y5LklOOKEb:IjgBbKgXQe9V8Pur
古い資格情報ユーザー: r8bGP7y5LklOOKEb:IjgBbKgXQe9V8PurSTUN 130 バインディング エラー応答エラー コード: 274 (不明なエラー コード)
最終的にエラー応答が表示されなくなり、次のようなメッセージが表示され始めます。
ICMP 186 宛先に到達できません (ポートに到達できません)
私はまだネゴシエーションのICE /トランスポート部分にかなり慣れていないので、wiresharkログのいずれかが関連していたかどうか、または問題を正しく診断しているのかどうかさえわかりません.
私が間違っているかもしれないことを誰かが知っていますか?または、SDP ベースのクライアントとジングル ベースのクライアント間の接続を確立した経験はありますか?
ICE翻訳で私が何をしているかを明確にするため。
社民党候補:
a=candidate:[foundation] [component-id] [transport type] [priority] [connection address] [port] [candidate type] [username] [password] [generation]
ジングル候補:
<candidate component="[comp]" name="[name]" address="[ip]" port="[port]"
protocol="[proto]" username="[uname]" password="[pass]" preference="[pref]"
generation="[gen]"/>
Jingle から SDP に移行するときは、次のマッピングを使用します。
foundation = randomly generated number
component-id = comp
transport type = udp
priority = pref * 10000
connection address = ip
port = port
candidate type = typ host
username = uname
password = pass
sdpMLineIndex = 0 if audio, 1 if video
sdpMid = audio / video
SDP から Jingle に移動するときは、次のマッピングを使用します。
comp = component-id
name = event.candidate.sdpMid (with the adjustment of rtp and rtcp based on
component value)
ip = connection address
port = port
proto = transport type
uname = varies from being empty to being the respective one generated in the
original SDP media information
pass = varies from being empty to being the respective one generated in the
original SDP media information
pref = 0.99
gen = 0
Chrome で取得している ICE 候補の例:
a=candidate:3376904655 2 udp 2113937151 192.168.1.144 46794 typ host generation 0
a=candidate:1208975227 1 udp 1845501695 xxx.xxx.xxx.xxx 46794 typ srflx raddr 192.168.1.144 rport 46794 generation 0
Jingle から取得している ICE 候補の例:
<candidate name="video_rtp" address="xxx.xxx.xxx.xxx" port="37275" preference="0.99" username="4XqIQDW4n9lJrIOM" protocol="udp" generation="0" password="F0Vc9tWo4S2/VhleJ/BdNOId" type="local" network="wlan0"/>
<candidate name="video_rtp" address="xxx.xxx.xxx.xxx" port="54429" preference="0.86" username="0ftgSUZ0qRFXlMh5" protocol="udp" generation="0" password="lIyHJZuZt8L/wIZnnqfQfRED" type="stun" network="wlan0"/>