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()
Другие вопросы по тегам