2017-11-10 17 views
1

Media Source Extensions API를 사용하는 비디오 플레이어에서 작업 중입니다. Seek 기능을 구현하려면 다음을 수행하십시오.MSE Safari 11이 SourceBuffer 중단 후 SourceBuffer에 세그먼트를 추가하지 않음

SourceBuffer의 abort() 메서드를 사용하여 현재 세그먼트를 중단하고 세그먼트 파서를 다시 설정합니다. 그런 다음 currentTime에 대해 새 세그먼트를 가져온 다음 새 세그먼트를 다운로드하고 SourceBuffer에 추가합니다. 그것 (때문에 SourceBuffer에 새로운 세그먼트를 추가하지의) 노력하고 붙어 중지 비디오를 추구 할 때

if (mediaSource.readyState == "open") { 
    mediaSource.sourceBuffers[0].abort(); 
} 
var nextSegment = getCurrentSegment(vide.currentTime) 
appendToBuffer(nextSegment) 

모든 크롬과 파이어 폭스뿐만 사파리에서 잘 작동합니다.

몇 가지 조사를 한 후 버전 9 이후로 safari MSE bug이라는 것을 알았습니다!

이 문제점의 해결 방법이 있습니까?

답변

0

유일한 해결 방법은 비어있는 abort() 함수를 그루터기로 사용하는 것입니다. Google 샤카 플레이어를 사용하는 것과 같은 방법입니다.

https://github.com/google/shaka-player/blob/d90821a1a5830cdf09caa9707a99c945979ffd0e/lib/polyfill/mediasource.js#L117

var addSourceBuffer = MediaSource.prototype.addSourceBuffer; 
    MediaSource.prototype.addSourceBuffer = function() { 
    var sourceBuffer = addSourceBuffer.apply(this, arguments); 
    sourceBuffer.abort = function() {}; // Stub out for buggy implementations. 
    return sourceBuffer; 
    };