我使用 ffmpeg_kit_flutter 包将数据流式传输到 Flutter 中的 RTSP 服务器。
IOS:工作中
Android:它不工作
使用的命令:
'ffmpeg -f avfoundation -i ":0" -acodec aac -f rtsp -rtsp_transport tcp "$Url"'
当我在android上运行“
ffmpeg -devices
”命令时,它返回以下响应,通过它我知道android不支持avfoundation,但android有android_camera
,
这个android_camera
也支持音频吗?
命令:'ffmpeg -devices'
回应:
I/flutter (10620): logs: libavutil 57. 28.100 / 57. 28.100
I/flutter (10620): logs: libavcodec 59. 37.100 / 59. 37.100
I/flutter (10620): logs: libavformat 59. 27.100 / 59. 27.100
I/flutter (10620): logs: libavdevice 59. 7.100 / 59. 7.100
I/flutter (10620): logs: libavfilter 8. 44.100 / 8. 44.100
I/flutter (10620): logs: libswscale 6. 7.100 / 6. 7.100
I/flutter (10620): logs: libswresample 4. 7.100 / 4. 7.100
I/flutter (10620): logs:Devices:
I/flutter (10620): D. = Demuxing supported
I/flutter (10620): .E = Muxing supported
I/flutter (10620): --
I/flutter (10620): logs: D android_camera
I/flutter (10620): logs: D lavfi
I/flutter (10620): logs: DE video4linux2,v4l2
我在Android中尝试过的命令
FFmpegKit.execute('-y -f android_camera -i 0:1 -r 30 -c:a aac -f rtsp -rtsp_transport tcp "$Url"');
FFmpegKit.execute('-y -f android_camera -i 0:1 -r 30 -c:a libmp3lame -qscale:a 2 "/storage/emulated/0/Download/androidvideo.mp3"');
FFmpegKit.execute('-y -f android_camera -i 0:0 -r 30 -c:a wavpack -b:a 64k "/storage/emulated/0/Download/androidvideo.wav"');
此命令录制视频,但不录制音频。
FFmpegKit.execute('-video_size hd720 -f android_camera -camera_index 1 -i anything -r 10 -t 00:00:15 "$dir/androidvideo.mp4”');
android_camera 输入设备不支持音频捕获。它仅从 Android 摄像头捕获视频,但不从设备的麦克风捕获音频。
android_camera
设备从相机捕获视频:尽管在 iOS 上,
avfoundation
支持视频和音频。作为一个选项,音频可以通过本机方式录制,
MediaRecorder
或通过
AAudio / OpenSL ES
JNI
,例如, 然后与相机录制的视频混合。ffmpeg 将从音频缓冲区获取音频数据(临时文件作为最简单的选项或内存缓冲区,但这需要进一步研究如何在调用字符串中配置它)。