我正在研究离子应用程序,现在面临一个奇怪的问题。
在视图上,我可以录制音频。在同一个视图中,我有很多HTML5音频标签。
音频标签运行良好,直到我发布记录。一旦执行了startRecord,我就不能再播放HTML5音频了。播放按钮不起作用。录制的音频录制得很好并重新启动我的应用程序,我可以播放它,就像页面上的其他音频一样。
我在Android上没有这个问题。
我认为我做得很好(我已经读过你在iOS上你必须使用HTML5 APi在filesytem上创建文件,我做了什么没有成功),我在录制后发布媒体(但问题发生了)甚至在stopRecord之前。)
有人遇到过这个问题吗?任何线索?
科尔多瓦:5.1.1 插件媒体:1.0.2 iOS:8.3
此致
答案 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/