我正在寻找一些转储rtsp流的通用方法。我想弄清楚,有些rtsp流运行良好,服务器正在发送一些可观看的视频。
openRTSP
首先,谷歌推荐我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's muxer bug。
mplayer的
比我尝试使用mplayer和LIVE_555 lib。
mplayer -noframedrop -dumpfile ${output_file} -dumpstream ${stream_link}
但我也有一些错误。
Stream not seekable!
Core dumped ;)
问题
我想我做错了什么。这听起来很荒谬,没有办法将rtsp流保存在正确可播放的视频文件中。
也许有一些其他工具可以帮助完成这项任务?实际上,我将感谢任何类型的lib和语言的建议。但是这个过程应该是自动的并且有cli。
加细
我在本地主机上用vlc-streamer模拟rtsp-broadcaster进行了大约50%的实验。这是我试图遵循的manual。
我有新的和最新的ffmpeg支持x264,我已经通过that有用的线程安装了。
答案 0 :(得分:9)
您是否尝试vlc保存rtsp流?它对我有用。我试过图形界面。但它也应该从命令行工作。
答案 1 :(得分:4)
ffmpeg是实现目标的最简单方法,但这里有一些重要的注意事项:
首先,我建议您获取最新版本(2.4.x而不是Ubuntu附带的1.2.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(每秒帧数)在IP摄像机上不断变化。以下是两个对我有用的解决方案:
解决方案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%),因为我认为它是转码为默认编解码器+质量不佳的录音
希望它有所帮助!
答案 2 :(得分:3)
德米特里,你应该试试ErlyVideo server。 它可以捕获RTSP流量并将其存储在可以与媒体播放器一起播放的多媒体文件中。
答案 3 :(得分:2)
使用 OPENRTSP
将任何Youtube视频中的流转储到本地设备例如,我将使用适用于任何YouTube视频的rtsp Feed。
步骤:
有关转储流的手动流程的详细信息:
Oauth 2游乐场是很好的工具 https://code.google.com/oauthplayground/
请求以下内容:
plaintext fields 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
转储文件,输出将是:
标准输出详细信息包括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
答案 4 :(得分:1)
VLC是第一个浮现在脑海中的人。我通常会转到旧网站www.vcdhelp.com并在左侧的“操作方法”面板下,点击“所有指南”,然后输入您的搜索参数“文字搜索”。
对于您的解决方案,请查看:http://www.videohelp.com/tools/StreamTransport(免费软件)
答案 5 :(得分:0)
如何使用libpcap创建类似tcpdump / Wireshark的工具?通过删除由应用程序层下面的层生成的标头(即TCP / UDP / IP / ...),您将可以访问RTSP流。然后可以将流转储到光盘上的文件中。我不得不承认我对RTP / RTSP并不熟悉,所以也许你必须删除这些标题,然后将有效负载写入文件(让媒体播放器播放它)。