2,550
社区成员




我正在使用 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
中删除音频设备?
谢谢!
```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
```