c++ - 无法找到音频流

标签 c++ c ffmpeg directshow avisynth

我正在尝试在 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/

相关文章:

c - 无法打印动态分配的指针

c++ - 从 C 到 C++ : function was not declared in this scope

c++ - Qt 鼠标在 Label 上的坐标

Clang 与 1 优化的倒数

c++ - 使用 Qt 设计 OpenCV GUI

c - 直接 ffmpeg -> OpenGL 发送,无需中间缓冲区复制

ffmpeg - FFMPEG 生成的 MPEG Dash 输出不起作用

FFMPEG 支持 HLS v4 和 v5

c++ - 析构函数中函数调用的段错误

c++ - 使用映射的迭代器混淆