首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建我自己的实时dash播放器

创建我自己的实时dash播放器
EN

Stack Overflow用户
提问于 2016-09-18 02:21:26
回答 1查看 145关注 0票数 1

我正在尝试创建自己的代码来使用媒体源播放实时MPEG-DASH,我成功地获得了数据,但无法在播放器中显示它。

代码语言:javascript
复制
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++;
	}
}

此代码在使用非实时源代码时有效,但不适用于实时代码。我错过了什么?

EN

回答 1

Stack Overflow用户

发布于 2016-09-22 21:24:05

默认情况下,视频的播放头始终为0。但是,在追加直播流数据时,数据范围不会从0开始,而是从直播流所在的位置开始。所以你要么需要使用SourceBuffer的timestampOffset,要么简单地查找(也就是设置currentTime)到数据开始的地方。

您还可以看到如何在开源播放器(如Shakadash.js )中实现这一点,也可以使用现成的解决方案,如Bitmovin Player或JWPlayer。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39550246

复制
相关文章

相似问题

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