返回 导航

Cordova

hangge.com

Cordova - 解决media插件暂停续录后录音无法完整播放问题(只播放第一段)

作者:hangge | 2021-10-14 08:47

一、问题描述

    最近使用 Cordova 提供的 media 媒体插件进行录音,若使用暂停续录功能的话,虽然多段录音可以自动合并为一个文件。但最后录制的音频在一些 Android 设备上无法完整播放,只能播放出前一段录音。比如:
  • 使用一些系统版本比较低(Android 6)的设备进行暂停续录测试,录音可以完整播放。
  • 使用一些系统版本比较高(Android 9)的设备进行暂停续测试,最终只能播放里面的第 1 段录音。

二、问题解决

方法1:保留所有片段的头文件

(1)查看插件的 AudioPlayer.java 源码可以发现,停续录功能就是先录制一个个片段保存为临时文件,最终结束时再拼接成一个完整的录音文件。

(2)并且拼接时,除了第一个片段外。后面的片段的头文件都会去掉(字节)。

(3)所以一种解决办法就是让所有片段都不去掉头文件,虽然还不确定是否会有其他问题,但目前该方法在多种系统版本的设备上测试过都能正常使用。

方法2:直接使用 MediaRecorder 的 pause() 和 resume() 方法实现暂停续录功能

(1)插件录音功能使用的是 MediaRecorder 来实现,但由于之前谷歌在 MediaRecorder 中没有实现 Pause(),所以插件使用保存多段文件,最终再合并在一起的方法来实现暂停续录。
(2)而到了 API24 以上的版本就可以使用官方的 pause()(要跟 resume() 方法一起使用才生效),不用再先分成多个文件再合并了。
(3)因此如果我们不需要兼容那些系统版本比较低的设备(低于 Android 6.0),可以直接修改插件源代码中暂停续录部分改成使用 pauseresume 方法。
评论

全部评论(0)

回到顶部