【问题标题】:Cordova Media Plugin breaks HTML5 Audio tag on iOSCordova 媒体插件在 iOS 上破坏 HTML5 音频标签
【发布时间】:2015-10-31 02:59:49
【问题描述】:

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

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

在我启动唱片之前,音频标签运行良好。一旦 startRecord 被执行,我就不能再播放 HTML5 音频了。播放按钮没有任何作用。录制的音频很好地录制并重新启动我的应用程序,我可以播放它,就像页面上的其他音频一样。

我在 Android 上没有这个问题。

我认为我做的每一件事都做得很好(我已经读过,在 iOS 上你必须使用 HTML5 APi 在文件系统上创建文件,我没有成功),我在录制后发布媒体(但问题发生了甚至在停止记录之前)。

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

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

问候,

【问题讨论】:

    标签: ios cordova audio ionic media


    【解决方案1】:

    返回解决方案。

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

    希望这会有所帮助;)

    【讨论】:

    • 我觉得您非常接近帮助解决我遇到的问题。我没有使用 HTML5 音频标签,而是使用了 SpeechSynthesis API。在我在 Cordova Media 插件上使用 startRecord 方法之前,它工作正常。我试过你的补丁,但它仍然不适合我。我可以使用 Cordova Media API 很好地录制和播放音频。关于可能发生的事情有什么想法吗?另外,感谢您发布此内容,因为这是我所见过的最接近我的问题的答案。
    • 不客气。但很抱歉,如果这个补丁没有成功,我没有任何进一步的线索。我认为您必须直接调试到 CDVSound.m,逐个删除部分以缩小造成故障的代码部分。
    • 这解决了我的问题,但如果我再次录制它会再次破坏音频标签。有什么建议吗?
    • 你好@Sn00p 我在 ionic 2 ios 平台上遇到了同样的问题。我使用cordova媒体插件录制音频并使用HTMLAudioElement播放。录制后我无法播放我的音乐播放列表。如果我重新启动 ios 应用程序,它可以工作。我应该如何应用您的解决方案?我应该把这些代码放在 CDVSound.m 的哪个部分?
    • 兄弟!这次你真的救了我的命!!!!!!它完全奏效了。我正在使用这个插件进行录制,并使用网络音频 api 来播放它,但没有工作。我想知道为什么他们还没有在cordova-plugin-media repo上解决这个问题???。但无论如何,此修复程序非常感谢!这里...喝杯啤酒:beer:
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      my_media.release();
      

      【讨论】:

        【解决方案4】:

        适用于 ionic2 或更高版本

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-01-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多