LINUX.ORG.RU

Аналог опции mplayer -fps в vlc (либо вообще решить как-то иначе)

 , ,


1

3

Всем привет

Пишу тулзу для китайских DVR, чтобы можно было потоковое видео на линуксе смотреть. Хитрость в том, чтобы захватить пакет, которым родной клиент вызывает начало передачи потока, а потом можно грабить поток и делать с ним что угодно

Хитрость в том, что поток этот - голый h264 без каких-либо контейнеров. Причём с фреймрейтом какая-то фигня. В общем, если дампить поток в файл, то удалось заставить mplayer нормально воспроизводить так - mplayer -fps 5

Однако конечная цель - это видеостена. Для этого нужен волшебный vlc с mosaic. Я модифицировал свою грабилку, чтобы она слушала на tcp-порте и при подключении начинала релеить поток подключившемуся (если просто слать поток мультикастом, то вклинившийся посередь трансляции плеер офигевает от непонятного потока байт). И даже смог увидеть видео с помощью vlc tcp://127.0.0.1:9001 :demux=h264, однако проблема с фреймрейтом даёт о себе знать - видео бежит вперёд паровоза

Соответственно, вопрос: есть ли в vlc нечто аналогичное -fps в mplayer? Причём так, чтобы без #transcode. Или есть вообще какой-то иной путь решения проблемы?

Заранее спасибо



Последнее исправление: hc (всего исправлений: 1)

то вклинившийся посередь трансляции плеер офигевает от непонятного потока байт

А может, мьюксить на ходу в какой-нибудь контейнер?

i-rinat ★★★★★
()

Попробуй с ffmpeg'ом. Он tcp тоже ловит. Частоту кадров можно задать через '-r FPS' перед входным файлом/потоком, если сам не поймёт.

Если просто проиграть, то вмето ffmpeg бери ffplay.

anonymous
()
ffmpeg \
    -i upper_left.mp4 \
    -i upper_right.mp4 \
    -i http://lower-left.com/stream \
    -i tcp://127.0.0.1:8080 \
    -filter_complex "nullsrc=size=640x480 [base];
    [0:v] setpts=PTS-STARTPTS, scale=320x240 [upperleft];
    [1:v] setpts=PTS-STARTPTS, scale=320x240 [upperright];
    [2:v] setpts=PTS-STARTPTS, scale=320x240 [lowerleft];
    [3:v] setpts=PTS-STARTPTS, scale=320x240 [lowerright];
    [base][upperleft] overlay [tmp1];
    [tmp1][upperright] overlay=x=320 [tmp2];
    [tmp2][lowerleft] overlay=y=240 [tmp3];
    [tmp3][lowerright] overlay=x=320:y=240" \
    -c:v yuv4 -c:a pcm_s16le -f avi pipe:1 | ffplay pipe:0

Вот это вот, при воспроизведении загружает одно ядро моего слабенького процессора на ~70%. Можно не через 'overlay', а через '[h|v]stack'. Говорят, что быстрее, но не проверял. И вместо ссылок у меня файлы были.

anonymous
()
Ответ на: комментарий от arson

Спасибо!

Откровенно говоря, в хелпы к vlc и mplayer вообще заглядывать боюсь

hc
() автор топика
Ответ на: комментарий от i-rinat

Чтобы на ходу фигачить в контейнер, надо заморочиться с декодированием видео в питоноскрипте, чего мне лично делать совсем не хочется. Да и в принципе это верно: если никто не заинтересован в потоке - зачем его тянуть с dvr'а? Меньше трафик, меньше ресурсов тратится

hc
() автор топика
Ответ на: комментарий от anonymous

vlc --rate решило проблему

hc
() автор топика
Ответ на: комментарий от anonymous

Да я vlc'шный mosaic настраивал уже как-то раз, оно работает и особо ничего не грузит :) Надо только настроить снова, а то они изменили формат vlm-conf

hc
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.