我正在尝试在我正在创建的 phonegap 应用程序中实现音频通话。我正在使用PeerJS来连接 2 个客户端。这部分正在工作。但问题在于为媒体流创建的 URL。它看起来像这样:
<audio src="blob:file%3A///6212fd77-7d1e-46ba-9abe-cfe96d414b28"></audio>
而不是类似的东西:
<audio src="blob:http%3A///url-to-server.com/6212fd77-7d1e-46ba-9abe-cfe96d414b28"></audio>
这就是为什么两种设备都没有听到任何声音的原因(我正在使用 genymotion 和我的智能手机进行测试)。
但奇怪的是,当我在浏览器和手机中进行测试时,它可以工作。当我用笔记本电脑的内置麦克风说话时,我会在手机上听到它。但是当我用手机说话时,我的笔记本电脑上什么也听不见。
作为参考,这是我选择播放媒体流的音频元素时得到的:
<audio src="blob:http%3A//localhost%3A8100/861180b2-2c12-4134-a6da-89fcb40ef372"></audio>
不确定这是否真的是问题所在。
我正在使用 ionic 开发应用程序,它与人行横道顺利集成,人行横道基本上只是将最近的 chrome 浏览器与您的应用程序打包在一起,这样它就可以毫无问题地使用闪亮的新东西。
这是请求麦克风的代码:
function getAudio(successCallback, errorCallback){
navigator.getUserMedia({
audio: true,
video: false
}, successCallback, errorCallback);
}
然后每当有人发起呼叫时我都会调用它:
getAudio(
function(MediaStream){
console.log('now calling ' + to);
var call = peer.call(to, MediaStream);
call.on('stream', onReceiveStream);
});
然后onReceiveStream
将媒体流转换为 URL,然后分配给音频元素:
function onReceiveStream(stream){
var audio = document.querySelector('audio');
audio.src = window.URL.createObjectURL(stream);
audio.onloadedmetadata = function(e){
console.log('now playing the audio');
audio.play();
}
}
有任何想法吗?提前致谢。
更新
似乎真正的问题是无法从手机中捕获音频,因为它在navigator.getUserMedia
被调用时没有请求访问麦克风。navigator.getUserMedia
当我用 genymotion 进行测试时,我已经确认这是可以访问的。尽管它也没有请求访问 genymotion。我正在使用recordRTC作为 shim 提供程序。
更新 2
好的,我放弃了。真的不可能要麦克风。我现在正在尝试的是PhoneRTC。但是我又遇到了一个问题。当我安装插件时,它没有构建。请在项目 Github 页面上查看此问题以获取更多详细信息: https ://github.com/alongubkin/phonertc/issues/151