创建我自己的现场破折号播放器

Posted

技术标签:

【中文标题】创建我自己的现场破折号播放器【英文标题】:create my own live dash player 【发布时间】:2016-09-17 18:21:25 【问题描述】:

我正在尝试创建自己的代码以使用媒体源播放实时 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++;
	

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

【问题讨论】:

【参考方案1】:

默认情况下,视频的播放头始终为 0。但是,在追加直播数据时,数据范围不会从0开始,而是直播在哪里。因此,您要么需要使用 SourceBuffer 的 timestampOffset,要么只需寻找(即设置 currentTime)到数据开始的位置。

您还可以在Shaka 或dash.js 等开源播放器中查看这是如何完成的,或者您可以使用现成的解决方案,例如Bitmovin Player 或JWPlayer。

【讨论】:

以上是关于创建我自己的现场破折号播放器的主要内容,如果未能解决你的问题,请参考以下文章

MPEG-DASH - 破折号无效!错误

将破折号图嵌入到html中

编写自己的 Javascript 插件来创建音频播放器

UIslider 控件作为 iTunes

python 用于嗅探亚马逊破折号按钮的流量并通过我的chromecast播放歌曲。

当我在我自己创建的应用程序中播放视频时,面对错误“初始化管播放器时出错”