簡體   English   中英

使用gstreamer將同步的視頻和音頻錄制到容器文件中

[英]Record synchronized video and audio into container file with 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' ! ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM