如何使用FFmpeg API编程录制音视频?适配多通道音频双摄像头场景
FFmpeg多音频通道+多路摄像头录制实现参考
前置准备
- 确认设备的音视频采集驱动已正常被FFmpeg识别,Linux下通常用v4l2采集摄像头、alsa/pulse采集音频,Windows下用dshow/mfplat,macOS用avfoundation
- 编译FFmpeg时开启对应采集设备的支持,推荐使用FFmpeg 4.2及以上版本,避免API兼容问题
核心实现逻辑
你需要分别处理2路摄像头的视频流捕获、4通道音频流捕获,之后可选择分别保存为独立文件,或者合并为单文件多流输出,核心步骤如下:
- 注册所有FFmpeg设备、格式、编解码器:调用
avdevice_register_all() - 分别打开2路摄像头的输入上下文:根据系统选择对应输入格式,调用
avformat_open_input()分别打开两个摄像头设备,之后调用avformat_find_stream_info()获取流信息 - 打开4通道音频的输入上下文:配置音频采样率、通道数为4,确认采样格式和设备输出一致后打开采集上下文
- 为每一路输入流匹配对应解码器,打开解码器后读取音视频包,解码后可根据需求做预处理(比如画面缩放、音频重采样)
- 创建输出上下文,为每一路要保存的流添加对应的输出流,配置编码器参数后打开编码器,写入文件头
- 循环读取所有输入的音视频包,做时间基转换后写入输出文件,全部读取完成后写入文件尾,释放所有资源
注意:如果你是Windows/macOS环境,只需要替换对应的输入格式和设备名即可,整体API调用逻辑完全一致。设备名可通过FFmpeg命令行查询对应采集格式的设备列表获取。
核心代码片段参考(Linux环境)
采集设备初始化
// 注册所有设备和编解码器 avdevice_register_all(); av_register_all(); avcodec_register_all(); // 打开第一路摄像头 AVFormatContext *video_ctx1 = NULL; AVInputFormat *v4l2_fmt = av_find_input_format("v4l2"); AVDictionary *video_opts = NULL; av_dict_set(&video_opts, "framerate", "30", 0); av_dict_set(&video_opts, "video_size", "1920x1080", 0); int ret = avformat_open_input(&video_ctx1, "/dev/video0", v4l2_fmt, &video_opts); if (ret < 0) { fprintf(stderr, "打开摄像头1失败:%s\n", av_err2str(ret)); return -1; } avformat_find_stream_info(video_ctx1, NULL); // 第二路摄像头初始化逻辑和上述一致,替换设备路径为/dev/video1即可 // 打开4通道音频采集 AVFormatContext *audio_ctx = NULL; AVInputFormat *alsa_fmt = av_find_input_format("alsa"); AVDictionary *audio_opts = NULL; av_dict_set(&audio_opts, "channels", "4", 0); av_dict_set(&audio_opts, "sample_rate", "48000", 0); av_dict_set(&audio_opts, "sample_fmt", "s16le", 0); ret = avformat_open_input(&audio_ctx, "hw:0", alsa_fmt, &audio_opts); if (ret < 0) { fprintf(stderr, "打开音频采集设备失败:%s\n", av_err2str(ret)); return -1; } avformat_find_stream_info(audio_ctx, NULL);
多流输出注意项
- 每一路输入流都需要对应一个输出流,时间基转换时要分别按照对应流的时间基计算,避免音视频不同步
- 4通道音频如果要保存为MP4格式,推荐使用AAC编码器,FFmpeg原生AAC编码器支持4通道编码,无需额外转换
- 2路视频流如果要合并到同一个文件存储,选择支持多流的封装格式即可,MP4、MKV都满足需求;如果要分别保存则创建两个独立输出上下文分别写入即可
内容的提问来源于stack exchange,提问作者Zheng Xiaodong
相关产品推荐
相关产品推荐

