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
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
|
||
|
|