2015-12-02 40 views
12

'dan sonra çalışmıyor. Şu anda bir .webm video dosyasını socket.io aracılığıyla istemciye aktarıyorum (şu anda Chrome'u istemci olarak kullanıyorum).SourceBuffer'a ekleyen MediaSource, ilk kez

SourceBuffer ilk Uint8Array çalışıyor ekleme ama çalışmıyor başka olanları ekleme ve aşağıdaki hata atıyor: Uncaught DOMException: Failed to execute 'appendBuffer' on 'SourceBuffer': The HTMLMediaElement.error attribute is not null.

Benim geçerli kod:

'use strict'; 

let socket = io.connect('http://localhost:1337'); 

let mediaSource = new MediaSource(); 
let video = document.getElementById("player"); 
let queue = []; 
let sourceBuffer; 

video.src = window.URL.createObjectURL(mediaSource); 

mediaSource.addEventListener('sourceopen', function() { 
    sourceBuffer = mediaSource.addSourceBuffer('video/webm; codecs="vorbis,vp8"'); 

    socket.on("video", function(data) { 
     let uIntArray = new Uint8Array(data); 

     if (!sourceBuffer.updating) { 
      sourceBuffer.appendBuffer(uIntArray); 
     } else { 
      queue.push(data); 
     } 
    }); 
}); 

Sunucu tarafında kod (snippet)

io.on('connection', function(socket) { 
      console.log("Client connected"); 

      let readStream = fs.createReadStream("bunny.webm"); 
      readStream.addListener('data', function(data) { 
       socket.emit('video', data); 
      }); 
     }); 

Webkit denetimlerini de kaldırdım çünkü bu yalnızca Chromium tarayıcılarda çalışır.

+0

Sunucu kodunuzu da gönderebilir misiniz? – cviejo

+0

'u kurmayı ve test etmeyi kolaylaştıracağından, sunucu kodunun benim için bir istemci hatası gibi göründüğünden gereksiz olduğunu düşünmüştüm ama doğru bir şekilde yardımcı olabilirsiniz. – Cludch

+0

Sonunda hata yok. Dosyanın kendisiyle ilgili bir sorun olabilir. Bir "bunny.webm" dosyası kullandığınızdan ve [bu gönderi] (http://stackoverflow.com/questions/27309027/stream-video-through-socket-to-html5-video-tag) ile benzer bir sorun bulunduğundan http://www.webmfiles.org/demo-files adresinden indirilen dosyalar ... dosyayı veya başka bir dosyayı yeniden biçimlendirmeyi zaten denediniz mi? – cviejo

cevap

2

Sana http://w3c.github.io/media-source/#widl-SourceBuffer-remove-void-double-start-unrestricted-double-end

yardımcı olmadığını bana bildirin remove() işlevi, bkz arabelleği serbest olduğunu düşünüyorum.

+0

İlk appendBuffer'dan sonra bu yöntemi çağırmayı denedim ancak "InvalidAccessError" hatası alıyorum çünkü mediaSource.duration işlevi "NaN" - https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer/remove – Cludch

+0

Bu süreyi kendiniz ayarlamanız gerekebilir: https://developer.mozilla.org/en-US/docs/Web/API/MediaSource/duration –

+0

Kaldırmayı ne zaman aramalıyım? Bunu konsol üzerinden aradım ama yine de yeni bir yığın ekleyemedim. – Cludch

İlgili konular