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
#*****
+