Как мне преобразовать поток h.264 в MP4 с помощью ffmpeg и передать результат клиенту? - PullRequest
2 голосов
/ 01 июня 2019

У меня есть поток видео в кодировке h.264 на моем сервере (node.js), и я хочу использовать ffmpeg для преобразования его в поток MP4.Затем я хочу передать этот поток MP4 от дочернего процесса клиенту, используя ответ HTTP-сервера, который я настроил.Я очень смущен всеми опциями ffmpeg и не знаю, как передать вывод дочернего процесса в ответ HTTP.

Я пробовал несколько комбинаций опций ffmpeg, но видео не даетиграть в браузере (или показать какие-либо признаки получения данных), и я не знаю, правильно ли я конвертирую его в MP4.Я также не уверен, что я правильно это делаю.Я не получаю никаких ошибок ни на сервере, ни на стороне клиента.

HTML:

<video id="videoPlayer" poster="assets/logo_25.png" autoplay muted controls>
    <source src="http://localhost:3001" type="video/mp4">
</video>

Узловой сервер:

const videoPORT = 3001;
var videoServer = http.createServer(function (req, res) {
    var videoIncommingPORT = 11111;
    var videoSocket = dgram.createSocket('udp4');

    videoSocket.on('listening', function () {
        var address = videoSocket.address();
    });

    videoSocket.on('message', function (message, remote) {
        var child_converter = spawn('ffmpeg', ['-fflags', '+genpts', '-r', '25', '-i', `${message}`, '-vcodec', 'libx264', '-f', 'mp4', 'copy', '-']);//convert h.264 to MP4 container

        child_converter.stdout.pipe(res);//pipe to response

        child_converter.stdout.on('data', (data) => {
            console.log(data);
        });
        child_converter.stderr.on('data', (data) => { 
            console.log(data); 
        });

    });
    videoSocket.bind(videoIncommingPORT);
});
videoServer.listen(videoPORT);
...