問題タブ [rtp]
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.
android - Android モバイル デバイス上の RTP クライアント アプリケーション
皆さん、サーバーからストリーミング ビデオを再生できる Android デバイスで RTP クライアントを開発しています。どのように始めればよいか混乱していますか?HTML、CSS、Javascript を使用して、後で Android にラップできる Web アプリを開発することを考えています。このアプローチは正しいですか? JavaScript はリアルタイム メディア プレーヤーをサポートしていますか? 私を案内してください、私は新鮮で完全に無知です..:(
sip - mjsip/jmfを使用するとローカルRTPポートに到達できません
mjsipを使用して外部VoIPプロバイダーへのSIPセッションを作成します。次に、RtpManagerを使用してrtp経由でテストwavファイルをプロバイダーに送信します。
プログラムはエラーなしで実行され、私はsip呼び出しに応答します。ただし、音声は送信されません。Wiresharkでネットワークトラフィックを診断すると、ローカルホスト(ある種のNATの背後)からVoIPプロバイダーへのRTPトラフィックが大量に表示されますが、何も返されません。
しばらくすると、プロバイダーからローカルホストへのICMPエラー「Destinationunreachable(Port unreachable)」が表示されます。
ソフトウェアlinphoneは、同じlocalhostおよびvoipプロバイダーを使用して動作しますが、異なるsipスタックを使用しています。
助言がありますか?
ありがとう
c++ - パケット損失をデバッグするには?
約 400 kbps の RTP ストリームを提供する C++ アプリケーション (Linux 上で実行) を作成しました。ほとんどの宛先ではこれで問題なく動作しますが、一部の宛先ではパケット損失が発生します。問題のある送信先は一般的に接続が遅いようですが、送信しているストリームには十分な速度であるはずです。
これらの宛先は、パケット損失なしで他のアプリケーションの同様の RTP ストリームを受信できるため、アプリケーションに問題がある可能性があります。
私はすでにいくつかのことを確認しました: - tcpdump で、すべての RTP パケットが送信側のマシンで送信されていることがわかります - UDP 送信バッファーが配置されています (64KB から 300KB の間のサイズを試しました) - RTP パケットはほとんど 1400 バイト未満のままです断片化を避けるために
パケット損失の可能性を最小限に抑えるために送信側アプリケーションができることと、そのような状況をデバッグする最善の方法は何ですか?
voip - 「RFC2833RTPイベント」の連続イベントとE「終了」ビット
Eビットが0のときにdtmfサウンドが鳴り、1のときに音が出ないのはなぜですか?(RTPパケットはどちらの方法でもwiresharkに表示されます)
バックグラウンド:
http://www.ietf.org/rfc/rfc2833.txtで概説されているようにRFC2833dtmfイベントを送信して 、Eビットが設定されていない場合に次の動作を取得できます。
たとえば、キー7874556332111111145855885#3
が押されると、すべてのイベントが送信され、wiresharkなどのプログラムに表示されますが、音だけが87456321458585#3
鳴ります。そのため、最初のキー(別の問題である可能性があります)とイベントの繰り返し(つまり11111)は鳴りません。
上記のリンクされたドキュメントのセクション3.9、図2では、最後のイベントを除くすべてのイベントにEビットが設定されている911の例が示されています。
すべての数値に対して「E」ビットを1に設定すると、イベントが鳴ることはありません。
私はいくつかの考えられる原因を考えましたが、それらが理由であるかどうかはわかりません:
1)図2は、送信された96および97のペイロードタイプを示しています。これらのヘッダーは送信していません。セクション3.8では、コード96と97は、「動的ペイロードタイプ96と97がそれぞれ冗長メカニズムと電話イベントペイロードに割り当てられている」と説明されています。
2)セクション3.5「E:」で、「送信者は、最初の送信ではなく、トーンの最後のパケットを再送信するまで、終了ビットの設定を遅らせることができます」誰かが実際にこれを行う方法を知っていますか?
3)別の出力ストリームもありますが、このストリームの聴取を妨げているのではないかと思います。
4)タイムスタンプ間隔とRTPマーカーもいじっています。
どんな助けでも大歓迎です。関連する領域のwiresharkイベントキャプチャのサンプルを次に示します。
注意:ietf.org/rfc/rfc2833.txt仕様で説明されているように、ゼロの音量は取得可能な最大レベルです。
"音量:DTMFディジットおよびトーンとして表現可能なその他のイベントの場合、このフィールドはトーンの電力レベルを示し、符号を落とした後のdBm0で表されます。電力レベルの範囲は0〜-63 dBm0です。有効なDTMFの範囲は0〜 -36 dBm0(受け入れる必要があります)-55 dBm0未満は拒否する必要があります(TR-TSY-000181、ITU-T Q.24A)。したがって、値が大きいほど音量が小さいことを示します。この値はDTMFディジットに対してのみ定義されます。その他の場合イベントの場合、送信者によってゼロに設定され、受信者によって無視されます。」問題は、「イベントの終了」ビットがオンになっている場合です。
java - RTPSocket を使用して RTP パケットを送信する方法
私は JMF に比較的慣れていませんが、ドキュメントを読み、その仕組みを十分に理解しています。RTPSocketsのサーバー側の実装に問題があると言われています。
彼らのイラストと例を見た後。私はまだ少し混乱しています。転送を処理するために、データソースとデータシンク クラスを開発する必要がありますか? しようとしているのは、アプリケーションから基盤となるネットワークにデータをストリーミングし、別のアプリケーションを介してデータを受信することです。受信については理解していますが、送信に関連する手順について理解できません。
どんな助けでも大歓迎です。
networking - SDPおよび固定回線を介してRTPとSIPを接続するプロセス
メディア セッションの開始と SIP クライアントとの結合に問題があります。RFCに記載されている許容可能なシーケンスと、私が読んだ例に従って、同じリクエストテンプレートを再利用して次のリクエストをサーバーに送信する再帰的SIPクライアントを設計しました。私が知る限り、SIP部分はサーバーへの招待と認証にうまく登録されています。コンテンツヘッダーを埋める必要があるため、クライアントへの呼び出しをまだ完了していません(まだ完了していないので、サーバーから503を取得しますが、問題ないと思います)。
長い間、私はメディア セッションをどこから始めればよいかわかりませんでしたが、ゆっくりと JMF の使用方法を学び、RTP 送信を処理するオブジェクトを構築しました。今、私は交差点に立っています。一方、SIP シグナリングはありますが、招待を完了するには SDP コンテンツ ヘッダーが必要です。もう一方には、p2p の方法を知っている RTP があります。
私のデザインを完成させるために、次の質問についてあなたの助けが必要です:
オーディオ/ビデオ形式を JMF から SDP メディア ヘッダーに変換する簡単な//シンプルな//実装された方法はありますか? または、コンテンツヘッダーのすべてのパラメーターを入力するジェネレーターでさえ、コンテンツヘッダーを高速に生成しますか、またはこれを自分で実装する必要がありますか?
SDK の構築が完了し、SIP が起動して実行され、サーバーから OK 応答が返された場合 (呼び出しなどすべての後)、メディア セッションを開始するにはどうすればよいですか? SIP 招待で送信した発信者の詳細に従って p2p を接続しますか?
2が正しい場合、固定電話への接続はどうなりますか? 固定電話は、OK をサーバーに送り返すと、特定のポートで RTP セッションをリッスン/開始することを認識していますか?
それとも私はすべて間違っていましたか?:-/
私が得ることができる助けに本当に感謝しています.答えをどこでも探しましたが、明確ではありません.質問2はあたかも当たり前のことであるかのように無視されます.
前もってありがとう、Adam Zehavi。
追加した:
まず、あなたの応答と、私を助けるために時間を割いてくれてありがとう。
質問 2 に戻ります。
OK 応答を取得すると、SIP ユーザー エージェント サーバー (UAS) がリッスンしている IP ソケット ( ADDRESS:PORT が正しいという意味ですか? ) と、それが受け入れて RTP の送信を開始できるコーデックがわかります。
了解しました。別のことを知りたかったのですが、RTP パケットを UAS に送信するこの会話中に、UAS は両方の UAC 間のブリッジとして使用します。
さて... SIP を使用して会話をインスタンス化し、クライアント情報を一方から他方に送信し、仲介者 (UAS) なしで 2 台のコンピューター間で P2P を確立し、SIP セッションを破棄できますか?
私は今自分自身をよりよく説明したことを願っています...
ありがとう、アダム。
video - 送信者/受信者のパイプラインで H264 を使用すると、巨大な遅延が発生するのはなぜですか?
H264 を使用してビデオを送信するパイプラインを作成しようとすると、自分のマシンから自分のマシンにビデオを送信するのに最大 10 秒の大きな遅延が発生します。これは私の目標には受け入れられないので、私 (または他の誰か) が間違っていることについて StackOverflow に相談したいと思います。
gstrtpbin ドキュメント ページからパイプラインを取得し、Speex を使用するようにわずかに変更しました。
これは送信者パイプラインです: #!/bin/sh
レシーバー パイプライン:
!/ビン/sh
H263 と Speex の組み合わせであるこれらのパイプラインは、十分に機能します。カメラとマイクの近くで指をパチンと鳴らすと、動きと音が同時に聞こえます。
次に、ビデオ パスに沿って H264 を使用するようにパイプラインを変更しました。
送信者は次のようになります: #!/bin/sh
そしてレシーバーは次のようになります: #!/bin/sh
これは、Ubuntu 10.04 で起こることです。Ubuntu 9.04 でこのような大きな遅延が発生していることに気づきませんでした。遅延は 2 ~ 3 秒の範囲で、AFAIR でした。
c++ - RGB画像をH264にエンコードするFFMpeg
2 つの入力ピン (オーディオ用に 1 つ、ビデオ用に 1 つ) を持つ DirectShow フィルターを開発しています。ビデオをH264に、オーディオをAACにエンコードし、RTPを使用して多重化/ストリーミングするために、FFMpegのlibavcodec/libavformat/libavutilを使用しています。これまでのところ、libavcodec を使用してビデオとオーディオを正しくエンコードできましたが、FFMpeg が RTP 多重化もサポートしているようです。残念ながら、H264 エンコーディングと RTP 多重化を実行する方法を示すサンプル コードは見つかりません。良いサンプルを知っている人はいますか?
c# - How do I determine if a packet is RTP/RTCP?
I am using SharpPCap which is built on WinPCap to capture UDP traffic. My end goal is to capture the audio data from H.323 and save those phone conversations as WAV files. But first thing is first - I need to figure out what my UDP packets are crossing the NIC.
SharpPCap provides a UdpPacket class that gives me access to the PayloadData of the message. But I am unsure what do with this data. It's a Byte[] array and I don't know how to go about determining if it's an RTP or RTCP packet.
I've Googled this topic but there isn't much out there. Any help is appreciated.
h.264 - RTPストリームで特定の時間をシークする方法は?
次の構造を持つ録画済みの H264 ビデオをストリーミングしています。
IDR の間に (私の構造内にあります) 32 (ここでは 3 つだけ表示) の他のフレーム (SEI、SPS、PPS などの IDR ではない他のすべてのもの... X-es) があります。
ここで、フレームのタイミングが次のようになっていると仮定します。
今、私は時間にシークしたい 4. そのフレームにシークして送信すると、デコーダーが正しくデコードするために IDR が必要になるため、画像が台無しになります。そのため、適切な IDR (この場合は 1時間 1) でフレームとして送信し、時間 4 で送信します。したがって、画像は適切にデコードされ、すべて問題ありません...しかし... GOV が 32 の場合、非 IDR フレームを送信する必要があります。のインデックスは 31 で、それと対応する IDR の間の時間が 3 秒の場合、実際には必要な時間よりも 3 秒早くなります。GOV タイム スパンの半分をシークできないため、これは正確ではありません。また、GOVを小さく設定できないので、他のアイデアが欲しい...
私の他のアイデアは、最後の既知のIDRを送信してから、必要なフレームの前に来る他のすべての非IDRフレームを送信することでしたが、それらすべてのRTP-TIMEが対応するIDRと同じになるように設定するだけでした。この場合、画像は完全にデコードされますが、上記の場合、必要な時間で非 IDR フレームに続く 3 秒が、デコーダー/プレーヤーで高速化されます (瞬間的なシークはありません)...
何か案は?または、IDR のみをシークでき、その間のフレームはシークできませんか?