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 @@
<output_format>mp2</output_format> <output_format>mp2</output_format>
<!-- Битрейт аудиофайлов --> <!-- Битрейт аудиофайлов -->
<audio_bitrate>256k</audio_bitrate> <audio_bitrate>256k</audio_bitrate>
<!-- Использование streamproxy -->
<proxy>1</proxy>
</xml> </xml>

106
streamproxy

@ -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() {
# enableOption output_format -c %% # enableOption output_format -c %%
#ICECAST #ICECAST
enableOption input_channel -map %% if [ ! -z ${config[icecast]} ]; then
enableOption audio_bitrate -ab %% enableOption input_channel -map %%
enableOption channel_name \ enableOption audio_bitrate -ab %%
-legacy_icecast 1 \ enableOption channel_name \
-content_type audio/mpeg \ -legacy_icecast 1 \
-ice_name %% -content_type audio/mpeg \
-ice_name %%
enableOption channel_descr \ enableOption channel_descr \
-ice_description %% -ice_description %%
enableOption icecast \ enableOption icecast \
icecast://source:${config[password]}@${config[icecast]}/${config[mountpoint]} icecast://source:${config[password]}@${config[icecast]}/${config[mountpoint]}
fi
# АРХИВ # АРХИВ
enableOption input_channel -map %% enableOption input_channel -map %%
@ -248,6 +250,7 @@ makeCMD() {
typeset -A config typeset -A config
config=( config=(
[proxy]="0"
[stream]="" [stream]=""
[icecast]="" [icecast]=""
[password]="" [password]=""
@ -256,7 +259,7 @@ config=(
[channel_descr]="" [channel_descr]=""
[mountpoint]="" [mountpoint]=""
[cmd]="ffmpeg" [cmd]="ffmpeg"
[input_format]="mpegts" [input_format]=""
[input_channel]="" [input_channel]=""
[archive_dir]="" [archive_dir]=""
[archive_time]="" [archive_time]=""
@ -265,8 +268,8 @@ config=(
[slices_time]="" [slices_time]=""
[slices_log]="" [slices_log]=""
[filename_prefix]="%Y-%m-%d_%H:%M:%S" [filename_prefix]="%Y-%m-%d_%H:%M:%S"
[filename_suffix]="mp2" [filename_suffix]="mp3"
[output_format]="mp2" [output_format]="mp3"
[audio_bitrate]="256k" [audio_bitrate]="256k"
) )
#***** #*****
@ -330,6 +333,8 @@ config=(
# <output_format>mp2</output_format> # <output_format>mp2</output_format>
# <!-- Битрейт аудиофайлов --> # <!-- Битрейт аудиофайлов -->
# <audio_bitrate>256k</audio_bitrate> # <audio_bitrate>256k</audio_bitrate>
# <!-- Использование streamproxy -->
# <proxy>1</proxy>
# </xml> # </xml>
# #
# SOURCE # SOURCE
@ -362,7 +367,13 @@ readXML "$SETTINGS"
mkdir -p ${config[archive_dir]} mkdir -p ${config[archive_dir]}
mkdir -p ${config[slices_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