使用MediaElementAudio和远程网址

时间:2017-01-21 10:08:44

标签: javascript html5 audio

所以我正在创建一个音频可视化网站,我认为如果我真的让用户将YouTube视频网址粘贴到网站上会很酷,并且该网站会使用该YouTube视频的源网址作为源html5音频标签(html5音频支持mp4)。但出于某种原因,它只是不想工作。

示例源网址:https://r2---sn-bvvbax4pcxg-hjps.googlevideo.com/videoplayback?ratebypass=yes&dur=306.456&lmt=1429960077715849&expire=1485011355&clen=12330222&key=cms1&mime=video%2Fmp4&gir=yes&requiressl=yes&sparams=clen,dur,ei,expire,gir,id,initcwndbps,ip,ipbits,ipbypass,itag,lmt,mime,mm,mn,ms,mv,nh,pl,ratebypass,requiressl,source,upn&itag=18&upn=F5801EjVMXo&id=o-AMtqgvheiMbojDYpNlp2mIfm0RPLHkn5y1KyFyYEH8QS&ei=OyWDWLDbDuGw8gS5u4go&pl=44&ipbits=0&source=youtube&signature=589789D247A6000CD16FA5AAD36C0CBD99219874.3ECC34B28702ED0249FA9A8AA384BBFE845C96DE&redirect_counter=1&req_id=3145e0a0e752a3ee&cms_redirect=yes&ipbypass=yes&mm=31&mn=sn-bvvbax4pcxg-hjps&ms=au&mt=1484992255&mv=m

现在,当我尝试这样做时,我收到错误“MediaElementAudioSource因CORS访问限制而输出零”。所以,既然我之前已经读过这个问题,我就找到了我可以添加属性的解决方案:crossOrigin =“anonymous”;到我的音频标签,它将开始工作。

不,它没有。现在我收到错误“Uncaught(in promise)DOMException:无法加载,因为找不到支持的源代码。”我完全被难倒了。

另请注意,当用户只是将音轨或mp4视频拖到网站上时,该网站现在运行得非常好。我使用URL.createObjectURL()来创建拖动文件的URL。

非常感谢任何帮助,谢谢。

edit1:所以我做了更多的研究,我发现了一篇文章,HTMLMediaElement.play() Returns a Promise,所以我把一些代码放在一起

var audio = document.getElementById("myAudio");
audio.crossOrigin = "anonymous";
audio.src = songSources[currentIndex];
audio.load();

var playPromise = audio.play();

if (playPromise !== undefined) {
    playPromise.then(function() {
        alert("good");
    }).catch(function(error) {
        alert(error);
    });
}

并且正如我预期的那样,我从catch块得到了一条错误消息。它显示为:“NotSupportedError:无法加载,因为找不到支持的源。”我发现这非常令人困惑,因为如果我只是从中删除crossOrigin =“anonymous”属性,音频元素将会正常运行。有什么想法吗?

edit2:似乎我也难倒你们,哈哈。

0 个答案:

没有答案