我们可以使用 FFmpeg 从 Android 手机流式传输实时音频吗?

问题描述 投票:0回答:2

我使用 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”');
flutter ffmpeg android-ffmpeg ffmpegkit
2个回答
2
投票
Android 版 FFmpeg 中的

android_camera 输入设备不支持音频捕获。它仅从 Android 摄像头捕获视频,但不从设备的麦克风捕获音频。


0
投票
如以下来源所示,Android 版 ffmpeg 仅支持使用

android_camera

 设备从相机捕获视频:

  • 如何使用ffmpeg读取实时麦克风音量?
  • https://github.com/tanersener/mobile-ffmpeg/issues/153
尽管在 iOS 上,

avfoundation

 支持视频和音频。

作为一个选项,音频可以通过本机方式录制,

MediaRecorder

 或通过 
AAudio / OpenSL ES
 
JNI
,例如,
然后与相机录制的视频混合。

ffmpeg 将从音频缓冲区获取音频数据(临时文件作为最简单的选项或内存缓冲区,但这需要进一步研究如何在调用字符串中配置它)。

© www.soinside.com 2019 - 2024. All rights reserved.