Я использую следующую примерную программу для добавления медиафайлов, но получаю« Uncaught InvalidStateError: Была сделана попытка использовать объект, который не является или не используется, «ошибка в первый момент, когда он попадает в код» mediaSource.sourceBuffers [0] .appendBuffer (mediaSegment); ». Я использую Chrome 31.0.1650.57. Может кто-нибудь посоветовать мне решить эту проблему?Не удалось добавить сегменты с помощью Media Source API, получить «InvalidStateError: попытка использовать объект, которого нет или нет, можно использовать
https://github.com/jbochi/media-source-playground/blob/master/test.html
Я сделал следующие изменения, добавляемых файлов.
var buffer_len = 0;
function HaveMoreMediaSegments(){
//return false; //return buffers.length > 0;
return buffers.length > buffer_len;
}
//var GetNextMediaSegment = GetInitializationSegment;
function GetNextMediaSegment(){
var buffer = buffers[buffer_len];
buffers = buffers.slice(1);
buffer_len = buffer_len + 1;
return buffer;
}
И изменил
mediaSource.sourceBuffers [0] .append (mediaSegment);
до
mediaSource.sourceBuffers [0] .appendBuffer (mediaSegment);
И
sourceBuffer.append (initSegment);
до
источникBuffer.appendBuffer (initSegment);
Как метод append не работает в моей среде.
И я использую sourceopen вместо webkitsourceopen внутри window.setTimeout().
mediaSource.addEventListener ('sourceopen', onSourceOpen.bind (это, видео));
Если updateend срабатывает, и в очереди нет ничего, а затем вы добавляете что-то в очередь, то он никогда не будет добавлен в sourcebuffer. – Sean
Несомненно. Итак, 'queue.push = function (buffer) {if (! SourceBuffer.updating) {sourceBuffer.appendBuffer (buffer)} else {Array.prototype.push.call (this, buffer)}}' –