我正在尝试改编代码,以便在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/