如何从rtspsrc中解复用音频和视频,然后使用Matroska Mux将其保存到文件中? [英] How to demux audio and video from rtspsrc and then save to file using matroska mux?

查看:707
本文介绍了如何从rtspsrc中解复用音频和视频,然后使用Matroska Mux将其保存到文件中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在使用rtspsrc来收集音频和视频从一个网络摄像机到另一个网络摄像机的应用程序.但是,我无法观看来自摄像机的视频流,因此无法验证该视频流是否按预期工作.为了验证流是否正确,我想将其记录在SD卡上,然后在计算机上播放文件.问题是我希望相机尽可能多地进行解析,解码和去荷,因为那是应用程序的目的.

因此,我必须通过解复用器分离音频和视频流,并进行解析,解码等,然后将它们复用回matroska文件.

由于该摄像机尚未完成视频解码器操作,因此已被省略.

Demux到实时播放接收器(有效)

gst-launch-0.10 -v rtspsrc location="rtsp://host:pass@192.168.0.91/XXX/XXXX?resolution=1280x720&audio=1&audiocodec=g711&audiosamplerate=8000&audiobitrate=64000" latency=0 name=d d. ! rtppcmudepay ! mulawdec ! audioresample ! audioconvert ! autoaudiosink d. ! rtph264depay ! ffdec_h264 ! queue ! ffmpegcolorspace ! autovideosink

多个rtspsrc到matroska(有效)

gst-launch-1.0 -v rtspsrc location="rtsp://host:pass@192.168.0.91/XXX/XXXX?audio=1&audiocodec=g711&audiosamplerate=8000&audiobitrate=64000" latency=0 ! rtppcmudepay ! mulawdec ! audioresample ! audioconvert ! queue ! matroskamux name=mux ! filesink location=/var/spool/storage/SD_DISK/testmovie.mkv rtspsrc location="rtsp://root:pass@192.168.0.91/axis-media/media.amp?resolution=1280x720" latency=0 ! rtph264depay ! h264parse ! mux.

单个rtspsrc到matroska(失败)

gst-launch-1.0 -v rtspsrc location="rtsp://host:pass@192.168.0.91/XXX/XXXX?resolution=1280x720&audio=1&audiocodec=g711&audiosamplerate=8000&audiobitrate=64000" latency=0 name=d d. ! queue ! rtppcmudepay ! mulawdec ! audioresample ! audioconvert ! queue ! matroskamux name=mux d. ! queue ! rtph264depay  ! h264parse ! queue ! mux. ! filesink location=/var/spool/storage/SD_DISK/testmoviesinglertsp.mkv

最后一个示例失败,并显示错误消息

WARNING: erroneous pipeline: link without source element

我是否误解了matroska mux的用法,为什么上面的两个示例有效,但最后一个示例却无效?

解决方案

问题在这里:

queue ! mux. ! filesink

您需要做

queue ! mux. mux. ! filesink

多路复用器.表示gst-launch应该从多路复用器中自动选择一个打击垫.并将其链接.您也可以手动指定一个名称,例如mux.src.因此,从语法上讲,您丢失了另一个要链接到另一个元素的元素/填充板.

I have been working on an application where I use rtspsrc to gather audio and video from one network camera to another. However I can not watch the stream from the camera and thereby cant verify that the stream works as intended. To verify that the stream is correct I want to record it on a SD card and then play the file on a computer. The problem is that I want the camera to do as much of the parsing, decoding, depayloading as possible since that is the purpose of the application.

I thereby have to separate the audio and video streams by a demuxer and do the parsing, decoding etc and thereafter mux them back into a matroska file.

The video decoder has been omitted since it is not done yet for this camera.

Demux to live playback sink(works)

gst-launch-0.10 -v rtspsrc location="rtsp://host:pass@192.168.0.91/XXX/XXXX?resolution=1280x720&audio=1&audiocodec=g711&audiosamplerate=8000&audiobitrate=64000" latency=0 name=d d. ! rtppcmudepay ! mulawdec ! audioresample ! audioconvert ! autoaudiosink d. ! rtph264depay ! ffdec_h264 ! queue ! ffmpegcolorspace ! autovideosink

Multiple rtspsrc to matroska(works)

gst-launch-1.0 -v rtspsrc location="rtsp://host:pass@192.168.0.91/XXX/XXXX?audio=1&audiocodec=g711&audiosamplerate=8000&audiobitrate=64000" latency=0 ! rtppcmudepay ! mulawdec ! audioresample ! audioconvert ! queue ! matroskamux name=mux ! filesink location=/var/spool/storage/SD_DISK/testmovie.mkv rtspsrc location="rtsp://root:pass@192.168.0.91/axis-media/media.amp?resolution=1280x720" latency=0 ! rtph264depay ! h264parse ! mux.

Single rtspsrc to matroska(fails)

gst-launch-1.0 -v rtspsrc location="rtsp://host:pass@192.168.0.91/XXX/XXXX?resolution=1280x720&audio=1&audiocodec=g711&audiosamplerate=8000&audiobitrate=64000" latency=0 name=d d. ! queue ! rtppcmudepay ! mulawdec ! audioresample ! audioconvert ! queue ! matroskamux name=mux d. ! queue ! rtph264depay  ! h264parse ! queue ! mux. ! filesink location=/var/spool/storage/SD_DISK/testmoviesinglertsp.mkv

The last example fails with the error message

WARNING: erroneous pipeline: link without source element

Have i missunderstood the usage of matroska mux and why does the 2 above examples work but not the last?

解决方案

The problem is here:

queue ! mux. ! filesink

You need to do

queue ! mux. mux. ! filesink

mux. means that gst-launch should select a pad automatically from mux. and link it. You could also specify manually a name, like mux.src. So syntactically you are missing another element/pad there to link to the other element.

这篇关于如何从rtspsrc中解复用音频和视频,然后使用Matroska Mux将其保存到文件中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