2012-10-22 117 views
3

我正在使用TI DM365 EVM錄製視頻和音頻。我需要對這兩個流進行編碼並將它們保存在.avi或.mp4之類的容器文件中。我正在使用以下gstreamer管道:使用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!文件接收地點= 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. 

有其他人看到這種行爲?任何想法或解決方案?

回答

0

我想問題是您的設備無法以您請求的速度傳送幀。 一個可能的解決方案是「重採樣」你的視頻流,通過一個videorate元件中運行它:

v4l2src ! 'video/x-raw-yuv,format=(fourcc)NV12,width=1280,height=720' ! videorate force-fps=30 ! ... 

UPDATE:或者像這可能是工作,以及:

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

我做了視頻速率的gst檢查,它沒有force-fps參數。我嘗試使用沒有參數的videorate,但它沒有幫助。但是,我可以將沒有音頻的視頻流錄製到avi容器中。有沒有其他參數可以調整? – user1766616

+0

hmm,我的'videorate'(gst-plugins-base-0.10.36)確實有firce-fps字段。 –