Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: [bash] скрипт автоматизации вещания на rtmp-сервер  (Прочитано 2129 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн vovanrus

  • Автор темы
  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
вообщем рассказываю суть: ведется вещание в инет на rtmp-сервер с помощью ffmpeg, часто случается что канал на котором идет трансляция в инете закрывают и вещание на этот адрес больше не возможно, в таких случаях создается новый канал в инете и вещание продолжается, поэтому заранее создается несколько каналов. Так вот, необходимо автоматизировать смену канала для ffmpeg с помощью bash скрипта, то есть когда в логе ffmpeg появляется сообщение вида "Server error: Authentication Failed" необходимо из файла, созданного заранее, куда вписаны ссылки для других каналов, взять следующую ссылку и вписать ее для ffmpeg:
ffmpeg -v 3 -i http://moy_server:8080 -vcodec copy -acodec copy -f flv $ssilka_na_rtmpдля меня сложность как парсить лог ffmpeg, для нахождения соответствующей фразы, и как перезапустить ffmpeg уже с новой ссылкой на rtmp-сервер. Если не понятно написал, то поправьте  :)

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Да, парсить лог ffmpeg действительно непросто.
Она пишет в stderr, причем без символов конца строки. Я бы на питоне скриптик наваял, попроще будет.
PID запущенного процесса сохраняется в какой-то переменной bash - уточните в Advanced Bash Scripting Guide.

То, что пишет ffmpeg, надо направлять в awk, там разбирать и вызывать команду kill.
Наверное, как-то так...
Или можно еще перенаправить stdin и писать ей "q".
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн vovanrus

  • Автор темы
  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
в питоне я вообще 0) в баш хоть чуток разбираюсь) вообщем тогда начнем с простого: при нажатии на кнопку, например P, из текстового файла забиралась ссылка, сохранялась в переменную  $ssilka_na_rtmp и удалялась из текстового файла, ну а ffmpeg перезапускался уже с новой ссылкой. На данный момент имею просто цикличный запуск ffmpeg, так как иногда поток по каким то причинам может ненадолго отвалиться:
#!/bin/bash
ssilka_na_rtmp=rtmp://na_rtmp_server/live
while :; do
ffmpeg -v 3 -i http://moy_server:8080/ -vcodec copy -acodec copy -f flv $ssilka_na_rtmp
sleep 5
done

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Получить первую строку из текстового файла и убрать ее можно с помощью команд head и tail:

ssilka_na_rtmp = $(head -1 $file_so_ssilkami)
nl = $(wc -l $file_so_ssilkami)
nl = $((nl-1))
tail -$nl $file_so_ssilkami > tmpf
mv tmpf $file_so_ssilkami

проверить, нажата ли клавиша, можно командой read.
поиск в гугле по словам "bash check if key is pressed" принес вот такую ссылку: http://stackoverflow.com/questions/5297638/bash-how-to-end-infinite-loop-with-any-key-pressed
« Последнее редактирование: 26 Октябрь 2011, 19:31:23 от wl »
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

 

Страница сгенерирована за 0.073 секунд. Запросов: 25.