我正在尝试创建自己的代码来使用媒体源播放实时MPEG-DASH,我成功地获得了数据,但无法在播放器中显示它。
function GETData(){
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if(xhr.readyState == 4 && xhr.status == 200){
liveIndex++;
receiveBuffer.push(xhr.response);
if(audio == false){
appendVideo();
audio = true;
}
else{
appendAudio();
audio = false;
}
}
};
xhr.open("GET", urlList[liveIndex], true);
xhr.responseType = 'arraybuffer';
xhr.send();
}
function updateVideoFunc(){
sbVideo.removeEventListener("update", updateVideoFunc);
GETData();
}
function updateAudioFunc(){
sbAudio.removeEventListener("update", updateAudioFunc);
GETData();
}
function sourceopen(e){
sourceBuffer = this.sourceBuffers;
sourceBuffer[trackName] = ms.addSourceBuffer('video/mp4;codecs=avc1.42c01e');
sbVideo =sourceBuffer[trackName];
sbVideo.addEventListener('updateend', updateVideoFunc);
sourceBuffer = this.sourceBuffers;
sourceBuffer[trackName2] = ms.addSourceBuffer('audio/mp4;codecs="mp4a.40.2');
sbAudio =sourceBuffer[trackName2];
sbAudio.addEventListener('updateend', updateAudioFunc);
GETData();
}
var fileIndex = 0;
function appendVideo()
if(sbVideo.updating == false)
{
sbVideo.appendBuffer(new Uint8Array(receiveBuffer[fileIndex]));
sbVideo.addEventListener("updateend",updateVideoFunc, false);
fileIndex++;
}
}
function appendAudio(){
if(sbAudio.updating == false && sbVideo.updating == false){
sbAudio.appendBuffer(new Uint8Array(receiveBuffer[fileIndex]));
sbAudio.addEventListener("updateend",updateAudioFunc, false);
fileIndex++;
}
}
此代码在使用非实时源代码时有效,但不适用于实时代码。我错过了什么?
发布于 2016-09-22 21:24:05
默认情况下,视频的播放头始终为0。但是,在追加直播流数据时,数据范围不会从0开始,而是从直播流所在的位置开始。所以你要么需要使用SourceBuffer的timestampOffset,要么简单地查找(也就是设置currentTime)到数据开始的地方。
您还可以看到如何在开源播放器(如Shaka或dash.js )中实现这一点,也可以使用现成的解决方案,如Bitmovin Player或JWPlayer。
https://stackoverflow.com/questions/39550246
复制相似问题