使用GStreamer将RTSP保存到文件中,无需重新编码

时间:2016-08-08 09:08:19

标签: linux gstreamer rtsp

我想向rtsp询问一些如何GStreamer从监控IP摄像机保存到文件中的提示。我发现了这个:

gst-launch -e rtspsrc location="rtsp://(my-camera-stream-address)" ! decodebin ! x264enc ! mp4mux ! filesink location=file.mp4

效果很好,但它的CPU消耗非常高。我确信它会解码我的原始流并将其编码为另一个流。

请你告诉我,如何在不重新编码的情况下做到这一点 - 如何捕捉直播并将其保存到容器中?

1 个答案:

答案 0 :(得分:1)

首先检查一下流的类型..

APPROACH 1

使用identity debugging元素检查缓冲区:

gst-launch-1.0 rtspsrc location=rtsp://mpv.cdn3.bigCDN.com:554/bigCDN/definst/mp4:bigbuckbunnyiphone_400.mp4 name=r ! application/x-rtp,media=video ! identity silent=false ! fakesink -v

并检查缓冲区的信息:

  

/GstPipeline:pipeline0/GstRTSPSrc:r.GstGhostPad:recv_rtp_src_0_2072847348_96.GstProxyPad:proxypad9:caps =“application / x-rtp \,\ media \ =(string)audio \,\ payload \ =(int)96 \, \ clock-rate \ =(int)48000 \,\ encoding-name \ =(string)MPEG4-GENERIC \,\ encoding-params \ =(string)2 \,\ profile-level-id \ =(string)1 \,\ mode \ =(string)AAC-hbr \,\ sizelength \ =(string)13 \,\ indexlength \ =(string)3 \,\ indexdeltalength \ =(string)3 \,\ config \ =(string )119008c4000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \,\ a-sdplang \ =(字符串)en \,\ ssrc \ =(uint)2072847348 \,\ clock-base \ =(uint)0 \,\ seqnum-base \ =(uint)1 \, \ npt-start \ =(guint64)0 \,\ npt-stop \ =(guint64)596458000000 \,\ play-speed \ =(double)1 \,\ play-scale \ =(double)1

注意编码名称..这指向aac,默认情况下在mp4中使用。 这同样适用于视频 - 再次搜索application / x-rtp类型的缓冲区,media = video ..对我来说再次mp4 generic - h264。

APPROACH 2

更简单就是使用uridecodebin并转储点文件并查看它如何构建管道并复制相应的元素:

GST_DEBUG_DUMP_DOT_DIR=`pwd` gst-launch-1.0 uridecodebin uri=rtsp://mpv.cdn3.bigCDN.com:554/bigCDN/definst/mp4:bigbuckbunnyiphone_400.mp4 ! fakesink

这将生成扩展名为.dot的文件 - 获取PAUSE_PLAYING并使用dot -T png 0.0blabla.dot -o blabla.png创建一张图片。检查rtpsometginfdepay之后的元素。

使用所有信息,您可以构建类似的管道:

gst-launch-1.0 -e mp4mux name=m ! filesink location=bla.mp4  rtspsrc location=rtsp://mpv.cdn3.bigCDN.com:554/bigCDN/definst/mp4:bigbuckbunnyiphone_400.mp4 name=r r. ! "application/x-rtp,media=video" ! rtph264depay ! h264parse ! m.  r. ! "application/x-rtp,media=audio" ! rtpmp4gdepay ! aacparse ! m.

请记住,您可以在gst-launch开始时创建元素,但稍后再使用它们(就像我使用mp4mux一样)..

HTH