問題タブ [sdp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - H.264 UDP パケットを再生可能なメディア ストリームまたはファイルに変換する方法 (最適化)
SDP セッションの UDP ストリームをデコード可能な H.264 ストリームに変換する際に、いくつかの基本的なことが欠けています。H.264 対応のカメラでテストしており、プレーヤーでストリームを直接再生できます。翻訳されたストリームを再生しようとすると、プレーヤーによって認識されません (ヘッダーの欠落エラー)。ただし、これを Java アプリケーションに統合できるようにするには、UDP ストリームをデコードする必要があります。
私はすでに次の質問に対する非常に良い答えを見てきました:
- DirectShow ソース フィルターのデコーダー フィルターでデコードできるように生の UDP パケットを処理する方法
- ffmpeg (libavcodec) で H264 ビデオを RTP 経由でデコードする際の問題
どちらにもいくつかの小さな違いがあり、混乱を招きます (以下を参照)。
しかし、最初に簡単な部分を見てみましょう。カメラから見ると、SPS パケットと PPS パケットが送信されています。残りのすべてのパケットは、インデックス化されているかどうかにかかわらず、断片化されたフレームです。
フレームのないすべてのパケット (私の場合は NALUnitType 7 と 8 のみ) について、RTP ヘッダー (12 バイト) を取り除き、開始バイト 3 x 0 バイトと 1 x 1 を前に追加します (00 00 00 01)。
すべてのフラグメント化されたフレーム パケットについて、回答 1 の説明に従って再構築します。つまり、詳細には、RTP ヘッダーを削除します (これをデータ検証に使用します)。次に、ペイロードからフラグメント情報をデコードします。
最初のバイト: [ 3 NAL UNIT BITS | 5 FRAGMENT TYPE BITS]
2 番目のバイト: [ START BIT | エンドビット | 予約済みビット | 5 NALユニットビット]
開始ビットが設定されている場合、次のように構築された新しいペイロード ヘッダーがあります。[3 NAL UNIT BITS (最初のバイトから) | 5 NAL UNIT BITS (2 番目のバイトから)]
これにより、非 IDR スライスの NALUnitType 1 または IDR スライスの 5 が得られます。これは仕様によるものです。
この新しいペイロード ヘッダー (1 バイト) を取得し、2 バイトのヘッダーを除いたペイロードを新しいパッケージに添付します。エンド ビット情報が表示されるまで、すべての連続するフラグメントが同じ方法で追加されます (12 バイトの RTP ヘッダーのストリップ、ユニット タイプ情報の 2 バイトのストリップ)。最後が見えたら、このパケットの前に開始バイト (00 00 00 01) を置き、それをストリームに書き出します。
問題は、不明な理由でデコードできないことです。私が読んだ回答の回答 2 の違いは、ペイロード ヘッダーの 2 番目のバイトが変換されたパケットにも配置される可能性があることです。しかし、私は両方を試しましたが、まだ運がありません。
おそらく、新しく構築されたストリームには他に何か欠けているものがありますか? または、デフラグを間違えていますか?
php - PHPでSIP/SDPプロトコルを使用してメッセージを送信する方法
私がやろうとしているのは、SIPメッセージをリッスンするSIPクライアントを実装することです。サーバー上でSIPクライアントを実行し192.168.0.246
、SIPサーバーが実行され192.168.2.40
ています。下のスクリーンショットを見てください。
でクライアント コードを実行しているサーバーのトレース ファイルです192.168.0.246
。ご覧のとおり、サーバーは192.168.2.40
SIP/SDP プロトコルを使用してメッセージを受信しますが、192.168.0.246 で実行されているクライアント プログラムが UDP プロトコルを使用して 192.168.2.40 にメッセージを送り返すと、正しい UDP プロトコルとして表示されます。しかし、192.168 からの応答はありません。この後2.40。だから私はそれが次のように示されているプロトコルと関係があると仮定しています.だから私UDP
が儀式なら、それをSIP / SDPに取得する必要があります.
したがって、私の質問は、この UDP を SIP/SDP に変更する方法です。
そして、ここに私のPHPコードがあります:
port - SIP INVITE リクエスト ポートがめちゃくちゃになる
resiprocateを使用して NAT トラバーサル ソリューションを開発すると、正常に動作しますが、特に cisco ルーターで SIP INVITE get が失敗することがよくあります。
1. SIP REGISTER はポート 1024 から送信されます
ソース: 107.108.188.26
宛先:107.108.188.52
ユーザー データグラム プロトコル、送信元ポート: 1024 (1024)、送信先ポート: sip (5060)
2. SIP ステータス 200 OK
ソース: 107.108.188.52
宛先:107.108.188.26
ユーザー データグラム プロトコル、送信元ポート: sip (5060)、送信先ポート: 1024 (1024)
3. SIP/SDP 招待
送信元: 107.108.188.52 送信先: 107.108.188.26 ユーザー データグラム プロトコル、送信元ポート: sip (5060)、送信先ポート: sip (5060)
理想的には、ステップ 1 とステップ 3 の送信元ポートは 1024 である必要があります。同じ理由があれば教えてください。
android - Androidでsdpファイルを再生するには?
次のコードを使用して .3gp 形式のビデオを再生していますが、正常に動作しますが、.sdp URL の再生中に問題に直面しています。
フォーマットを再生する必要がありrtsp://ss1c6.idc.mundu.tv:554/prf0/cid_29.sdp
ますが、機能しません。私を助けてください。VLCとMX Playerで再生してみました。
streaming - ネットワーク アドレスが見つかりませんでした
UBUNTUにopenRTSPをインストールし、コマンドを使用してurl rtsp://simplelive.nexg.tv:554/starplus_mpeg.sdpを呼び出してみました
エラーが発生しています
画面の説明を取得したいのですが、このエラーが発生する理由と解決方法を教えてください。
android - Chrome / Android Jingle-SDP ICE 接続失敗
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]
ジングル候補:
Jingle から SDP に移行するときは、次のマッピングを使用します。
SDP から Jingle に移動するときは、次のマッピングを使用します。
Chrome で取得している ICE 候補の例:
Jingle から取得している ICE 候補の例: