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

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

gst-launch v4l2src always-copy = FALSE num-buffers = -1 do-timestamp = TRUE! 'video / x-raw-yuv,format =(fourcc)NV12,width = 1280,height = 720,framerate = 30/1'! 队列! TIVidenc1 codecName = h264enc engineName = codecServer byteStream = false genTimeStamps = true! 队列! MUX。 alsasrc num-buffers = -1 typefind = TRUE do-timestamp = TRUE! audio / x-raw-int,width = 16! 队列! TIAudenc1 codecName = aaclcenc engineName = codecServer genTimeStamps = true name = aenc! 队列! MUX。 avimux name = mux! filesink location = vidaudtest.avi sync = true

结果是我得到一个.avi文件,但是当我使用Totem Movie Player在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' ! ...
链接地址: http://www.djcxy.com/p/7637.html

上一篇: Record synchronized video and audio into container file with gstreamer

下一篇: How to rotate image clockwise?