Browse Source

streamproxy: проксирование UDP/TCP-потока на Icecast

master
Maxim Lihachev 9 years ago
parent
commit
00c80b0cbe
  1. 2
      settings/all.xml
  2. 106
      streamproxy
  3. 39
      streamsaver

2
settings/all.xml

@ -39,4 +39,6 @@ @@ -39,4 +39,6 @@
<output_format>mp2</output_format>
<!-- Битрейт аудиофайлов -->
<audio_bitrate>256k</audio_bitrate>
<!-- Использование streamproxy -->
<proxy>1</proxy>
</xml>

106
streamproxy

@ -0,0 +1,106 @@ @@ -0,0 +1,106 @@
#!/bin/bash
#****F* ffmpeg/streamproxy ****************************************************
#
# NAME
# streamproxy - проксирование аудиопотока на Icecast
#
# VERSION
# 1.0
#
# DESCRIPTION
# Сценарий принимает аудиопоток с оборудования, по UDP или TCP,
# и ретранслирует поток на сервер радиовещания icecast для
# получения сигнала другими программами и прослушивания аудио конечным
# пользователем.
#
# Проксирование будет доступно только при задании в файле настроек опции
# <proxy>1</proxy>
#
# 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 <xml>"
exit 1
fi
#Файл настроек
XML="$1"
#Проверка использования прокси
PROXY=$(readXML proxy "$XML")
if [ "$PROXY" == 1 ]; then
proxyCMD
fi
#*****

39
streamsaver

@ -181,18 +181,20 @@ makeCMD() { @@ -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() { @@ -248,6 +250,7 @@ makeCMD() {
typeset -A config
config=(
[proxy]="0"
[stream]=""
[icecast]=""
[password]=""
@ -256,7 +259,7 @@ config=( @@ -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=( @@ -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=( @@ -330,6 +333,8 @@ config=(
# <output_format>mp2</output_format>
# <!-- Битрейт аудиофайлов -->
# <audio_bitrate>256k</audio_bitrate>
# <!-- Использование streamproxy -->
# <proxy>1</proxy>
# </xml>
#
# SOURCE
@ -362,7 +367,13 @@ readXML "$SETTINGS" @@ -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
#*****

Loading…
Cancel
Save