在iOS上同时录制和播放(Phonegap build)
我正在使用Phonegap Build版本3.3.0开发iOS和Android应用程序。
应用的主要焦点是在后台播放另一个音频/音乐的录音。
对于这两个实例,我正在使用带有正确音频文件的phonegap media api进行录制(iOs – * .wav / Android – * .amr)和播放(iOs和Android – * .mp3)。
例:
var audioRec = new Media(audioRecSrc, onSuccess, onError); audioRec.startRecord(); var audioPlay = new Media(audioPlaySrc, onSuccess, onError); audioPlay.play();
示例适用于Android,没有任何问题。 录制声音并正常播放音乐。 但在iOS中只有一个是可能的。 无论哪种称为最后,播放或录制。 另一个返回错误代码-4 。
这是iOs上的Phonegap Media API的限制还是我错过了什么?
为了能够同时播放媒体和录制音频,必须将AVAudioSession的category属性设置为AVAudioSessionCategoryPlayAndRecord 。 为此,您必须部署一个自定义iOS插件来设置相应的值。
在讲的时候,由于Cordova Media Plugin中的一个错误,这个过程并不是那么简单。 在开始录制之前,插件会不加选择地将AVAudioSession的类别设置为AVAudioSessionCategoryRecord 。 因此,在开始录制之后,播放所需的媒体变得不可能,除非您在调用record方法后明确将AVAudioSession类别设置为播放和录制 。 这显然暗示您只能在录制开始后播放您的媒体。
但是,在许多情况下,这种解决方法可能是不可接受的,这可能需要在录制声音之前开始播放媒体。 因此,我已经提交了有关该问题的错误报告,您可以在此处找到:
iOS Media插件:无法同时播放video和录制音频
另外,我已应用此修复并执行以下拉取请求:
在录制之前检查avSession.category是否已设置为“AVAudioSessionCategoryPlayAndRecord”
它实际上是一个小修复(实际上是两行代码),因此我相信它很快将应用于主分支。
更新
经过进一步调查,我可能错了。 根据Cordova Media API文档 ,在iOS中录制音频时,您录制的文件必须已存在并且是.wav文件。 也许你已经尝试过这种情况(在这种情况下,我以前的答案可能是正确的)但这里有一个简单的脚本来创建文件,然后在文件句柄准备就绪后开始录制:
var audioRecSrc = "myrecording.wav"; var audioPlaySrc = "audiotoplay.mp3" // Wait for PhoneGap to load document.addEventListener("deviceready", onDeviceReady, false); // PhoneGap is ready function onDeviceReady() { window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail); } function gotFS(fileSystem) { fileSystem.root.getFile(audioRecSrc, {create: true, exclusive: false}, gotFileEntry, fail); } function gotFileEntry(fileEntry) { var audioRec = new Media(audioRecSrc, onSuccess, onError); audioRec.startRecord(); var audioPlay = new Media(audioPlaySrc, onSuccess, onError); audioPlay.play(); } function fail(error) { console.log("error : " + error.code); }
以下是Cordova File API文档的链接,以备您需要参考时使用。 您还需要确保在应用配置中拥有相应的权限才能使用文件和媒体API(您需要的所有内容都在我链接的页面上)
以前
这是iOS的限制。 以下是Mobile Safari文档的引用(PhoneGap在使用iPhone SDK编译时使用本机UIWebView):
多个同步音频或video流
目前,所有运行iOS的设备都限于随时播放单个音频或video流。 iOS设备目前不支持多个video并排播放,部分重叠或完全覆盖。 还不支持播放多个同步音频流。 但是,您可以动态更改音频或video源。 有关详细信息,请参见“按顺序更换媒体源”(第41页)
推断如果不能同时播放两个流是不可能的,同时也不会播放和录制。 至于上面关于StarComposer应用程序的评论,本机iPhone应用程序与使用PhoneGap的应用程序之间存在很大差异。 PhoneGap使用Cordova允许开发人员使用JavaScript访问本机设备function的子集,而本机应用程序具有全部function。 您遇到的有限流媒体function是由于iOS平台上的HTML5实现。 这是我从上面引用的文档,它是在第23页: