Динамически загружать субтитры в видео - PullRequest
0 голосов
/ 30 мая 2018

Вот ситуация: Сервер получает поток файлов srt .Сервер преобразует поток в формат vtt .Результирующий поток затем помещается в буфер, который затем отправляется клиенту через io.socket.

Вот код сервера :

self.expressApp.post("/upload", function (req, res) {
var busboy = new Busboy({ headers: req.headers });
        busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {
            var subchunks = [],
                sub = file.pipe(srt2vtt());
            sub.on('data',function(buffer){
                subchunks.push(buffer);
            });
            sub.on('end',function(){
                var buffer = Buffer.concat(subchunks);
                socket.emit('Subtitles',buffer);
            });
        });
        busboy.on('finish', function() {
            res.writeHead(200, { 'Connection': 'close' });
            res.end();
        });
        return req.pipe(busboy);
});

Вот код клиента :

var subobj = new Blob([new Uint8Array(payload)],{type: "text/vtt"}),
    url = (URL || webkitURL).createObjectURL(subobj),
    track = document.createElement("track");                
    track.kind = "captions";
    track.label = "English";
    track.srclang = "en";
    track.src = url;
    track.addEventListener("load", function() {
        this.mode = "showing";
        videoElement.textTracks[0].mode = "showing";
    });
    videoElement.append(track);

Почему этоне работает.Любая помощь приветствуется.

Спасибо.

1 Ответ

0 голосов
/ 31 мая 2018

Stackoverflow мертв!

Вот решение.

Что я делал не так?

Я былотправка потока vtt в виде двоичного массива, а не плановой текстовой строки.

Код на стороне сервера:

self.expressApp.post("/upload", function (req, res) {
        var busboy = new Busboy({ headers: req.headers });
        busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {
            var subchunks = "",
                sub = file.pipe(srt2vtt());
            sub.on('data',function(buffer){
                subchunks += buffer.toString('utf8');
            });
            sub.on('end',function(){
                socket.emit('Subtitles',subchunks);
            });
        });
        busboy.on('finish', function() {
            res.writeHead(200, { 'Connection': 'close' });
            res.end();
        });
        return req.pipe(busboy);
});

Код на стороне клиента:

var subobj = new Blob([new Uint8Array(payload)],{type: "text/vtt"}),
    url = (URL || webkitURL).createObjectURL(subobj),
    track = document.createElement("track");                
track.kind = "captions";
track.label = "English";
track.srclang = "en";
track.src = url;
videoElement.append(track);
track.mode = "showing";
videoElement.textTracks[0].mode = "showing";
...