2011-11-16 126 views
0

我正在嘗試修改代碼以便在ffmpeg和directshow的幫助下添加聲音捕獲功能(在實時流上)。無法找到音頻流

當我試着玩ffplay AVIsynth文件,一切工作完美我有音頻和視頻。但是當我通過代碼打開這個輸入文件時,我只能找到視頻流。

的AVS文件:

V = DirectShowSource("Decklink_HDMI.grf", fps=10, framecount=1000000000, seek=false, audio=false) 
A = DirectShowSource("Decklink_Audio.grf", fps=1, framecount=1000000000, video=false) 
AudioDub(V, A) 

開幕代碼:

ffmpeg::AVInputFormat * ifmt; 

ifmt = ffmpeg::av_find_input_format("avs"); 

// Open input file 
if(ffmpeg::avformat_open_input(&pFormatCtx, filename.toStdString().c_str(), ifmt, NULL) != 0) 

當我剛剛開幕後作出的gdb變量望風。

我正在查看pFormatCtx-> nb_streams中的nb_streams,它位於1 我唯一可以在pFormatCtx-> stream中找到的流是一個視頻。這就是爲什麼我無法捕捉聲音。

所以我問我是否做錯了我的開幕或如果我錯過了什麼。

Ps:我知道顯示的代碼很短,但問題出現在這一步!

謝謝

庫爾特

- 編輯 -

我也注意到,當我轉儲AVFormatContext視頻流得到了一個456x32大小。 當我嘗試使用ffplay啓動損壞的腳本時,我可以找到顯示的窗口大小相同。

當我玩了正確的腳本ffplay原始視頻格式爲1920×1080

我想我的問題是,也許不是不能夠獲得音頻流的簡單事實更深。

我試圖找出如何知道會被顯示在456x32窗口

錯誤消息 - EDIT2 -

我瞭解這是什麼形象上寫,我的問題是,解決了,嚴重的AVS腳本是一個老的地方。

我很慚愧。

+0

如果pFormatCtx-> nb_streams == 1,那麼在該文件中只有一個流。 – 2011-11-16 18:19:57

+0

這是正確的,但當我在ffplay上播放此文件或與虛擬配音我可以檢查他們顯然是2流,我可以聽到聲音,所以avs文件包含毫無疑問2流 – Kurt

+0

你能上傳該文件的一個簡短的例子?我的意思是,您還可以構建ffplay並逐步瀏覽代碼,以瞭解ffplay如何實現它... – 2011-11-16 18:29:30

回答

1

我的壞,

一個嚴重的avs文件是我的問題。

無論如何,ffmpeg在顯示錯誤的方式上有點痛苦,被強制創建沒有任何錯誤消息或引發異常(或者我失敗了)的快照。