0
我有一些困難與socket.io和節點流視頻文件。我的視頻文件位於我的服務器上,我正在使用fs模塊將其讀入一個readStream。我是他們將大塊數據傳遞給客戶端的媒體源,並將其輸入html 5視頻標籤。串流視頻與套接字io
儘管客戶端正在接收塊(我正在記錄它們),並且我正在將塊附加到媒體源的緩衝區,但沒有任何內容顯示在視頻標籤中。
任何人都知道如何解決這個問題?
這裏是我的代碼:
客戶端:
var mediaSource = new MediaSource();
var mimeCodec = 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"';
document.getElementById('video').src = window.URL.createObjectURL(mediaSource);
mediaSource.addEventListener('sourceopen', function(event) {
var sourceBuffer = mediaSource.addSourceBuffer(mimeCodec);
console.log(sourceBuffer);
socket.on('chunk', function (data) {
if(!sourceBuffer.updating){
sourceBuffer.appendBuffer(data);
console.log(data);
}
});
socket.emit('go',{})
});
服務器端: VAR流= fs.createReadStream(window.currentvidpath);
socket.on('go', function(){
console.log('WENT');
stream.addListener('data',function(data){
console.log('VIDDATA',data);
socket.emit('chunk',data);
})
})
非常感謝。
您確定塊沒有以Base64的形式到達嗎?我假設,因爲socket.io使用JSON,所以任何二進制數據在被髮送之前都會被編碼......但是我可能會混淆東西。你應該檢查。 – Myst
@Myst - 如果以這種方式設置,webSocket和socket.io具有二進制模式。 – jfriend00
@ jfriend00,很高興知道。但是,我沒有看到在OP的服務器代碼中發佈了......如果服務器是這樣設置的,那可能會更好,因爲Base64會增加開銷(編碼,解碼和帶寬)。 – Myst