Страницы

суббота, 24 марта 2012 г.

IPTV multichannel video recorder. Мнгоканальный цифровой видеомагнитофон

Настраивается цифровое многоканальное видеозаписывающее устройство, по простому iptv магнитофон или digital multichannel streaming videorecorder based on VideoLAN client.


Возможности возникающие после настройки IPTV на домашнем сервере можно посмотреть в предыдущей теме, здесь же - конкретное решение - цифровой видеорекордер.

Итак, общая схема ЦМВЗУ (viderecorder scheme)
ВАЖНО! Похоже игры с русскими буквами и Upstart закончились, возникают проблемы. Просто переименовать на английский и не мучить бедного.
Имеется несколько пользовательских задач, расположенных в папке ~/.init/ (в домашней директории).
Задачи (Tasks) поименованы на русском языке, вида:
первый.conf
россия.conf
россия2.conf
5канал.conf
нтв.conf
и т. д.
В свете выявленных последних глюков, задачи временно переименованы на английском языке, до нахождения способа обхода глюков.

Каждая задача представляет собой "работу" Upstart, следует ее синтаксису и семантике.
Управление записью-остановкой осуществляется путем посылки сигналов, в терминологии Upstart. Для пользователя, команды выглядят так:
$ запись 5канал
$ запись первый
где "запись" - это псевдоним, определенный в оболочке bash/sh.
Остановка осуществляется системной командой stop:
stop 5канал.

Для управления по расписанию используется CRON. в нем команды выглядят так:
00 08 * * * "start первый"
31 08 * * * "stop первый"
и т.д.
Увы, с русскими буквами в cron оказались трудности, поэтому делаем обходной маневр. 
Проблема оказалась не в русских буквах, а в доступности команды start для cron, в указании пути.
00 08 * * * /sbin/start первый
31 08 * * * /sbin/stop первый

либо в указать PATH в начале файла при редактировании с помощью crontab -e .

Общий шаблон пользовательской "работы" по записи видео IPTV. 
Common template of Upstart's job.

$ sudo nano ~/.init/вести.conf

#! /bin/bash
# Скрипт для видеозаписи канала Вести (тестовый 60 сек.)
# url канала: rtp://@233.33.210.115:5050
# сервер: микросервер
# Дата изменения: 24 марта 2012
# Особенности:
# Выходной файл создается с датой-временем,
# при использовании русских букв в имени выходного файла
# надо использовать кавычки в команде mv
task
author "Дмитрий. gimmor.blogspot.com"
description "Задача записи видеопотока IPTV телеканала Вести"
manual
exec cvlc -vvv rtp://@233.33.210.115:5050 --sout '#standard{mux=ts,dst=vesti.ts}' --run-time 60 vlc://quit --no-audio


# Выполняется после завершения задачи
post-stop script
OUTPUT_VIDEOFILE="avoska/"`date +%Y.%m.%d-%H.%M.%S`".Вести.тестовый.видеопоток.ts"
mv vesti.ts "$OUTPUT_VIDEOFILE"
end script


# Запуск скрипта по сигналу
# используется неблокирующий сигнал
# пример: initctl emit --no-wait videostart
# пример: initctl emit --no-wait videostop


start on videostart
stop on videostop
start on вести



В результате создания для каждого канала такого файла, с корректировкой url и имени временного файла (у канала Вести dst=vesti.ts) на сервере появляется ЦМВЗУ

Специальные сигналы videostart и videostop служат цели включения/выключения всех каналов сразу.


Команды все запускаются на сервере под обычным пользователем (это ограничение cvlc).

На сервере должна быть настроена русификация консоли.

Команда "запись" определена как псевдоним alias вида:
$ alias запись='initctl emit --no-wait'
Для постоянного использования прописать в конфигурационный файл bash.
echo "alias запись='initctl emit --no-wait'" >> .bashrc

Редактирование расписания
$ crontab -e

Во к примеру (часть crontab),  запись новостей первого канала:

00 08 * * * /sbin/start 1ch 2> /tmp/1.cron
31 08 * * * /sbin/stop  1ch 2> /tmp/1s.cron
00 12 * * * /sbin/start 1ch 2> /tmp/1.cron
30 12 * * * /sbin/stop  1ch 2> /tmp/1s.cron
00 21 * * * /sbin/start 1ch 2> /tmp/1.cron
30 21 * * * /sbin/stop  1ch 2> /tmp/1s.cron





При использовании команды at
$ at 09:00
warning: commands will be executed using /bin/sh
> start вести
>
> <EOT>
job 18 at Sun Mar 25 02:12:00 2012
<EOT> символ завершения, нажать Ctrl-D.
$ at -l
Иногда надо для контроля просмотреть правильно ли сформировано задание (из-за русских букв)
И особенность, системные альясы недоступны оказались для cron и at, поэтому вместо них используется прямая команда "start" или "initctl emit --no-wait". C cron вес также проблемы.

Включение поддержки пользовательских задач Upstart. Это необходимо.
Редактируется файл: /etc/dbus-1/system.d/Upstart.conf
В нем пару секций в которых присутствует root надо скопировать тут же и заменить на имя пользователя.
Осторожно! Можно разломать Ubuntu. Если разломалась, надо загрузиться с другого LiveCD и там исправить этот файл.

Замеченное
- выявился баг, когда в имени видеофайла присутствовал символ ":", этот файл нормально не передавался через SAMBA (было преобразование имени в формат DOS 8.3). Исправил на %H.%M.%S
- с русскими буквами, таки случились проблемы, поэтому было принято решение быстренько все переписать на английском.

Выводы
- IPTV на компьютере, очень удобно использовать для мониторинга новостных каналов
- Upstart - великолепная вещь, быстрая в освоении под свои задачи.

На этом пока все.



Ресурсы
- . http://wiki.videolan.org/Documentation:Streaming_HowTo/Receive_and_Save_a_Stream

Комментариев нет: