Audio 使用gstreamer将同步的视频和音频录制到容器文件中

Audio 使用gstreamer将同步的视频和音频录制到容器文件中,audio,video,gstreamer,Audio,Video,Gstreamer,我使用TI DM365 EVM录制视频和音频。我需要对这两个流进行编码,并将它们保存在一个容器文件中,如.avi或.mp4。我正在使用以下gstreamer管道: gst启动v4l2src始终复制=FALSE num buffers=-1 do timestamp=TRUE!'视频/x-raw-yuv,格式=(fourcc)NV12,宽度=1280,高度=720,帧速率=30/1'!队列TIVidenc1 codecName=h264enc engineName=codecServer ByTe

我使用TI DM365 EVM录制视频和音频。我需要对这两个流进行编码,并将它们保存在一个容器文件中,如.avi或.mp4。我正在使用以下gstreamer管道:

gst启动v4l2src始终复制=FALSE num buffers=-1 do timestamp=TRUE!'视频/x-raw-yuv,格式=(fourcc)NV12,宽度=1280,高度=720,帧速率=30/1'!队列TIVidenc1 codecName=h264enc engineName=codecServer ByTestStream=false genTimeStamps=true!队列多路复用器。alsasrc num buffers=-1 typefind=TRUE do timestamp=TRUE!音频/x-raw-int,宽度=16!队列TIAudenc1 codecName=aaclcenc engineName=codecServer genTimeStamps=true name=aenc!队列多路复用器。avimux name=mux!filesink location=vidaudtest.avi sync=true

结果是,我得到了一个.avi文件,但当我使用图腾电影播放器在PC上播放该文件时,视频播放速度过快,而音频以正常速度播放。例如,在一个5分钟的文件中,视频在40秒内播放完毕

此外,在录制过程中,我收到了以下几条信息:

WARNING: from element /GstPipeline:pipeline0/GstAlsaSrc:alsasrc0: Can't record audio fast enough
Additional debug info:
gstbaseaudiosrc.c(822): gst_base_audio_src_create (): /GstPipeline:pipeline0/GstAlsaSrc:alsasrc0:
Dropped 33516 samples. This is most likely because downstream can't keep up and is consuming samples too slowly.

还有人见过这种行为吗?有什么想法或解决方案吗?

我想问题在于您的设备无法按您要求的速率传送帧。 一种可能的解决方案是通过
videorate
元素对视频流进行“重新采样”:

v4l2src ! 'video/x-raw-yuv,format=(fourcc)NV12,width=1280,height=720' ! videorate force-fps=30  ! ...
更新:或者类似的方法也可以:

... ! 'video/x-raw-yuv,format=(fourcc)NV12,width=1280,height=720' ! videorate ! 'video/x-raw-yuv,framerate=(fraction)30/1' ! ...

我对videorate做了gst检查,它没有force fps参数。我尝试只使用videorate而不使用参数,但没有任何帮助。不过,我可以将没有音频的视频流录制到avi容器中。还有其他参数我可以调整吗?嗯,我的
视频速率
(gst-plugins-base-0.10.36)有firce fps字段。