Ошибка открытого URL при использовании vlc в терминале
Я запускаю следующую команду в терминале Linux:
vlc http://streamx/live/....stream/playlist.m3u8 --rate=1 --video-filter=scene --vout=dummy --run-time=3 --scene-format=png --scene-ratio=24 --scene-path=/home/pi/Desktop vlc://quit
Если URL-адрес в порядке, он делает несколько снимков из потоков. Я хотел бы знать, была ли команда выполнена успешно или нет.
если URL-адрес не правильный, выписывается:
[73b00508] core input error: open of 'http://streamx/live/....stream/playlist.m3u8' failed
[73b00508] core input error: Your input can't be opened
[73b00508] core input error: VLC is unable to open the MRL 'http://streamx/live/....stream/playlist.m3u8'. Check the log for details.
если URL-адрес правильный, пишет:
[73b03f20] httplive stream: HTTP Live Streaming (streamx/live/....stream/playlist.m3u8)
Как я могу получить после запуска команды (например, в скрипте Python), если URL был в порядке или нет?
Заранее спасибо!
1 ответ
Нам нужно проверить две вещи.
- 1) Если сам URL жив
- 2) Если URL активен, идет поток данных (возможно, у вас битая ссылка).
1) Проверить, жив ли URL. Мы можем проверить код статуса. Все, что 2xx или 3xx хорошо (вы можете адаптировать это к вашим потребностям).
import urllib
url = 'http://aska.ru-hoster.com:8053/autodj'
code = urllib.urlopen(url).getcode()
if str(code).startswith('2') or str(code).startswith('3') :
print 'Stream is working'
else:
print 'Stream is dead'
2) Теперь у нас есть хороший URL, но нам нужно проверить, есть ли у нас потоковая передача и не умерла ли ссылка.
Используя VLC, мы можем подключиться к сайту, попытаться воспроизвести мультимедиа по ссылке, а затем проверить ошибки.
Вот рабочий пример, который я получил из моей другой публикации.
import vlc
import time
url = 'http://aska.ru-hoster.com:8053/autodj'
#define VLC instance
instance = vlc.Instance('--input-repeat=-1', '--fullscreen')
#Define VLC player
player=instance.media_player_new()
#Define VLC media
media=instance.media_new(url)
#Set player media
player.set_media(media)
#Play the media
player.play()
#Sleep for 5 sec for VLC to complete retries.
time.sleep(5)
#Get current state.
state = str(player.get_state())
#Find out if stream is working.
if state == "vlc.State.Error" or state == "State.Error":
print 'Stream is dead. Current state = {}'.format(state)
player.stop()
else:
print 'Stream is working. Current state = {}'.format(state)
player.stop()