Various Linux scripts.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

78 lines
2.3 KiB

6 years ago
#!/bin/bash
#
# Copyright (C) 2019, Maxim Lihachev, <envrm@yandex.ru>
#
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free
# Software Foundation, version 3.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
# more details.
#
# You should have received a copy of the GNU General Public License along with
# this program. If not, see <https://www.gnu.org/licenses/>.
#
#
# Получение информации и аудиопотока в сети Axia Livewire
#
# Пример обработки полученных данных при помощи ffmpeg:
#
# | ffmpeg -ac 2 -ar 48000 -f s24be -i pipe:0
#
# Сценарий принимает адрес Axia Livewire в формате IP/Channel,
# при этом IP-адрес может отсутствовать
if [ $# -ne 2 ]; then
echo "USAGE: $0 [--info|--dump] <IP/Channel>"
exit 1
fi
# Перевод чисел в 16-ричную систему счисления
hex() {
printf '%02X' "$@"
}
# Программа
PROGRAMME="$2"
# IP-адрес Axia Livewire.
IP="$(echo $PROGRAMME | grep -o '.*\/' | tr '/' ' ')"
# По умолчанию используется базовый адрес 239.192.0.0
ADDRESS="${IP:-239.192.0.0}"
# Канал
CHANNEL="${PROGRAMME/*\/}"
# Команда получения сигнала в сети Axia Livewire
CMD="rtpdump -F payload"
BROADCAST="0x$(hex $[0x$(hex ${ADDRESS//./ })+$CHANNEL])/5004"
HEXADDR="$(hex $[0x$(hex ${ADDRESS//./ })+$CHANNEL])"
IPADDR=$(printf "%d." $(
echo $HEXADDR | sed 's/../0x& /g' | tr ' ' '\n'
) | sed 's/\.$/\n/')
#################
if [ "$1" == "--info" ]; then
# Информация об источнике
echo "Axia Livewire :: IP: $IPADDR, SOURCE: $CHANNEL, BROADCAST: $BROADCAST"
else
# Прекращение работы, если нет последующего конвеера,
# т.к. выводить дамп аудиопотока в stdout не имеет смысла.
if [ -t 1 ]; then
echo "A pipe (f.e. to ffmpeg) isn't exists. Terminated."
exit 1
else
# Дамп
$CMD $BROADCAST
fi
fi