我正在尝试在 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 播放正确的脚本时,原始视频格式是 1920x1080
我认为我的问题可能比无法获取音频流这一简单事实更深。
我正在尝试了解如何知道显示在这个 456x32 窗口上的错误消息
-- 编辑2--
我找出这张图片上写的是什么,我的问题就解决了,放置错误的 avs 脚本是一个旧脚本。
我很惭愧。
最佳答案
我的错,
一个错误放置的 avs 文件是我的问题。
无论如何,ffmpeg 显示错误的方式有点痛苦,被迫在没有任何错误消息或引发异常的情况下制作快照(或者我可能失败了)。
关于c++ - 无法找到音频流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8156468/