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

时间:2015-08-07 15:35:13

标签: ios cordova audio ionic media

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

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

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

我在Android上没有这个问题。

我认为我做得很好(我已经读过你在iOS上你必须使用HTML5 APi在filesytem上创建文件,我做了什么没有成功),我在录制后发布媒体(但问题发生了)甚至在stopRecord之前。)

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

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

此致

4 个答案:

答案 0 :(得分:4)

返回解决方案。

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

希望这会有所帮助;)

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

my_media.release();

答案 3 :(得分:0)

对于ionic2或更高版本

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

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