2015-07-30 3 views
1

Я использую VLC для ретрансляции потока, и эта сторона вещей работает очень хорошо. Однако через несколько часов мне нужно повторно аутентифицировать и повторно запросить поток. У меня есть сценарий, который просто нужно запустить, и это будет обрабатывать повторную аутентификацию и запуск vlc. Проблема, с которой я столкнулась, - это выяснить, перестает ли поток работать.Vlc Check Stream Status

При использовании скажем:

pidof vlc 

Я получаю ИДП процесса VLC. При проверке верха я вижу, что VLC работает и потребляет процессор. Однако, когда я пытаюсь играть в поток, ничего не происходит. Если я снова запустил свой сценарий, поток перезагрузится, и я смогу снова посмотреть его. Итак, даже если поток остановлен, VLC продолжает работать, не давая мне никаких указаний о том, действительно ли поток работает или просто VLC.

Единственное, что я заметил до сих пор, заключается в том, что, когда поток не работает, использование ЦП, похоже, всплескивается в соответствии с top.

Когда поток запущен, использование процессора составляет около 1%, когда оно не работает, оно, похоже, достигает 40%. Я наблюдал это несколько раз, но могу только предположить, что это потенциально может быть способом, которым я могу обеспечить поток, но я не уверен на 100% в этом подходе.

Кто-нибудь знает, как я могу подтвердить, работает ли текущий поток или это просто процесс VLC?

ответ

1

должны давать кредиты @mundu

здесь сценарий, который я создал для проверки, если VLC струится.

// vlc_verify1.sh 
#!/bin/bash 

VLC_CONF="$1" 
VLC_COMMAND="$2" 
VLC_PASS="videolan" 

echo "" > nohup.out 

nohup vlc --intf telnet --vlm-conf $VLC_CONF --telnet-password $VLC_PASS & 
vlc_pid=$! 
echo "vlc has a pid of $vlc_pid" 

sleep 5 

echo "nc start" 
nc localhost 4212 < $VLC_COMMAND 

kill $vlc_pid 
exit 0 

// vlm-conf, you have to replace $url with the actual url 
new channel1 broadcast enabled 
setup channel1 input $url 
control channel1 play 
show 

// command.txt 
videolan 
show 

vlc_verify1.sh будет выводить статус текущей игры, как упоминаемый @mundu. то, что я сделал, - это grep output и посмотреть, является ли это состояние «игрой».

Обратите внимание: я не указывал выход, как setup channel1 output #std{access=udp,mux=ts,dst=239.192.174.105:1234}.

Причина в том, что когда-то vlc использовал бы 100% процессорное время. Я не знаю, почему так. но если я избавлюсь от этого, у меня не возникли подобные проблемы. Недостатком этого является то, что во время потокового воспроизведения появится всплывающее окно. но я не думаю, что это очень важно.

1

Простой. Используйте интерфейс VLM.

VLC -I телнет --vlm-конф vlm.conf

Адаптировать командную строку, чтобы разместить Sout в вашей vlm.conf как в этом примере:

new channel1 broadcast enabled 
setup channel1 input http://host.mydomain/movie.mpeg 
setup channel1 output #std{access=udp,mux=ts,dst=239.192.174.105:1234} 

control channel1 play 

Вы можете затем войдите в интерфейс telnet и введите show, чтобы просмотреть текущие трансляции и ее статус.

> show 
show 
media : (1 broadcast - 0 vod) 
channel1 
     type : broadcast 
     enabled : yes 
     loop : yes 
     inputs 
      1 : http://host.mydomain/movie.mpeg 
     output : #std{access=udp,mux=ts,dst=239.192.174.105:1234} 
     options 
     instances 
      instance 
       name : default 
       state : playing 
       position : 0.058974 
       time : 6473336 
       length : 109766611 
       rate : 1.000000 
       title : 0 
       chapter : 0 
       can-seek : 1 
       playlistindex : 1 

Вы можете прочитать здесь https://wiki.videolan.org/Documentation:Streaming_HowTo/VLM/

PS: Я хотел бы увеличить -v журнала (ст) возможно использовать системный журнал, чтобы сохранить его и отслеживать любые проблемы после этого.