我正在尝试使用ALSA从麦克风获取音频数据。默认情况下,流的采样率为4100 Hz,但我需要获得8000 Hz。
尝试使用avformat_open_input的AVDictionary选项不会改变任何内容。
代码已最大程度简化:
AVFormatContext *format_context = nullptr;
AVInputFormat *input_format = nullptr;
avdevice_register_all();
input_format = av_find_input_format("alsa");
AVDictionary* options = NULL;
av_dict_set(&options, "sample_rate", "8000", 0);
int res = avformat_open_input(&format_context, "hw:0", input_format, &options);
if(res < 0)
{
exit(1);
}
res = avformat_find_stream_info(format_context, 0);
if(res < 0)
{
exit(1);
}
av_dump_format(format_context, 0, "alsa", 0);
输入#0,alsa,来自'alsa':持续时间:N/A,开始时间:1685994324.766645,码率:1411 kb/s流#0:0:音频:pcm_s16le,44100 Hz,2声道,s16,1411 kb/s
有没有什么方法可以让ALSA输出更低的采样率?
谢谢!
1条答案
按热度按时间r6l8ljro1#
我没有使用ALSA的经验,也没有访问ALSA设备的权限,但我查看了
libavdevice/asla_dec.c
,libavdevice/asla.c
libavdevice/alsa.h
的源代码。我在
libavdevice/asla_dec.c
中遇到了这些行。因此,在我的FFmpeg版本中,
snd_pcm_hw_params_set_rate_near
的默认sample_rate是48000。在我的MacOS机器上,我发现相应的文件
libavdevice/avfoundation.m
和libavdevice/audiotoolbox.m
甚至没有给予sample_rate
(!),并且我在avfoundation
上尝试更改采样率时没有成功。至少ALSA
似乎为您提供了设置sample_rate
的选项,因此您实际上可能能够更改sample_rate
。