之前写过一一篇iOS的录音播放文档,现在在app改写的时候,需要用到Flutter改写,把遇到的问题记录下来
- 用的
flutter-sound
这个库,实现了录音和播放等功能,录制时可以指定录音的格式; - 直接导入,并按照官方demo写了录音播放功能,使用安卓手机测试发现录音结束后没有生成录音文件,看log发现录音之后文件路径为空;
- 以为是权限问题,加了文件读写权限,使用手机录音发现录音文件路径为空???
- 再次比较官方demo,发现自己为了方便直接用
mp3
格式,看官网才知道不支持mp3
格式encoder,改为aac
格式还不行; - 以为是安卓手机问题,改用苹果手机测试,发现和webview通信的时候接受到的数字2变成了2.0导致解析报错,不用
int.parse
改用double.parse().toInt
方法转为整数;使用苹果手机录音播放后也是一样的问题,获取到的录音文件路径为空; - 和官方demo又比较了一次只是一些细节改动了,实在无法确定是哪里有问题,决定把demo跑起来试试看;demo可以正常录音,录音完成可以获取到完整录音文件路径
/private/var/mobile/Containers/Data/Application/B5A71F7A-92BF-4C78-8B6A-DC9A5A857833/tmp/tau_file.mp4
,那应该是某些地方写的和demo不一样,比较代码即可定位问题; - 代码也很类似的,加了log发现时第一次录音的时候初始化没有完成,第二次录音的时候才能正常录音,因为用的单例模式,直接再调用录音方法时才初始化的,改为在页面init方法中提前调用,这样开始录音的时候
FlutterSoundPlayer
和FlutterSoundRecorder
对象已经初始化过了,可以正常使用;
参考链接:
- 官网:https://flutter-sound.canardoux.xyz/guides_getting_started.html
- 官方录制和播放demo:https://github.com/Canardoux/flutter_sound/blob/master/flutter_sound/example/lib/simple_recorder/simple_recorder.dart