Я делаю модуль для Волшебное зеркало , который работает на RPi. Предполагается, что модуль позволит пользователю выбрать видеофайл на своем мобильном телефоне, начать чтение файла и отправить поток обратно в HTML-тег видео на волшебном зеркале. Это больше похоже на отражение / трансляцию видео с мобильного устройства на волшебное зеркало (rpi). Фреймворк основан на Nodejs.
В настоящее время я пытаюсь прочитать локальный файл и отправить поток клиенту.
Я использую следующий код для сервера:
module.exports = NodeHelper.create({
socketNotificationReceived: function(notification, payload) {
var self = this;
switch(notification) {
case "INITIATEDEVICES":
var readStream = fs.createReadStream("./modules/MMM-MP4Player/video.mp4");
readStream.addListener('data', function(data){
self.sendSocketNotification('Video_File',data);
});
break;
}
}
});
Следующий код для клиента:
Module.register("MMM-MP4Player",{
start: function(){
window.URL = window.URL || window.webkitURL;
window.MediaSource = window.MediaSource || window.WebKitMediaSource;
if(!!! window.MediaSource){
console.log('MediaSource API is not available!');
}
},
getDom: function() {
var self = this;
wrapper = document.createElement("div");
videoElement = document.createElement("video");
videoElement.width = 1280;
videoElement.height = 720;
videoElement.controls = true;
videoElement.autoplay = true;
videoElement.id = self.identifier+"_player";
wrapper.appendChild(videoElement);
setTimeout(function(){
self.mediaSource = new MediaSource();
self.queue = [];
videoElement.src = window.URL.createObjectURL(self.mediaSource);
self.mediaSource.addEventListener('sourceopen', function(e){
self.sourceBuffer = self.mediaSource.addSourceBuffer('video/mp4; codecs="avc1.42E01E,mp4a.40.2"'); // video/webm; codecs="vorbis,vp9"
videoElement.play();
self.sourceBuffer.addEventListener('update', function() {
if (self.queue.length > 0 && !self.sourceBuffer.updating) {
self.sourceBuffer.appendBuffer(self.queue.shift());
}
});
}, false);
self.sendSocketNotification("INITIATEDEVICES");
}, 2000);
return wrapper;
},
socketNotificationReceived: function(notification, payload){
var self = this;
switch(notification){
case "Error": // Universal error handler
break;
case "Video_File":
if (self.sourceBuffer.updating || self.queue.length > 0) {
self.queue.push(new Uint8Array(payload.data));
} else {
self.sourceBuffer.appendBuffer(new Uint8Array(payload.data));
}
break;
}
}
});
Видеоблоки отлично отправляются с сервера и также принимаются клиентом. Просто видео плеер остается пустым. Все предложения приветствуются.
Спасибо.