24

rtsp ストリームをダンプする普遍的な方法を探しています。一部の rtsp ストリームが正常に機能しており、サーバーが視聴可能なビデオを送信していることを確認したいと思います。

openRTSP

最初に、Google は私にopenRTSPツールを勧めました。

 openRTSP -4 ${stream_link} > ${output_file}

しかし、そのツールによってダンプされた出力ビデオ ファイルは実際には正しくありません。ビデオ デコーダ (ffdec) は、「ビデオ パケットのデコードに失敗しました」や「[h264] フレームがありません!」などの多くのエラーを返しますが、これは私には合いません。

ffmpeg

次に、ffmpeg ツールを使用して rtsp ストリームをダンプしようとしました。

ffmpeg -loglevel debug -i "${stream_link}" -s 640x480 -vcodec copy -acodec copy -y ${output_file}

しかし、ストリーミング プロセスはエラーによって頻繁に中断されました。

Application provided invalid, non monotonically increasing dts to muxer in stream 0: 730672 >= 730672
av_interleaved_write_frame(): Invalid argument

使用しようとしています--fflags igndtsが、ffmpeg はこれらのエラーを無視しません。このエラーは、実際にはオーディオ ストリームとビデオ ストリームが非同期で送信されていることを意味するため、意味がありません。最悪の事態は、中断されたダンプによって生成されたダンプされたファイルも正しくないことです。Ffdec はいくつかのエラーを返します:

ERROR [mov,mp4,m4a,3gp,3g2,mj2] moov atom not found
ERROR [ffdec] av_open_input_file: Operation not permitted

私が見つけた素敵なグーグルのカップの後、それは本当に古いffmpeg の muxer bugです。

mplayer

LIVE_555 lib で mplayer を使用しようとしたよりも。

mplayer -noframedrop -dumpfile ${output_file} -dumpstream ${stream_link}

しかし、私にもいくつかのエラーがあります。

Stream not seekable!
Core dumped ;)

質問

私は何か間違ったことをしていると思います。rtspストリームを正しく再生可能なビデオファイルに保存する方法がないというのは、本当にばかげているように聞こえます。

そのタスクに役立つツールが他にもあるのではないでしょうか? 実際、あらゆる種類のライブラリや言語に関するアドバイスをいただければ幸いです。しかし、そのプロセスは自動化され、cli が必要です。

改良

rtsp-broadcaster をエミュレートする vlc-streamer を使用してローカルホストで行った約 50% の実験。ここに私が従おうとするマニュアルがあります。

その便利なスレッドでインストールした、x264をサポートする本当に新鮮で最新のffmpegがあります。

4

6 に答える 6

10

rtsp ストリームを保存するためにvlcを試しましたか? それは私のために働いた.私はグラフィカルインターフェイスで試しました. ただし、コマンドラインからも機能するはずです。

于 2011-10-31T12:22:00.250 に答える
6

ffmpeg + wallclock_as_timestamps は機能します

ffmpeg は、目標を達成するための最も簡単な方法ですが、いくつかの重要な注意事項があります。

まず、最新バージョン (Ubuntu に同梱されている 1.2.x ではなく 2.4.x) を入手することをお勧めします。https://www.ffmpeg.org/download.htmlから入手できます

あなたはまだ得るでしょう

Application provided invalid, non monotonically increasing dts to muxer in stream 0: 730672 >= 730672
av_interleaved_write_frame(): Invalid argument error

エラーですが、それを取り除くことができます。これは主に、接続の品質に応じて IP カメラの FPS (1 秒あたりのフレーム数) が一貫して変化するためです。これが私のために働いた2つの解決策です:

解決策 1 = use_wallclock_as_timestampsオプションを使用して、コマンドが次のようになるようにします

ffmpeg -use_wallclock_as_timestamps 1 -i rtsp://myip:554/mpeg4 -c copy myrecord.avi

長所 = 低い CPU 使用率 + 何もトランスコードされていないため高品質の録音 / 短所 = 少し大きなファイル (~6Mb/分)

