rtsp流捕获

时间:2011-10-28 16:59:24

标签: video ffmpeg video-streaming rtsp mplayer

我正在寻找一些转储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有用的线程安装了。

6 个答案:

答案 0 :(得分:9)

您是否尝试vlc保存rtsp流?它对我有用。我试过图形界面。但它也应该从命令行工作。

答案 1 :(得分:4)

ffmpeg + wallclock_as_timestamps有效

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。

步骤:

  1. 使用Oauth 2.0游乐场直接与youtube api -gets the feeds进行交互
  2. 获取Youtube视频的ID,在gdata Feed请求中使用它(v = cpST8yz4w1w)
  3. 解析所需rtsp网址的输出 - 格式1为低带宽,格式为6 =高
  4. CLI - 使用openrtsp请求
  5. 下载openrtsp输出每个曲目的单独文件
  6. ofile1 =“video-H263-2000-1”
  7. ofile2 = “音频AMR-2”
  8. 有关转储流的手动流程的详细信息:

    Oauth 2游乐场是很好的工具 https://code.google.com/oauthplayground/

    1. 从列表底部选择“Youtube”,单击“授权”按钮
    2. 点击“允许访问”
    3. 点击“令牌交换授权码”
    4. 您将收到“请求URI”
    5. 的文本框
    6. 请求以下内容:

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

    7. 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
      

      转储文件,输出将是:

      1. 创建输出文件:“video-H263-2000-1”
      2. 创建输出文件:“audio-AMR-2”
      3. 标准输出详细信息包括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并不熟悉,所以也许你必须删除这些标题,然后将有效负载写入文件(让媒体播放器播放它)。