1

メディアソースを使用してライブ 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++;
	}
}

このコードは、ライブではないソースを使用しているときに機能しましたが、ライブ コードでは機能しませんでした。私は何が欠けていますか?

4

1 に答える 1

0

デフォルトでは、ビデオの再生ヘッドは常に 0 です。ただし、ライブ ストリームのデータを追加する場合、データ範囲は 0 ではなく、ライブ ストリームのどこからでも始まります。そのため、SourceBuffer の timestampOffset を使用するか、単純にデータの開始位置をシーク (つまり、currentTime を設定) する必要があります。

また、これがShakadash.jsなどのオープン ソース プレーヤーでどのように行われるかを確認することもできます。また、 Bitmovin Playerや JWPlayerなどの市販のソリューションを使用することもできます。

于 2016-09-22T13:24:05.477 に答える