Video 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

我正在寻找一些通用的方法来转储rtsp流。我想弄清楚,一些rtsp流运行良好,服务器正在发送一些可观看的视频

openRTSP

首先,谷歌推荐我的工具

但该工具转储的输出视频文件实际上并不正确。视频解码器(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
在谷歌搜索了一杯之后,我发现它真的很旧了

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提要

步骤:

  • 使用OAuth2.0playway直接与youtube api交互-获取提要
  • 获取Youtube视频的ID,在gdata提要请求中使用它(v=cpST8yz4w1w)
  • 解析所需rtsp url的输出-格式1为低带宽,格式6=高
  • CLI-使用openrtsp请求
  • 下载openrtsp为每个曲目输出单独的文件
  • ofile1=“video-H263-2000-1”
  • ofile2=“audio-AMR-2”
  • 有关手动转储流过程的详细信息:

    OAuth2操场是一个很好的工具

  • 从列表底部选择“Youtube”,单击“授权”按钮
  • 单击“允许访问”
  • 单击“交换令牌的授权码”
  • 您将获得“请求URI”的文本框
  • 请求如下:

  • 纯文本字段spec=media:group/media:content[@yt:format=“1”]

    响应是json流。从oauth表单复制并粘贴到: 你会有这样的感觉:

    "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
    
    转储文件,输出为:

  • 创建输出文件:“video-H263-2000-1”
  • 已创建输出文件:“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
    
    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