使用FFmpegKit Flutter采集Android麦克风音频至RTSP服务器失败求助
问题分析与解决方案
核心错误原因
你用的-f android_camera是FFmpegKit专门用于Android相机视频采集的输入格式,它完全不支持音频抓取,所以不管你怎么调整输入索引(0:1/0:0),都只能获取到视频流,这就是日志显示输入仅含视频、输出音频大小为0的根本原因。返回码255也和这个无效的音频输入源直接相关。
正确实现方式
1. 本地录制音频
要采集麦克风音频,需要使用android_audio输入格式,示例命令:
// 录制为MP3 FFmpegKit.execute('-y -f android_audio -i default -c:a libmp3lame -qscale:a 2 "/storage/emulated/0/Download/android_audio.mp3"'); // 录制为WAV FFmpegKit.execute('-y -f android_audio -i default -c:a pcm_s16le "/storage/emulated/0/Download/android_audio.wav"');
-i default表示使用系统默认麦克风,也可以指定具体音频设备索引(可通过FFmpegKit.getMediaInformation()获取设备列表)。
2. 实时推流麦克风音频到RTSP
直接推送音频流的命令:
FFmpegKit.execute('-y -f android_audio -i default -c:a aac -f rtsp -rtsp_transport tcp "$Url"');
3. 同时采集音视频并推流/录制
如果需要同时推流音视频,需要分别抓取视频(android_camera)和音频(android_audio)流,再合并输出:
// 推流音视频到RTSP FFmpegKit.execute('-y -f android_camera -i 0 -f android_audio -i default -c:v h264_android -c:a aac -f rtsp -rtsp_transport tcp "$Url"'); // 本地录制音视频 FFmpegKit.execute('-y -f android_camera -i 0 -f android_audio -i default -c:v h264_android -c:a aac -t 00:00:15 "$dir/android_video_audio.mp4"');
-i 0表示使用第0个相机设备,可根据需要调整索引;h264_android是Android硬件编码器,效率更高。
额外注意事项
- 确认FFmpegKit的编译包包含了所需的音频编码器(比如
libmp3lame、aac),如果用的是min包可能需要换成full包。 - 虽然你已经授予权限,仍需确保在运行时动态申请了
RECORD_AUDIO和CAMERA权限(Android 6.0+要求)。
内容的提问来源于stack exchange,提问作者Uday
相关产品推荐
相关产品推荐

