Python Способ проверить, доступен ли интернет-радиопоток
Я занимаюсь сбором потоковых интернет-файлов, таких как m3u, со ссылкой на поток внутри (например, http://aska.ru-hoster.com:8053/autodj).
Я не нашел пример того, как можно проверить, доступна ли ссылка / доступна ли она.
Любая помощь приветствуется!
UPD:
Возможно, главный вопрос должен звучать так:
Может быть поток сломан? Если да, будет ли ссылка для этого потока по-прежнему доступна или в браузере будет просто ошибка 404? Если ссылка все еще доступна для открытия даже потока, он мертв, каковы другие способы проверки потока?
1 ответ
Вы пытаетесь проверить, существует ли потоковый URL?
Если да, это будет похоже на проверку любого другого URL, если он существует.
Одним из способов будет попытка получить URL с помощью urllib
и проверьте возвращенный код состояния.
200 - существует
Что-нибудь еще (например, 404) - не существует, или вы не можете получить к нему доступ.
Например:
import urllib
url = 'http://aska.ru-hoster.com:8053/autodj'
code = urllib.urlopen(url).getcode()
#if code == 200: #Edited per @Brad's comment
if str(code).startswith('2') or str(code).startswith('3') :
print 'Stream is working'
else:
print 'Stream is dead'
EDIT-1
Хотя выше будет ловить, если URL существует или нет. Он не будет ловить, если URL существует, и ссылка на медиа не работает
Одно из возможных решений с использованием vlc
чтобы получить медиа из URL, попробуйте воспроизвести его и получить его статус во время воспроизведения. Если медиа не существует, мы получим ошибку, которая может быть использована для определения статуса ссылки.
С рабочим URL получаем
url = 'http://aska.ru-hoster.com:8053/autodj'
>>>
Stream is working. Current state = State.Playing
С неработающим URL мы получаем,
url = 'http://aska.ru-hoster.com:8053/autodj12345'
>>>
Stream is dead. Current state = State.Error
Ниже приведена базовая логика для достижения выше. Вы можете проверить сайт 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()