Cordova 媒体插件中断 iOS 上的 HTML5 音频标签

Cordova Media Plugin breaks HTML5 Audio tag on iOS

我正在开发 Ionic 应用程序,现在遇到一个奇怪的问题。

在视图中,我可以录制音频。在同一个视图中,我有很多 HTML5 个音频标签。

在我发布唱片之前,音频标签工作正常。执行 startRecord 后,我无法再播放 HTML5 音频。播放按钮不执行任何操作。录制好的音频,重启我的应用,可以播放,至于页面上的其他音频。

我在 Android 上没有这个问题。

我认为我做的每件事都很好(我在 iOS 上读到你必须使用 HTML5 APi 在文件系统上创建文件,我没有成功),我在录制后释放媒体(但问题甚至发生在 stopRecord 之前)。

有人遇到过这个问题吗?有什么线索吗?

科尔多瓦:5.1.1 插件媒体:1.0.2 iOS : 8.3

此致,

返回解决方案。

在文件 cordova-plugin-media/blob/master/src/ios/CDVSound.m 中,应用以下补丁:

// get the audioSession and set the category to allow recording when device is locked or ring/silent switch engaged
         if ([self hasAudioSession]) {
             if (![self.avSession.category isEqualToString:AVAudioSessionCategoryPlayAndRecord]) {
             -                    [self.avSession setCategory:AVAudioSessionCategoryRecord error:nil];
             +                    [self.avSession setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers error:nil];
             }

             if (![self.avSession setActive:YES error:&error]) {

基本上在更改我们的 AvAudioSession 类别时,我们必须将其放在类别 'Play And Record' 中,而不仅仅是 'Record' 并添加选项 'to mix with others audio sessions'.

希望这会有所帮助 ;)

除了您的修复之外,我还发现当您开始录音时,音频会自动发送到耳机而不是扬声器,从而使声音变小。为了解决这个问题,我还在选项中添加了 AVAudioSessionCategoryOptionDefaultToSpeaker 掩码。如果您连接了耳机,这将自动检测,如果没有,它将默认为扬声器输出。结果代码是:

[self.avSession setCategory:AVAudioSessionCategoryPlayAndRecord
  withOptions:AVAudioSessionCategoryOptionMixWithOthers |
   AVAudioSessionCategoryOptionDefaultToSpeaker error:nil];

请仔细检查您是否在录制后释放了底层操作系统的音频资源。对我来说是一个简单的修复:

my_media.release();

对于 ionic2 或更高版本

CDVSound.m 文件替换为以下文件:https://gist.github.com/malinosqui/0df4c570403b29f08f3cf1352f4b56b9(包含@MasterKitano 和@Sn00p 答案)

CDVSound.m 文件位于 platforms/ios/{AppName}/Plugins/cordova-plugin-media/