如何使用FFmpeg仅列出音频输入设备?

Leon C. 2022-07-19 14:05:44

我正在使用 FFmpeg 5.0.1 做一个音频录制项目。 为了列出所有可用的音频输入设备供用户选择和使用,我使用了函数avdevice_list_input_sources()。 我的代码如下:

avdevice_list_input_sources(av_find_input_format("dshow"), NULL, NULL, &device_list);

其中device_list声明为:

AVDeviceInfoList* device_list;

但是这样一来,所有支持的输入设备,包括音频视频,都会列出来。 这可能会损害程序的稳定性,因为用户可能会选择列出的视频设备并导致程序崩溃。 所以我需要找到一种只列出音频输入设备或从device_list中删除视频设备的方法。 但到目前为止,我还没有找到可行的办法。

请问怎样只列出音频设备或从device_list中删除音频设备?

谢谢!

...全文
690 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hulehui 2023-03-18
  • 打赏
  • 举报
回复


```c
#include <stdio.h>  
  
AVInputFormat* find_input_format(AVInputFormat* input_format) {  
    if (input_format == NULL) {  
        return NULL;  
    }  
    for (int i = 0; i < input_format->nb_streams; i++) {  
        if (input_format->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO) {  
            return input_format;  
        }  
    }  
    return NULL;  
}  
  
AVStream* find_input_stream(AVStream* input_stream) {  
    if (input_stream == NULL) {  
        return NULL;  
    }  
    for (int i = 0; i < input_stream->nb_streams; i++) {  
        if (input_stream->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO) {  
            return input_stream;  
        }  
    }  
    return NULL;  
}  
  
AVStream* find_output_stream(AVStream* output_stream) {  
    if (output_stream == NULL) {  
        return NULL;  
    }  
    for (int i = 0; i < output_stream->nb_streams; i++) {  
        if (output_stream->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO) {  
            return output_stream;  
        }  
    }  
    return NULL;  
}  
  
int main() {  
    AVInputFormat* input_format = find_input_format(AVInputFormat::AUDIO);  
    AVStream* input_stream = find_input_stream(AVStream::AUDIO);  
    AV

```

CSDN-Ada助手 2023-01-13
  • 打赏
  • 举报
回复
您可以前往 CSDN问答-IT工具 发布问题, 以便更快地解决您的疑问

2,545

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