web-dev-qa-db-ja.com

rtspストリームのキャプチャ

私は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のマクサーバグ

mplayer

LIVE_555 libでmplayerを使用してみました。

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

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

Stream not seekable!
Core dumped ;)

質問

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

多分その仕事を助けることができるいくつかの他のツールがありますか?実際、あらゆる種類のライブラリや言語に対するアドバイスに感謝します。しかし、そのプロセスは自動化され、常識を備えている必要があります。

絞り込み

Rtsp-broadcasterをエミュレートするvlc-streamerを使用してlocalhostで行った実験の約50%。ここに manual があります。

私は that 有用なスレッドによってインストールした、x264をサポートする本当に新鮮で最新のffmpegを持っています。

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

9
Muhammad Razib

ドミトリー、あなたは試してみてください ErlyVideo server 。 RTSPトラフィックをキャプチャして、メディアプレーヤーで再生できるマルチメディアファイルに格納できます。

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

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

ソリューション1=use_wallclock_as_timestampsオプションを使用すると、コマンドは次のようになります

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

PROS =低CPU使用率+何もトランスコードされていないため高品質の録音/ CONS =わずかに大きなファイル(〜6Mb /分)

Solution2=コマンドの「-acodec copy -vcodec copy」オプションを削除します。簡単なコマンド

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

トリックを行います。 PROS =小さなファイル(〜1.2Mb /分)/ CONS =高いCPU使用率(私のコンピューターでは6%)、これはデフォルトのコーデックにトランスコーディングしていると考えられます+品質の悪い録音

それが役に立てば幸い!

4
max

[〜#〜] openrtsp [〜#〜]を使用して、YouTubeビデオからローカルデバイスにストリームをダンプします

例として、すべてのYouTubeビデオで利用可能なrtspフィードを使用します。

手順:

  1. Oauth 2.0 Playgroundを使用してYouTube APIと直接対話する-フィードを取得する
  2. Youtube動画のIDを取得し、gdataフィードリクエストで使用します(v = cpST8yz4w1w)
  3. 必要なrtsp urlの出力を解析します-フォーマット1は低帯域幅、フォーマット6 =高
  4. CLI-openrtspを使用してリクエストする
  5. ダウンロード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

平文フィールドspec =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」

標準出力の詳細には、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
2
Robert Rowntree

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

あなたの解決策については、チェックアウトしてください: http://www.videohelp.com/tools/StreamTransport (フリーウェア)

1
Alvin K.

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

0