追加块时如何修复 CHUNK_DEMUXER_ERROR_APPEND_FAILED 错误?
Posted
技术标签:
【中文标题】追加块时如何修复 CHUNK_DEMUXER_ERROR_APPEND_FAILED 错误?【英文标题】:How to fix CHUNK_DEMUXER_ERROR_APPEND_FAILED error when append chunk? 【发布时间】:2019-02-18 14:37:30 【问题描述】:我想创建一个可以播放多种分辨率的视频播放器,所以我必须加载不同编解码器的块。
我尝试附加相同编解码器的块并且它可以工作。所以我尝试使用 changeType() 但是当我在视频元素中附加新的编解码器块时,我发现了这个错误“CHUNK_DEMUXER_ERROR_APPEND_FAILED: Append: stream parsing failed.”。
const myMediaSource = new MediaSource();
var videoSourceBuffer;
var quality=480,qlast=480;
var currentSegment = 0;
var loading = false;
function videos()
myMediaSource.addEventListener('sourceopen', sourceOpen, once: true);
function sourceOpen()
setInterval(feedVideo, 500);
function feedVideo()
if (!loading)
try
if (myMediaSource.sourceBuffers.length == 0)
videoSourceBuffer = myMediaSource.addSourceBuffer('video/mp4; codecs="avc1.64001E,mp4a.40.2"');
appendSegment("cinit.mp4", 0);
first = true;
else
if (qlast != quality)
videoSourceBuffer = myMediaSource.sourceBuffers[0];
if (quality == 1080)
type = 'video/mp4; codecs="avc1.640028,mp4a.40.2"';
else if (quality == 720)
type = 'video/mp4; codecs="avc1.64001F,mp4a.40.2"';
else if (quality == 480)
type = 'video/mp4; codecs="avc1.64001E,mp4a.40.2"';
else if (quality == 360)
type = 'video/mp4; codecs="avc1.64001E,mp4a.40.2"';
videoSourceBuffer.changeType(type);
videoSourceBuffer.mode = "segments";
qlast = quality;
if (!first)
appendSegment("c" + currentSegment + ".m4s", currentSegment);
else
first = false;
catch (error)
console.log('Error! ' + error);
function appendSegment(file, resourcesIndex)
loading = true;
fetch("http://mysite/video/" + quality + "p/" + file).then(function (response)
return response.arrayBuffer();
).then(function (videoData)
videoSourceBuffer.appendBuffer(videoData);
videoSourceBuffer.addEventListener('updateend', function ()
loading = false;
, once: true );
);
我该如何解决?
【问题讨论】:
【参考方案1】:您几乎可以肯定不需要在这里使用changeType
,因为它通常用于更改编解码器(例如 avc -> hevc)或容器(例如 mp4 -> webm),而您只是在同一编解码器和容器。
问题几乎可以肯定是您没有在质量更改上附加初始化段 - 您只为第一个质量级别执行此操作。
修复:在每个新质量的第一个媒体段之前插入适当的初始化段。
【讨论】:
以上是关于追加块时如何修复 CHUNK_DEMUXER_ERROR_APPEND_FAILED 错误?的主要内容,如果未能解决你的问题,请参考以下文章