Cordova - 解决media插件暂停续录后录音无法完整播放问题(只播放第一段)
作者:hangge | 2021-10-14 08:47
一、问题描述
最近使用 Cordova 提供的 media 媒体插件进行录音,若使用暂停续录功能的话,虽然多段录音可以自动合并为一个文件。但最后录制的音频在一些 Android 设备上无法完整播放,只能播放出前一段录音。比如:
- 使用一些系统版本比较低(Android 6)的设备进行暂停续录测试,录音可以完整播放。
- 使用一些系统版本比较高(Android 9)的设备进行暂停续测试,最终只能播放里面的第 1 段录音。
二、问题解决
方法1:保留所有片段的头文件
(1)查看插件的 AudioPlayer.java 源码可以发现,停续录功能就是先录制一个个片段保存为临时文件,最终结束时再拼接成一个完整的录音文件。
(2)并且拼接时,除了第一个片段外。后面的片段的头文件都会去掉(6 字节)。
(3)所以一种解决办法就是让所有片段都不去掉头文件,虽然还不确定是否会有其他问题,但目前该方法在多种系统版本的设备上测试过都能正常使用。
方法2:直接使用 MediaRecorder 的 pause() 和 resume() 方法实现暂停续录功能
(1)插件录音功能使用的是 MediaRecorder 来实现,但由于之前谷歌在 MediaRecorder 中没有实现 Pause(),所以插件使用保存多段文件,最终再合并在一起的方法来实现暂停续录。(2)而到了 API24 以上的版本就可以使用官方的 pause()(要跟 resume() 方法一起使用才生效),不用再先分成多个文件再合并了。
(3)因此如果我们不需要兼容那些系统版本比较低的设备(低于 Android 6.0),可以直接修改插件源代码中暂停续录部分改成使用 pause 和 resume 方法。
- 修改后的代码文件如下:media.zip
全部评论(0)