diff --git a/settings/all.xml b/settings/all.xml index 3677ab9..60b3376 100644 --- a/settings/all.xml +++ b/settings/all.xml @@ -39,4 +39,6 @@ mp2 256k + + 1 diff --git a/streamproxy b/streamproxy new file mode 100755 index 0000000..d8dd87b --- /dev/null +++ b/streamproxy @@ -0,0 +1,106 @@ +#!/bin/bash + +#****F* ffmpeg/streamproxy **************************************************** +# +# NAME +# streamproxy - проксирование аудиопотока на Icecast +# +# VERSION +# 1.0 +# +# DESCRIPTION +# Сценарий принимает аудиопоток с оборудования, по UDP или TCP, +# и ретранслирует поток на сервер радиовещания icecast для +# получения сигнала другими программами и прослушивания аудио конечным +# пользователем. +# +# Проксирование будет доступно только при задании в файле настроек опции +# 1 +# +# USAGE +# streamproxy <файл настроек> +# +# ARGUMENTS +# * <файл настроек> - xml-файл с описанием входящего и выходящего потоков и +# правилами фрагментирования записей. +# +#****************************************************************************** + +#****f* streamproxy/readXML +# +# NAME +# readXML - получение значения опции из файла настроек +# +# USAGE +# readXML <опция> <файл> +# +# ARGUMENTS +# * опция - имя опции +# * файл - xml-файл с настройками +# +# RESULT +# Значение параметра при наличии искомой опции в xml-файле или значение по +# умолчанию, которое задаётся при инициализации переменной config. +# +# SOURCE +# +readXML() { + \grep -oPm1 "(?<=<$1>)[^<]+" "$2" +} +#***** + +#****f* streamproxy/proxyCMD +# +# NAME +# proxyCMD - создание команды для передачи аудиопотока +# +# DESCRIPTION +# Процедура составляет команду ffmpeg на основе конфигурационного файла +# +# RESULT +# Команда ffmpeg, которую можно передать на выполнение. +# +# SOURCE +# +proxyCMD() { + STREAM=$(readXML stream "$XML") + ICECAST="$(readXML icecast $XML)/$(readXML mountpoint $XML)" + ICENAME="$(readXML channel_name $XML)" + ICEDESC="$(readXML channel_descr $XML)" + FORMAT="$(readXML input_format $XML)" + + echo ffmpeg -i "$STREAM" \ + -f "$FORMAT" \ + -legacy_icecast 1 \ + -content_type audio/mpeg \ + -ice_name "$ICENAME" \ + -ice_description "$ICEDESC" \ + icecast://source:$ICECAST +} +#***** + +#****t* streamproxy/main +# +# NAME +# streamproxy +# +# SOURCE +# + +#Проверка аргументов +if [ -z $1 ]; then + echo "USAGE: $0 " + exit 1 +fi + +#Файл настроек +XML="$1" + +#Проверка использования прокси +PROXY=$(readXML proxy "$XML") + +if [ "$PROXY" == 1 ]; then + proxyCMD +fi +#***** + diff --git a/streamsaver b/streamsaver index 37df644..e3ddda6 100755 --- a/streamsaver +++ b/streamsaver @@ -181,18 +181,20 @@ makeCMD() { # enableOption output_format -c %% #ICECAST - enableOption input_channel -map %% - enableOption audio_bitrate -ab %% - enableOption channel_name \ - -legacy_icecast 1 \ - -content_type audio/mpeg \ - -ice_name %% + if [ ! -z ${config[icecast]} ]; then + enableOption input_channel -map %% + enableOption audio_bitrate -ab %% + enableOption channel_name \ + -legacy_icecast 1 \ + -content_type audio/mpeg \ + -ice_name %% - enableOption channel_descr \ - -ice_description %% + enableOption channel_descr \ + -ice_description %% - enableOption icecast \ - icecast://source:${config[password]}@${config[icecast]}/${config[mountpoint]} + enableOption icecast \ + icecast://source:${config[password]}@${config[icecast]}/${config[mountpoint]} + fi # АРХИВ enableOption input_channel -map %% @@ -248,6 +250,7 @@ makeCMD() { typeset -A config config=( + [proxy]="0" [stream]="" [icecast]="" [password]="" @@ -256,7 +259,7 @@ config=( [channel_descr]="" [mountpoint]="" [cmd]="ffmpeg" - [input_format]="mpegts" + [input_format]="" [input_channel]="" [archive_dir]="" [archive_time]="" @@ -265,8 +268,8 @@ config=( [slices_time]="" [slices_log]="" [filename_prefix]="%Y-%m-%d_%H:%M:%S" - [filename_suffix]="mp2" - [output_format]="mp2" + [filename_suffix]="mp3" + [output_format]="mp3" [audio_bitrate]="256k" ) #***** @@ -330,6 +333,8 @@ config=( # mp2 # # 256k +# +# 1 # # # SOURCE @@ -362,7 +367,13 @@ readXML "$SETTINGS" mkdir -p ${config[archive_dir]} mkdir -p ${config[slices_dir]} +if [ ${config[proxy]} == 1 ]; then + config[stream]="${config[icecast]}/${config[mountpoint]}" + config[icecast]="" +fi + #Создание команды оцифровки сигнала -makeCMD +makeCMD | sh #***** +