插件检索平台(中文版):http://s0pub0dev.icopy.site/packages
混合项目支持音频相关功能:
目前Flutter框架自身API是不支持音频播放、采集的。因此,对于音频功能的实现,也是将利用各平台(Android/iOS)的API来集成音频相关功能,并将其插件化,音频插件基本上都是通过这种方式得来的。
当前的大部分已有的第三方插件,例如:audioplayer,都只支持播放远程或者本地音频文件,对于实时流数据的播放是不支持的。其次,也有一些插件是支持实时流数据播放的,例如:flutter_sound,但是其在集成(依赖的插件较多,且使用cocoapods安装各种很慢,且对版本有要求)、使用过程中复杂度较高(官方Demo对音频流处理的代码不是很清晰)、插件不够稳定(初始化插件崩溃了~)。最后,通过分析上述插件的源码,甚至包括其他一些音频插件,发现iOS平台大部分都是使用AVAudioSession框架,未使用到AudioUnit,因此当前的音频框架不具备回声抑制功能。
注意⚠️:在Android上,flutter_sound Recorder尚不支持OPUS编解码器和PCM. (但Player在Android上是可以的)
结合上述的情况,如果项目的音频功能比较简单、只需要播放音频文件等,则audioplayer就可以满足需求。但是,对于当前的项目而言,需要实时播放音频流数据,而且对音频有进行特殊的处理,我们发现没有一个比较合适的插件,能够满足当前音频相关功能的需求。
因此,针对上述的情况,目前有两个解决方案。
1)音频功能依旧由Native侧来实现
优势:代码架构变动小;问题易定位;灵活、定制化程度高
缺点:和插件化相比可移植性不够高,从Flutter的开发角度来说,插件化更加符合开发诉求。
2)基于目前Android/iOS平台的音频功能,自己开发插件。
优势:可以根据自己的实际需求去实现插件功能,更加灵活,出现问题也比较容易定位解决;可移植性高、跨端性好。
缺点:开发插件具备一定工作量(但是这个工作量是一次的,开发完成后只需要定期维护即可)
(如何开发插件:https://flutter.cn/docs/development/packages-and-plugins/developing-packages)
如果产品较多,且要适用不同平台,对音频功能有定制化的需求等等要求的话,建议采用第二种方案,一劳永逸。
集成flutter_sound插件可能遇到的问题及其解决措施:
http://www.lyonghu.com/2020/03/31/Cocoapod报错-CDN-trunk-Repo-update-failed/
网友评论