пряма трансляция через VLC axis RTSP

И так как обычно немного теории , для понимания процесса .

Частота кадров — иными словами количество кадров в секунду  , к примеру в традиционно киноматографе используют 24 кадра в секунду , системы PAL и SECAM используют 25 кадров в секунду , система NTSC использует 30 кадров в секунду (некоторые современные камеры могут снимать до 125 кадров в секунду , спец камеры до 1000 кадров в секунду)

Битрейт или ширина видеопотока , к примену DVD (в среднем) 5 mb/s , HDTV  (в среднем) 10 mb/s

RTSP — потоковый протокол реального времени — он не выполняет сжатия , он выполняет только доставку видео в реальном времени . Это транспортный протакол с корректировкой ошибок . Если быть точно это протакол управления работающий вместе с RTP (Real Time Protocol) для передачи содержимого клиентам (работающий как с TCP так и с UDP (он менее надежен , так как не предусмотрен механизм корректировок ошибок) — связан с TCP-портом 554 ). То есть RTSP – это просто набор команд для управления видеопотоком.

MJPEG — покадровый метод видеосжатия .

H.264 — хороший метод видеосжатия , с сохранением высокого качества видео .

FLASH FLV — основным преимуществом формата flv является то, что при нормальном качестве, фильм будет иметь вес от 250 до 400 Мб .

И мы будет через наш BSD сервер гонять видео как через unicast  так и через multicast , стоит отметить что для multicast необходимо заставить наш сервер работать с ним

IGMP — это регистрация пользователя в группу рассылки multicast.

PIM — протокол используется между маршрутизаторами для обмена и передачи мультикаст маршрутов .

IGMP spoofing — процесс отслеживания сетевого трафика igmp (обычно используется на коммутаторах), также выполняет функции предотвращение бродкаст трансляций .

 

И так если же вам необходимо маршрутизировать  multicast (к примеру с одно сетевой карты на другую) вам необхоимо выполнить след. :

#kldload ip_mroute

 

или пересобрать ядро с опцией

 

options MROUTING

#cd /usr/src #make buildkernel KERNCONF=MYKERNEL #make installkernel KERNCONF=MYKERNEL #reboot

Или же воспользоватся программаой igmpproxy или udpx

Далее можно смотреть

#netstat -sp igmp

stream_h264_mpeg2

vlc -vvvv --file-logging --logmode text --logfile /var/log/vlcd.log --loop --http-reconnect rtsp://root:root@46.174.XXX/axismedia/media.amp?videocodec=h264?streamprofile=MY_NEW --video --sout \
'#std{access=http,mux=ts,dst=XXXXX:8000}'

access=http — это говорит о том , какой транспортный протокол будет использоваться (можно udp)

mux=ts  — это говорит о формате , который будет получен на выходе (к примеру ts говорит о том что будет MPEG2  это достаточно хорошее качество , но при этом если гнать его потоком  необходимо от 8 до 12 mb/s канал .)

И далее все это дело вставить в MRL  —  http://XXXXX:8000

и получите видео поток

stream_h264_WMP

vlc -vvvv --file-logging --logmode text --logfile /var/log/vlcd.log --loop --http-reconnect rtsp://root:root@46.XXX/axis-media/media.amp?videocodec=h264?streamprofile=MY_NEW --rtsp-caching=1200 --udp-caching=3000 --video --http-caching=1200 --sout \
'#std{access=mmsh,mux=asfh,dst=:8001}'
 

 vlc -vvvv --http-reconnect rtsp://root:root@46.XXX/axis-media/media.amp --video --no-sout-audio --sout \
'#std{access=http,mux=asf,dst=127.0.0.1:8001}'

Если к примеру необходимо направить поток мультикаста через какой определенный интерфейс — делаем след :

#route add -inet 239.255.1.1/32 -interface ng1

Более удобно и гибше работать консолью vlc :

#cvlc -I telnet

#vlc -l | grep -i interface - посмотрим что у нас собранно :

VLC media player 1.1.13 The Luggage (revision exported)
  ggi                    General Graphics Interface video output
  lua                    Interfaces implemented using lua scripts
  lua                    Interfaces implemented using lua scripts
  lua                    Interfaces implemented using lua scripts
  lua                    Lua Interface Module (shortcuts)
  lua                    Lua Playlist Parser Interface
  dummy                  Dummy interface function
  ncurses                Ncurses interface
  qt4                    Qt interface
  qt4                    Qt interface
  motion                 motion control interface
  signals                POSIX signals handling interface
  oldrc                  Remote control interface
  hotkeys                Hotkeys management interface
  gestures               Mouse gestures control interface
  oldtelnet              VLM remote control interface
  oldhttp                HTTP remote control interface

Значит можно посмотреть слушается ли порт 4212

#sockstat

Если да , то можно смело  telnet консоль

#telnet localhost 4212

 Пароль по умолчанию — admin

#cvlc —daemon — запустить как демон .

 #cvlc -I telnet —daemon

 

new cam1 broadcast
setup cam1 input http://XXXX:800
setup cam1 option http-reconnect
setup cam1 output #mosaic-bridge{id=1,height=400,width=640,vfilter=alphamask{mask=/usr/home/cone.png}},select=video,dst=bridge-out{id=1}
setup cam1 enabled

new cam2 broadcast
setup cam2 input http://XXXX:809
setup cam2 option http-reconnect
setup cam2 output #mosaic-bridge{id=2,height=400,width=640,vfilter=alphamask{mask=/usr/home/cone.png}},select=video,dst=bridge-out{id=2}
setup cam2 enabled

new file1 broadcast
setup file1 input fake://
setup file1 option fake-file=/usr/images/3.jpg
setup file1 option fake-file-reload=5
setup file1 option fake-aspect-ratio="16:9"
setup file1 option fake-width=640
setup file1 option fake-height=400
setup file1 output #mosaic-bridge{id=3,height=400,width=640,vfilter=alphamask{mask=/usr/home/cone.png}},select=video,dst=bridge-out{id=3
}
setup file1 enabled

new file2 broadcast
setup file2 input fake://
setup file2 option fake-file=/usr/home/4.jpg
setup file2 option fake-file-reload=5
setup file2 option fake-aspect-ratio="16:9"
setup file2 option fake-width=640
setup file2 option fake-height=400
setup file2 output #mosaic-bridge{id=4,height=400,width=640,vfilter=alphamask{mask=/usr/home/cone.png}},select=video,dst=bridge-out{id=4
}
setup file2 enabled


new background broadcast enabled
setup background input fake://
setup background option fake-file=/usr/mire.jpg
setup background option fake-aspect-ratio="16:9"
setup background option fake-width=1280
setup background option fake-height=800
setup background option mosaic-width=1280
setup background option mosaic-height=800
setup background option mosaic-keep-picture
setup background option mosaic-rows=2
setup background option mosaic-cols=2
setup background option mosaic-position=1
setup background option mosaic-order=1,3,2,4
setup background output #transcode{sfilter=mosaic,vcodec=mp2v,vb=10000,scale=1}:bridge-in:standard{access=http,mux=ts,dst=XXXX:1234}

control background play
control cam1 play
control cam2 play
control file1 play
control file2 play

Варианты могут быть разные  :

setup background output #transcode{sfilter=mosaic,vcodec=mp2v,vb=10000,scale=1}:bridge-in{delay=400,id-offset=100}:standard{access=rtp,mux=ts,url=XXXX:1234}

Вот такие сложные вещи можно делать при помощи консоли , далее все это можно сохранить как конфигурационый файл , и просто кормить его VLC , в итоге у нас получилось запихнуть картинку на задний фон , разделить экран на 4 части  2 части будет занимать 2 видео потока , остальные 2 части будут разбиты на 2 картинки .

Остается открытый вопрос утечки памяти .