2013-05-09 14 views
10

Używam Node.js do streamowania za pośrednictwem Websocket w czasie rzeczywistym webm wideo do strony internetowej, która będzie odtwarzać go w tagu. Poniżej znajduje się kod zarówno z serwerem a klientem:Strumień wideo przez Websocket do <video> tag

SERVER:

var io = require('./libs/socket.io').listen(8080, {log:false}); 
var fs = require('fs'); 
io.sockets.on('connection', function (socket) 
{ 
console.log('sono entrato in connection'); 
var readStream = fs.createReadStream("video.webm"); 

socket.on('VIDEO_STREAM_REQ', function (req) 
{ 
    console.log(req); 

    readStream.addListener('data', function(data) 
    { 
     socket.emit('VS',data); 
    }); 

}); 
}); 

KLIENT:

<html> 
<body> 

<video id="v" autoplay> </video> 

<script src='https://localhost/socket.io/socket.io.js'></script> 
<script> 
window.URL = window.URL || window.webkitURL; 
window.MediaSource = window.MediaSource || window.WebKitMediaSource; 

if(!!! window.MediaSource) 
{ 
    alert('MediaSource API is not available!'); 
    return; 
} 

var mediaSource = new MediaSource();  
var video = document.getElementById('v'); 

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

mediaSource.addEventListener('webkitsourceopen', function(e) 
{ 
    var sourceBuffer = mediaSource.addSourceBuffer('video/webm; codecs="vorbis,vp8"'); 
    var socket = io.connect('http://localhost:8080'); 

    if(socket) 
     console.log('Library retrieved!'); 

    socket.emit('VIDEO_STREAM_REQ','REQUEST'); 

    socket.on('VS', function (data) 
    { 
     console.log(data); 
     sourceBuffer.append(data); 
    }); 
}); 

</script> 


</body> 
</html> 

używam Chrome 26 i dostaję ten błąd: „Uncaught Błąd: InvalidAccessError: DOM Exception 15 ". Wygląda na to, że typ bufora podawanego do metody append jest nieprawidłowy. Próbowałem już przekonwertować go na Blob, Array i Uint8Array, ale bez powodzenia.

Odpowiedz

5

Twój przykład zawiera tylko kod, który jest pokazany na renderowane stronie stąd: http://html5-demos.appspot.com/static/media-source.html

sprawdzić kod źródłowy, linia 155 jest to, czego brakuje:

var file = new Blob([uInt8Array], {type: 'video/webm'}); 

Więc trzeba powiedz Blobowi typ zawartości, a następnie podaj bufor za pomocą Uint8Array (patrz linia 171):

sourceBuffer.append(new Uint8Array(e.target.result)); 
+0

Czy media pośrednik może współpracować z web rtc? –

+0

Dlatego firma SO zaleca umieszczanie fragmentów kodu; więc 4 lata później, gdy adres URL już nie działa, nadal możemy zrozumieć kod/kontekst ... –

+0

Adres URL nadal działa, a także możesz sprawdzić wersję z pamięci podręcznej, jeśli zmieni się http://webcache.googleusercontent.com /search?q=cache:c1PEM1X38zMJ:html5-demos.appspot.com/static/media-source.html+&cd=1&hl=hu&ct=clnk&gl=hu – Jamesgt

Powiązane problemy