Javascript 在cordova应用程序中播放MP3 blob

Javascript 在cordova应用程序中播放MP3 blob,javascript,cordova,mp3,html5-audio,Javascript,Cordova,Mp3,Html5 Audio,在我的webapp中,用户可以录制他们的声音,然后回放以听到结果 这是一个nodejs(meteor)应用程序,记录是用Mp3LameEncoder对象完成的,它允许我获得一个MP3 blob。一旦我得到它,我就使用windowURL来获取blob url。然后,我将该url作为src属性添加到我的音频html5元素中。在桌面/移动浏览器上,这非常有效(在大多数浏览器上) 但在我的cordova应用程序中,无事可做:无论我尝试了什么,我总是无法播放音频。src attr设置正确,但是当我使用本机

在我的webapp中,用户可以录制他们的声音,然后回放以听到结果

这是一个nodejs(meteor)应用程序,记录是用Mp3LameEncoder对象完成的,它允许我获得一个MP3 blob。一旦我得到它,我就使用windowURL来获取blob url。然后,我将该url作为src属性添加到我的音频html5元素中。在桌面/移动浏览器上,这非常有效(在大多数浏览器上)

但在我的cordova应用程序中,无事可做:无论我尝试了什么,我总是无法播放音频。src attr设置正确,但是当我使用本机控件的play按钮时,什么也没有发生。但是blob在那里很好,它可以上传到存储服务器,并在之后正确地听到

此外,在我的cordova应用程序中,当源文件来自远程服务器时(无论是我的AWS bucket还是我的应用程序服务器上的静态文件),我都可以使用
收听音频

我决定尝试使用media cordova插件来录制和播放声音,然后透明地上传录制的水滴,但我不能同时将麦克风用于
媒体()
和JS库

既然我在记忆中的某个地方有那个斑点(我可以上传它,即使使用cordova应用程序),我怎么能在上传之前让它可以播放呢


谢谢。

在某些平台上,HTML5媒体元素无法播放没有元数据的blob,即不是由FileReader或XHR创建的blob。如果这是原因,一种解决方案可能是将blob假下载(XHR)为blob,然后使用新的URL:

var xhr = new XMLHttpRequest;
xhr.open("get", yourBlobURL);
xhr.responseType = "blob";
xhr.onload = function () {
   var yourNewBlob = xhr.response;
   audioElement.src = URL.createObjectURL(yourNewBlob)
};
xhr.send();
<>如果你的录音很短,你也可以考虑使用数据URL代替BLUB. < /P>
如果你只想让别人听到,你也可以切换到。

在某些平台上,HTML5媒体元素不能播放没有元数据的blob,即那些不是由FileReader或XHR创建的blob。如果这是原因,一种解决方案可能是将blob假下载(XHR)为blob,然后使用新的URL:

var xhr = new XMLHttpRequest;
xhr.open("get", yourBlobURL);
xhr.responseType = "blob";
xhr.onload = function () {
   var yourNewBlob = xhr.response;
   audioElement.src = URL.createObjectURL(yourNewBlob)
};
xhr.send();
<>如果你的录音很短,你也可以考虑使用数据URL代替BLUB. < /P> 如果你只想让别人听到,你也可以切换到