首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在phonegap应用程序中流式播放音频

如何在phonegap应用程序中流式播放音频
EN

Stack Overflow用户
提问于 2015-05-05 12:56:10
回答 1查看 2.8K关注 0票数 16

我正在尝试在我正在创建的phonegap应用程序中实现音频呼叫。我正在使用PeerJS来连接两个客户端。这部分起作用了。但问题出在为媒体流创建的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元素时得到的结果:

<audio src="blob:http%3A//localhost%3A8100/861180b2-2c12-4134-a6da-89fcb40ef372"></audio>

不过,我不太确定这是否真的是问题所在。

我使用ionic来开发这个应用程序,它与crosswalk集成得很流畅,它基本上只是将最近的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,然后将该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被调用时,它没有请求访问麦克风。当我使用genymotion进行测试时,我已经确认了navigator.getUserMedia是可以访问的。尽管它也不会在genymotion中请求访问。我使用recordRTC作为填充提供程序。

更新2

好吧,我放弃了。要麦克风是不可能的。我现在正在尝试的是PhoneRTC。但我又被一个问题卡住了。它不是构建时,我有插件安装。有关更多详细信息,请查看项目Github页面上的这一期:https://github.com/alongubkin/phonertc/issues/151

EN

回答 1

Stack Overflow用户

发布于 2015-06-30 00:13:26

要访问手机资源,您必须在AndroidManifest.xml上声明它,以便最终用户在安装应用程序时知道它。

Cordova和/或Phongap插件构建一个应用程序,即使你没有将它们用作webview库,所以你必须在清单中请求许可。

麦克风和摄像头的权限为:

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />

但似乎一些插件也有一些技巧,还需要一个:

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30044569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档