解決策2 = コマンドの「-acodec copy -vcodec copy」オプションを削除します。シンプルなコマンド

ffmpeg -i rtsp://myip:554/mpeg4 myrecord.avi

トリックを行います。長所 = 小さなファイル (~1.2Mb/分) / 短所 = CPU 使用率が高い (私のコンピューターでは 6%)。これは、デフォルトのコーデック + 低品質の録音にトランスコードしていると思われるためです。

それが役に立てば幸い!

于 2014-10-08T00:06:32.313 に答える
4

ドミトリー、ErlyVideo サーバーを試す必要があります。RTSP トラフィックをキャプチャし、メディアプレーヤーで再生できるマルチメディア ファイルに保存できます。

于 2011-11-14T05:01:55.147 に答える
3

OPENRTSPを使用して、任意の Youtube ビデオからローカル デバイスにストリームをダンプします。

例として、YouTube ビデオで利用できる rtsp フィードを使用します。

手順:

  1. Oauth 2.0 プレイグラウンドを使用して、YouTube API と直接やり取りする - フィードを取得する
  2. gdata フィード リクエスト (v=cpST8yz4w1w) で使用して、Youtube 動画の ID を取得します。
  3. 必要な rtsp URL の出力を解析します。形式 1 は低帯域幅、形式 6= HIGH です。
  4. CLI - openrtsp を使用してリクエストする
  5. download(s) openrtsp はトラックごとに個別のファイルを出力します
  6. ofile1="video-H263-2000-1"
  7. ofile2="audio-AMR-2"

ストリームをダンプするための手動プロセスの詳細:

Oauth 2 プレイグラウンドは優れたツールです https://code.google.com/oauthplayground/

  1. リストの一番下から「Youtube」を選択し、「承認」ボタンをクリックします
  2. 「アクセスを許可する」をクリック
  3. 「トークンの Exchange 認証コード」をクリックします。
  4. 「リクエストURI」のテキストボックスが表示されます
  5. 以下を要求します。

    https://gdata.youtube.com/feeds/api/videos/cpST8yz4w1w?fields=media%3Agroup%2Fmedia%3Acontent%5B%40yt%3Aformat%3D%221%22%5D&v=2&alt=json

平文フィールドの仕様= media:group/media:content[@yt:format="1"]

レスポンスはjsonストリームです。それを oauth フォームからコピーして http://json.parser.online.fr/に貼り付けると 、次のようになります。

