我正在尝试改编代码,以便在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中只能找到一个视频。这就是为什么我无法捕捉声音的原因。

所以我要问我的开业是否做错了什么,或者我错过了什么。

附:我知道显示的代码很短,但是问题就在这一步!

谢谢

库尔特

-编辑-

我还注意到,当我转储AVFormatContext时,视频流的大小为456x32。
当我尝试使用ffplay启动损坏的脚本时,我可以发现显示的窗口大小与此相同。

当我使用ffplay播放正确的脚本时,原始视频格式为1920x1080

我认为我的问题可能比无法获得音频流的简单事实还要深。

我试图找出如何知道此456x32窗口上显示的错误消息

-编辑2-

我找出此图像上写的内容,并解决了我的问题,将旧脚本放置在错误的AVS脚本中。

我很惭愧。

最佳答案

我的错,

一个放置不当的avs文件是我的问题。

无论如何,ffmpeg在显示错误的方式上有点痛苦,被迫制作没有任何错误的msg或异常引发的快照(或者我失败了)。

关于c++ - 找不到音频流,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8156468/

10-11 21:26