首页 文章

Cordova Media Plugin打破了iOS上的HTML5音频标签

提问于
浏览
2

我正在研究离子应用程序,现在面临一个奇怪的问题 .

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

音频标签运行良好,直到我发布记录 . 一旦执行了startRecord,我就不能再播放HTML5音频了 . 播放按钮不起作用 . 录制的音频被很好地录制并重新启动我的应用程序,我可以播放它,就像页面上的其他音频一样 .

我在Android上没有这个问题 .

我认为我做的每件事情都很好(我已经在iOS上看到你必须使用HTML5 APi在filesytem上创建文件,我做了什么没有成功),我在录制后发布了媒体(但问题甚至发生在stopRecord) .

有人有过这个问题吗?任何线索?

Cordova:5.1.1插件媒体:1.0.2 iOS:8.3

问候,

4 回答

  • 0

    回到解决方案 .

    在文件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类别时,我们必须将其置于“播放和录制”类别中,而不仅仅是“录制”并添加“与其他音频会话混合”选项 .

    希望这会有所帮助;)

  • 0

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

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

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

    my_media.release();
    
  • 4

    对于ionic2或更高

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

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

相关问题