"entry":{
"xmlns":"http://www.w3.org/2005/Atom",
"xmlns$media":"http://search.yahoo.com/mrss/",
"xmlns$yt":"http://gdata.youtube.com/schemas/2007",
"media$group":{
"media$content":[
{
"url":"rtsp://v8.cache8.c.youtube.com/CiILENy73wIaGQlcw_gs85OUchMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp",
"type":"video/3gpp",
"medium":"video",
"expression":"full",
"duration":64,
"yt$format":1
}
]

そこからRTSP url 属性を取得し、openrtsp を呼び出してファイル ダンプを実行します。openrtspはメディアをストリーミングする ( ダウンロード ではない) ため、待つ必要があります。10 分の .mp4 のダンプを要求すると、10 分待たなければなりません。

注: rtsp URI の背後にある SDP は、トラックごとに個別のソースを維持します。そのため、ダンプとともに、元のメディア ファイルのトラックごとに個別のファイルが取得されます。

$ ./openRTSP rtsp://v8.cache8.c.youtube.com/CiILENy73wIaGQlcw_gs85OUchMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp

ダンプファイル、出力は次のようになります。

  1. 作成された出力ファイル: "video-H263-2000-1"
  2. 作成された出力ファイル: "audio-AMR-2"

Stdout の詳細には、RTSP セッションの完全なプロトコルが含まれます。

$ ./openRTSP rtsp://v8.cache8.c.youtube.com/CiILENy73wIaGQlcw_gs85OUchMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp
Opening connection to 74.125.213.247, port 554...
...remote connection opened
Sending request: OPTIONS rtsp://v8.cache8.c.youtube.com/CiILENy73wIaGQlcw_gs85OUchMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp RTSP/1.0
CSeq: 2
User-Agent: ./openRTSP (LIVE555 Streaming Media v2011.07.08)


Received 140 new bytes of response data.
Received a complete OPTIONS response:
RTSP/1.0 200 OK
Public: DESCRIBE, GET_PARAMETER, OPTIONS, PAUSE, PLAY, SETUP, SET_PARAMETER, TEARDOWN
CSeq: 2
Server: Google RTSP 1.0


Sending request: DESCRIBE rtsp://v8.cache8.c.youtube.com/CiILENy73wIaGQlcw_gs85OUchMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp RTSP/1.0
CSeq: 3
User-Agent: ./openRTSP (LIVE555 Streaming Media v2011.07.08)
Accept: application/sdp


Received 776 new bytes of response data.
Received a complete DESCRIBE response:
RTSP/1.0 200 OK
Content-Type: application/sdp
Cache-Control: must-revalidate
Date: Fri, 30 Mar 2012 15:27:43 GMT
Expires: Fri, 30 Mar 2012 15:27:43 GMT
Last-Modified: Fri, 30 Mar 2012 15:27:43 GMT
Content-Base: rtsp://v8.cache8.c.youtube.com/CiILENy73wIaGQlcw_gs85OUchMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp/
CSeq: 3
Server: Google RTSP 1.0
Content-Length: 404

v=0
o=GoogleStreamer 943086435 202448811 IN IP4 74.125.213.247
s=Video
c=IN IP4 0.0.0.0
b=AS:51
t=0 0
a=control:*
a=range:npt=0-63.800000
m=video 0 RTP/AVP 98
b=AS:39
a=rtpmap:98 H263-2000/90000
a=control:trackID=0
a=cliprect:0,0,144,176
a=framesize:98 176-144
a=fmtp:98 profile=0;level=10
m=audio 0 RTP/AVP 99
b=AS:12
a=rtpmap:99 AMR/8000/1
a=control:trackID=1
a=fmtp:99 octet-align

Opened URL "rtsp://v8.cache8.c.youtube.com/CiILENy73wIaGQlcw_gs85OUchMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp", returning a SDP description:
v=0
o=GoogleStreamer 943086435 202448811 IN IP4 74.125.213.247
s=Video
c=IN IP4 0.0.0.0
b=AS:51
t=0 0
a=control:*
a=range:npt=0-63.800000
m=video 0 RTP/AVP 98
b=AS:39
a=rtpmap:98 H263-2000/90000
a=control:trackID=0
a=cliprect:0,0,144,176
a=framesize:98 176-144
a=fmtp:98 profile=0;level=10
m=audio 0 RTP/AVP 99
b=AS:12
a=rtpmap:99 AMR/8000/1
a=control:trackID=1
a=fmtp:99 octet-align

Created receiver for "video/H263-2000" subsession (client ports 52320-52321)
Created receiver for "audio/AMR" subsession (client ports 52322-52323)
Sending request: SETUP rtsp://v8.cache8.c.youtube.com/CiILENy73wIaGQlcw_gs85OUchMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp/trackID=0 RTSP/1.0
CSeq: 4
User-Agent: ./openRTSP (LIVE555 Streaming Media v2011.07.08)
Transport: RTP/AVP;unicast;client_port=52320-52321


Received 360 new bytes of response data.
Received a complete SETUP response:
RTSP/1.0 200 OK
Session: 4d04d0e9;timeout=90
Transport: RTP/AVP;unicast;mode=play;client_port=52320-52321;server_port=10580-10581;source=74.125.213.247;ssrc=7B551CAA
Cache-Control: must-revalidate
Date: Fri, 30 Mar 2012 15:27:43 GMT
Expires: Fri, 30 Mar 2012 15:27:43 GMT
Last-Modified: Fri, 30 Mar 2012 15:27:43 GMT
CSeq: 4
Server: Google RTSP 1.0


setup response srvAddr port rtpchnl   74.125.213.247 10580 255
Setup "video/H263-2000" subsession (client ports 52320-52321)
Sending request: SETUP rtsp://v8.cache8.c.youtube.com/CiILENy73wIaGQlcw_gs85OUchMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp/trackID=1 RTSP/1.0
CSeq: 5
User-Agent: ./openRTSP (LIVE555 Streaming Media v2011.07.08)
Transport: RTP/AVP;unicast;client_port=52322-52323
Session: 4d04d0e9


Received 360 new bytes of response data.
Received a complete SETUP response:
RTSP/1.0 200 OK
Session: 4d04d0e9;timeout=90
Transport: RTP/AVP;unicast;mode=play;client_port=52322-52323;server_port=10580-10581;source=74.125.213.247;ssrc=10CD5DCE
Cache-Control: must-revalidate
Date: Fri, 30 Mar 2012 15:27:43 GMT
Expires: Fri, 30 Mar 2012 15:27:43 GMT
Last-Modified: Fri, 30 Mar 2012 15:27:43 GMT
CSeq: 5
Server: Google RTSP 1.0


setup response srvAddr port rtpchnl   74.125.213.247 10580 255
Setup "audio/AMR" subsession (client ports 52322-52323)
Created output file: "video-H263-2000-1"
Created output file: "audio-AMR-2"
Sending request: PLAY rtsp://v8.cache8.c.youtube.com/CiILENy73wIaGQlcw_gs85OUchMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp/ RTSP/1.0
CSeq: 6
User-Agent: ./openRTSP (LIVE555 Streaming Media v2011.07.08)
Session: 4d04d0e9
Range: npt=0.000-63.800


Received 394 new bytes of response data.
Received a complete PLAY response:
RTSP/1.0 200 OK
Session: 4d04d0e9;timeout=90
Range: npt=0.000-63.800
RTP-Info: url=rtsp://v8.cache8.c.youtube.com/CiILENy73wIaGQlcw_gs85OUchMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp/trackID=0;seq=48690;rtptime=668323490,url=rtsp://v
8.cache8.c.youtube.com/CiILENy73wIaGQlcw_gs85OUchMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp/trackID=1;seq=61565;rtptime=99689199
CSeq: 6
Server: Google RTSP 1.0


Started playing session
Receiving streamed data (for up to 68.800000 seconds)...
Sending request: TEARDOWN rtsp://v8.cache8.c.youtube.com/CiILENy73wIaGQlcw_gs85OUchMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp/ RTSP/1.0
CSeq: 7
User-Agent: ./openRTSP (LIVE555 Streaming Media v2011.07.08)
Session: 4d04d0e9


Received 72 new bytes of response data.
Received a complete TEARDOWN response:
RTSP/1.0 200 OK
CSeq: 7
Session: 4d04d0e9
Server: Google RTSP 1.0
于 2012-03-30T15:52:20.530 に答える
1

VLCが最初に思い浮かびます。私は通常、この古いサイトwww.vcdhelp.comにアクセスし、左側の [ハウツー] パネルで [すべてのガイド] をクリックし、[テキスト検索]に検索パラメーターを入力します。

ソリューションについては、http: //www.videohelp.com/tools/StreamTransport (フリーウェア)をご覧ください。

于 2011-11-04T17:03:28.803 に答える
0

libpcap を使用して tcpdump/Wireshark のようなツールを作成するのはどうですか? アプリケーション層の下の層 (つまり、TCP/UDP/IP/...) によって生成されたヘッダーを削除することで、RTSP ストリームにアクセスできるようになります。その後、ストリームをディスク上のファイルにダンプできます。私は RTP/RTSP にあまり詳しくないことを認めなければならないので、これらのヘッダーも削除して、ペイロードをファイルに書き込む必要があるかもしれません (メディア プレーヤーが再生できるようにするため)。

于 2011-11-06T15:18:27.240 に答える