MSE Safari 11 在中止 SourceBuffer 后不会将段附加到 SourceBuffer
MSE Safari 11 don't append Segments to SourceBuffer After Aborting SourceBuffer
我正在使用媒体源扩展开发视频播放器 API。
为了实现 Seek 功能,我执行以下操作:
首先使用 SourceBuffer 的 abort() 方法中止当前段并重置段解析器。
然后为 currentTime 获取新段,然后下载新段并附加到 SourceBuffer。
if (mediaSource.readyState == "open") {
mediaSource.sourceBuffers[0].abort();
}
var nextSegment = getCurrentSegment(vide.currentTime)
appendToBuffer(nextSegment)
在 chrome 和 firefox 中一切正常,但在 safari 中寻找视频时它停止工作并卡住(因为没有将新段添加到 SourceBuffer)。
经过一些研究,我发现它是 safari MSE bug 从版本 9 开始的!
我想知道这个问题有解决方法吗?
它似乎是唯一的解决方法是删除一个空的 abort() 函数,这与 google shaka 玩家使用的方式相同。
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;
};
我正在使用媒体源扩展开发视频播放器 API。 为了实现 Seek 功能,我执行以下操作:
首先使用 SourceBuffer 的 abort() 方法中止当前段并重置段解析器。 然后为 currentTime 获取新段,然后下载新段并附加到 SourceBuffer。
if (mediaSource.readyState == "open") {
mediaSource.sourceBuffers[0].abort();
}
var nextSegment = getCurrentSegment(vide.currentTime)
appendToBuffer(nextSegment)
在 chrome 和 firefox 中一切正常,但在 safari 中寻找视频时它停止工作并卡住(因为没有将新段添加到 SourceBuffer)。
经过一些研究,我发现它是 safari MSE bug 从版本 9 开始的!
我想知道这个问题有解决方法吗?
它似乎是唯一的解决方法是删除一个空的 abort() 函数,这与 google shaka 玩家使用的方式相同。
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;
};