7

私はAndroidでRTSPクライアントを書いています。私はすべての要求に対する応答を受け取ることができます。

  1. DESCRIBE200OKを送り返します
  2. トランスポートを使用したセットアップ:RTP / AVP:unicast:client_port = 4568:4569が200OKメッセージを返しました
  3. PLAYを送信し、OKメッセージを受け取りました

その後、オーディオとビデオのフレームを取得する方法は?

ブログで検索しましたが、すべてclient_portでリッスンすると言っていますが、パケットを受信して​​いません。

私が正しくやっているのか教えてください。

4

4 に答える 4

4

あなたはこれを知っているかもしれませんし、知らないかもしれませんが、AndroidはVideoViewを使用したRTSPのサポートを組み込んでいます。

http://developer.android.com/reference/android/widget/VideoView.html

これにより、開発時間が短縮される可能性があります...または、独自のRTSPスタックをロールしようとしている場合はまったく役に立たない可能性があります。

于 2009-07-29T22:21:45.487 に答える
3

RTSPは、ストリーミングを開始するためにのみ使用されます。実際のストリームのSDP記述を提供します。チャネル(オーディオ/ビデオ)ごとにRTCP接続とRTP接続を管理する必要があります。使用するポートは「client_port」ポートです。

RTSP / RTCP/RTPスタックを最初からコーディングするのはかなり複雑です。このようなスタックをC++で実装するlive555ライブラリを見ることができます。

于 2009-08-09T10:14:42.737 に答える
1

まず、LAN 内にインストールされたローカルの Darwin Streaming サーバーで試してください。そうすれば、ファイアウォールは問題になりません。ストリーミングは機能します。

外部サーバーから試したい場合は、次のようにします。

1) SERVER 応答に記載されている client_ports を確認します。一部のサーバーは、要求されたポートとは異なるポートを提案します。サーバーによって提案されたポートを使用する必要があります。

2) ポートが正しい場合、各 UDP ポートから 64 バイトの空のパケットをサーバーに送信できます (「ドア オープナー」と呼ばれます)。

3) 上記の 2 つで解決しない場合は、サーバー側のログを確認してください。サーバーが UDP ポートを閉じている可能性があります。

于 2009-11-11T05:17:47.753 に答える
1

ネットワークにスニファを配置すると、IP アドレスをターゲットとする宛先ポート 4568 の UDP パケットが表示されるはずです。

適切なスニファを使用すると、rtsp ダイアログを表示できます。多分あなたは答えに何かが欠けている

また、要求したポートが受け入れられたかどうかを確認するために、SETUP 応答の内容を確認する必要があります。

確認事項:

  • UDP でリッスンします。
  • ファイアウォール ルール。
  • プレイ リクエストの範囲 : サーバーが何かをプレイしていることを確認するために、何も指定しないでください。

ルーターまたはファイアウォールの背後にいる場合、ルーター/ファイアウォールは着信 UDP パケットの処理方法を認識していないため、おそらく何も受信しません。

于 2009-10-08T13:12:48.670 に答える