Video rtsp流捕获
我正在寻找一些通用的方法来转储rtsp流。我想弄清楚,一些rtsp流运行良好,服务器正在发送一些可观看的视频 openRTSP 首先,谷歌推荐我的工具 但该工具转储的输出视频文件实际上并不正确。视频解码器(ffdec)返回许多错误,如“解码视频包失败”和“[h264]无帧!”,这对我不合适 ffmpeg 然后我尝试使用ffmpeg工具转储rtsp流Video rtsp流捕获,video,ffmpeg,video-streaming,rtsp,mplayer,Video,Ffmpeg,Video Streaming,Rtsp,Mplayer,我正在寻找一些通用的方法来转储rtsp流。我想弄清楚,一些rtsp流运行良好,服务器正在发送一些可观看的视频 openRTSP 首先,谷歌推荐我的工具 但该工具转储的输出视频文件实际上并不正确。视频解码器(ffdec)返回许多错误,如“解码视频包失败”和“[h264]无帧!”,这对我不合适 ffmpeg 然后我尝试使用ffmpeg工具转储rtsp流 ffmpeg -loglevel debug -i "${stream_link}" -s 640x480 -vcodec copy -acodec
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
在谷歌搜索了一杯之后,我发现它真的很旧了
mplayer
比我尝试使用mplayer和LIVE_555 lib的效果更好
mplayer -noframedrop -dumpfile ${output_file} -dumpstream ${stream_link}
但我也有一些错误
Stream not seekable!
Core dumped ;)
问题
我想我做错了什么。这听起来真的很可笑,没有办法将rtsp流保存在正确且可播放的视频文件中
也许还有其他一些工具可以帮助完成这项任务?事实上,如果您能为各种LIB和语言提供任何建议,我将不胜感激。但该过程应该是自动的,并且具有cli
改进
我在本地主机上用模拟rtsp广播的vlc拖缆做了大约50%的实验。这是我试图遵循的一个原则
我有最新的ffmpeg和x264支持,我是通过有用的线程安装的。您是否尝试保存rtsp流?这对我很有效。不过我试过使用图形界面。但它也应该在命令行中工作。首先想到的是VLC。我通常会访问这个旧站点,在左侧的“如何”面板下,单击“所有指南””,在“文本搜索”中键入搜索参数
对于您的解决方案,请查看:(免费软件)使用libpcap创建类似tcpdump/Wireshark的工具怎么样?通过删除应用层下面的层(即TCP/UDP/IP/…)生成的头,您将可以访问RTSP流。然后可以将流转储到光盘上的文件中。我必须承认,我对RTP/RTSP不太熟悉,所以也许您也必须删除这些头文件,然后将有效负载写入文件(以便媒体播放器播放它)。Dmitry,您应该尝试一下。 它可以捕获RTSP流量并将其存储在多媒体文件中,这些文件可以通过MediaPlayer播放。使用OPENRTSP将来自任何Youtube视频的流转储到本地设备 例如,我将使用任何youtube视频可用的rtsp提要 步骤:
"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
}
]
从中获取rtspurl属性并调用openrtsp进行文件转储。您必须等待,因为openrtsp将流式传输媒体(而不是下载)。如果您要求转储10分钟.mp4,您将不得不等待10分钟
注意:rtsp URI后面的SDP为每个曲目维护单独的源。因此,在转储的同时,您可以为原始媒体文件中的每个曲目获得单独的文件
$ ./openRTSP rtsp://v8.cache8.c.youtube.com/CiILENy73wIaGQlcw_gs85OUchMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp
转储文件,输出为:
$ ./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
ffmpeg+wallclock作为时间戳工作
ffmpeg是实现目标的最简单方法,但以下是一些重要注意事项:
首先,我建议您使用最新版本(2.4.x,而不是Ubuntu附带的1.2.x)。你可以从
你仍然会得到
Application provided invalid, non monotonically increasing dts to muxer in stream 0: 730672 >= 730672
av_interleaved_write_frame(): Invalid argument error
错误,但你可以摆脱它。这主要是因为FPS(每秒帧数)在IP摄像头上不断变化,这取决于连接的质量。以下是两个对我有效的解决方案:
解决方案1=使用使用wallclock作为时间戳选项,使您的命令看起来像
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%),因为我认为它正在转换为默认的编解码器+劣质录音
希望有帮助 原始RTSP内容不适合保存和重播:至少有2+个流需要保存到普通文件中。解包并保存为众所周知的容器格式,如
.MP4
,似乎是解决问题的办法。附笔。
ffmpeg -i rtsp://myip:554/mpeg4 myrecord.avi