问题描述
我正在尝试使MediaSource与m4a音频一起使用,但还没有运气。
我尝试使用哑剧'audio/mp4; codecs="mp4a.40.2"'
将其按原样提供给MS。然后,我尝试将其重新编码为mp4
,然后先将其提供给mp4box以添加标题。然后与哑剧'video/mp4; codecs="mp4a.40.2"'
一起使用。 (mp4a.40.2
就是mp4info
所显示的,所以它是真实的,而不是我的幻想)
这些都不起作用。在Chrome MS上,它只会自行关闭,不会触发sourceclose
事件;在Firefox上,它只会执行任何操作,不会显示任何错误。
我使用以下代码
<!DOCTYPE html> <html> <head>
<meta charset="utf-8"/> </head> <body>
<video controls></video>
<audio controls></audio>
<script>
// var video = document.querySelector('audio');
var video = document.querySelector('video');
// var assetURL = 'myfile.m4a'
var assetURL = 'myfile.mp4'
// var mimeCodec = 'audio/mp4; codecs="mp4a.40.2"'
var mimeCodec = 'video/mp4; codecs="mp4a.40.2"'
if ('MediaSource' in window && MediaSource.isTypeSupported(mimeCodec)) {
var mediaSource = new MediaSource;
console.log(mediaSource.readyState); // closed
video.src = URL.createObjectURL(mediaSource);
mediaSource.addEventListener('sourceclosed',function() {debugger; console.log('just closed')});
mediaSource.addEventListener('sourceopen',sourceOpen);
} else {
console.error('Unsupported MIME type or codec: ',mimeCodec);
}
function sourceOpen (_) {
console.log(this.readyState); // open
var mediaSource = this;
var sourceBuffer = mediaSource.addSourceBuffer(mimeCodec);
console.log(this.readyState); // open
fetchAB(assetURL,function (buf) {
sourceBuffer.addEventListener('updateend',function (_) {
console.log(mediaSource.readyState); // suprise: it's closed
console.log('before endOfStream')
mediaSource.endOfStream(); // fails here
console.log('before play')
video.play();
console.log(mediaSource.readyState); // ended
});
sourceBuffer.appendBuffer(buf);
});
console.log(this.readyState); // open
};
function fetchAB (url,cb) {
console.log(url);
var xhr = new XMLHttpRequest;
xhr.open('get',url);
xhr.responseType = 'arraybuffer';
xhr.onload = function () {
cb(xhr.response);
};
xhr.send();
};
</script> </body> </html>
我应该以其他方式重新编码我的m4a
文件吗?我应该忘掉它并使用mp3吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)