space2pacman
@space2pacman
Просто царь.

Как убрать задержку при передачи видео mp4?

При использовании mpegts задержки нет но данный формат не воспроизводиться браузером. При использовании mp4 все хорошо но есть задержка в 6 секунд между отправками данных по tcp сокету.

Как убрать задержку? или что сделать чтобы mpegts воспроизводился в браузере?

Настройки:
mp4:
ffmpeg -f gdigrab -framerate 30 -i desktop -c:v h264 -movflags frag_keyframe+empty_moov -f mp4 tcp://127.0.0.1:4444


mpegts
ffmpeg -f gdigrab -framerate 30 -i desktop -c:v h264 -movflags frag_keyframe+empty_moov -f mpegts tcp://127.0.0.1:4444


Демонстрация задержки(размер файла):
mp4
oy-x7qmvvsr3annqyj9uunfiypy.gif

mpegts
2sthbggsiuitjooaseylbgc0rlo.gif

Код если хотите проверить у себя
let net = require("net");
let fs = require("fs");
let file = fs.createWriteStream("tcp.mp4");
let server = net.createServer(socket => {
	socket.on("data", data => {
		file.write(data);
		//console.log(data)
		console.log(fs.statSync("tcp.mp4").size)
	})
})

server.listen(4444, "127.0.0.1");
  • Вопрос задан
  • 256 просмотров
Решения вопроса 1
ae_ph
@ae_ph
I'm a owl )
Попробуйте сделать так..
Рядом с app.js положите bat файл с этим кодом и стартоните его, у меня мгновенно взлетает.
Я изменил кодек на mpeg4 это основное.
@echo off
color a
start node app.js
set c=ffmpeg
set f=-f gdigrab -framerate 30 -rtbufsize 999999k -thread_queue_size 9999999 -indexmem 9999999 -i desktop -c:v mpeg4 -qscale:v 3 -movflags frag_keyframe+empty_moov -f mp4 tcp://127.0.0.1:4444
%c% %f%
exit


-rtbufsize 1G – Размер буфера 1 гигабайт. По умолчанию FFmpeg захватывает кадры из ввода, а затем выполняет все, что вы ему сказали. Например перекодирует их и сохраняет в выходной файл. По умолчанию, если он получает видеокадр "слишком рано" (в то время как предыдущий кадр еще не закончен), он отбрасывает этот кадр, чтобы он мог поддерживать ввод в реальном времени. Вы можете отрегулировать это, установив параметр rtbufsize, хотя обратите внимание, что если ваш процесс кодирования не успевает, в конечном итоге вы все равно начнете терять кадры (и его использование вообще может вызвать небольшую задержку). Однако может быть полезно указать некоторый размер буфера, в противном случае кадры могут быть потеряны без необходимости.

-thread_queue_size – Устанавливает максимальное количество пакетов в очереди при чтении из файла или устройства. Установка этого значения может заставить ffmpeg использовать отдельный входной поток и читать пакеты, как только они приходят. Может применяется для каждого входа, указанного после него.

-indexmem – максимальная память, используемая для индекса отметки времени (на поток).

Он хоть и староват но достаточно быстрый -c:v mpeg4 -qscale:v 3
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы