И так, появилась нехитрая задача - есть видео поток, который надо отдавать в другой офис, но в исходном состоянии он занимает порядка 30Мбит/с, что довольно объемно, а значит надо его пережать.
Поиск в гугле посоветовал использовать VLC-плеер для этого.
Вариантов исходящего вещания много, как unicast, так и multicast. Я остановился на вещании по HTTP, т.к. иногда надо подключить несколько клиентов, а поднимать multicast-роутинг по всей сети сейчас немного несподручно, хотя идея такая не покидает.
Было написано несколько скриптов:
Базовый
1 - ссылка на оригинальную трансляцию
2 - порт, по которому будет доступна пережатая трансляция
3 - логин
4 - пароль
Логин и пароль не обязательны, но служат для минимальной защиты трансляций от несанкционированного доступа
Минусом скрипта было то, что если отключиться от сессии то его работы прекращалась, для этого было написано ещё два скрипта на базе nohup
start.sh
stop.sh
Поиск в гугле посоветовал использовать VLC-плеер для этого.
Вариантов исходящего вещания много, как unicast, так и multicast. Я остановился на вещании по HTTP, т.к. иногда надо подключить несколько клиентов, а поднимать multicast-роутинг по всей сети сейчас немного несподручно, хотя идея такая не покидает.
Было написано несколько скриптов:
Базовый
Как видно из текста скрипта ему передается 4 параметра#!/bin/sh# Script for VLC Streaming by Dmitry Bidzilya @ 2015# input parametrs#1st - tunner URL#2nd - output port# output stream optionsthreads="1"vcodec="h264"vb="2000"width="854"hieght="480"acodec="mp3"ab="128"mux="ts"venc="x264{profile=baseline,preset=veryfast}"# example# vlc --sout="#transcode{vcodec=mp4v,vb=1500,acodec=mp3,ab=192,channels=2}:standard{access=http{user=user,pwd=pass},mux=ts,dst=":8080/",name=test}"vlc --intf dummy --overlay --drop-late-frames --skip-frames --sout-transcode-high-priority --sout-transcode-hurry-up --sout-http-user="$3" --sout-http-pwd="$4" "$1" --sout="#transcode{threads="$threads",vcodec="$vcodec",vb="$vb",venc="$venc",width="$width",height="$height",acodec="$acodec",ab="$ab",channels=2}:standard{access=http,mux="$mux",dst=":$2",name=test}"
1 - ссылка на оригинальную трансляцию
2 - порт, по которому будет доступна пережатая трансляция
3 - логин
4 - пароль
Логин и пароль не обязательны, но служат для минимальной защиты трансляций от несанкционированного доступа
Минусом скрипта было то, что если отключиться от сессии то его работы прекращалась, для этого было написано ещё два скрипта на базе nohup
start.sh
В данном скрипте передается 3 параметра, первые два такие же, а третий это идентификационное имя, оно используется для остановки перекодирования именно данной трансляции#!/bin/sh# Script for VLC Streaming by Dmitry Bidzilya @ 2015# input parametrs#1st - tunner URL#2nd - output port# output stream optionsthreads="1"vcodec="h264"vb="2000"width="854"hieght="480"acodec="mp3"ab="128"mux="ts"venc="x264{profile=baseline,preset=veryfast}"# example# vlc --sout="#transcode{vcodec=mp4v,vb=1500,acodec=mp3,ab=192,channels=2}:standard{access=http{user=user,pwd=pass},mux=ts,dst=":8080/",name=test}"nohup vlc --intf dummy --overlay --drop-late-frames --skip-frames --sout-transcode-high-priority --sout-transcode-hurry-up "$1" --sout="#transcode{threads="$threads",vcodec="$vcodec",vb="$vb",venc="$venc",width="$width",height="$height",acodec="$acodec",ab="$ab",channels=2}:standard{access=http,mux="$mux",dst=":$2",name="$3"}" &
stop.sh
#!/bin/sh
for i in $(ps -eLf | grep "$1" | awk '{print $2}')
do
kill -9 $i
doneНичего сложного и достаточно функционально, параметры исходящего потока можно удобно менять в параметрах обоих скриптов, с данными настройками пережатый поток занимает около 5МБит/с
Комментариев нет:
Отправить комментарий