_DELAY = datetime.timedelta(seconds = 10)
+IGNORE_EXCEPTIONS = {ConnectionResetError}
+
def _get_time(resp):
time_str = resp.info().get('Date')
or stream_spec.variant is None and not handler.in_sess
)
if locate_stream:
- with opener.open(master_url) as resp:
- if resp.status == 200:
- lines = resp.read().decode('utf-8').splitlines()
- streams = parse_master(lines)
- if streams:
- winner = max(streams, key = lambda s: s.attrs['RESOLUTION'].vertical)
- (ep, curr_variant) = re.match(r'(.*)_(.*?)\.m3u8$', winner.uri).groups()
- assert ep == stream_spec.endpoint
- else:
- assert resp.status == 404
- time.sleep(_DELAY.total_seconds())
+ try:
+ resp = opener.open(master_url)
+ except tuple(IGNORE_EXCEPTIONS):
+ pass
+ else:
+ with resp:
+ if resp.status == 200:
+ lines = resp.read().decode('utf-8').splitlines()
+ streams = parse_master(lines)
+ if streams:
+ winner = max(streams, key = lambda s: s.attrs['RESOLUTION'].vertical)
+ (ep, curr_variant) = re.match(r'(.*)_(.*?)\.m3u8$', winner.uri).groups()
+ assert ep == stream_spec.endpoint
+ else:
+ assert resp.status == 404
if curr_variant is not None:
writer.stream = stream_spec._replace(variant = curr_variant)
media_url = url_for_stream('{}.m3u8'.format(writer.stream.full()))
- with opener.open(media_url) as resp:
- if resp.status == 404:
- handler.on_404()
- else:
- assert resp.status == 200
- lines = resp.read().decode('utf-8').splitlines()
- handler.update(Capture(
- time = _get_time(resp),
- playlist = parse_media(lines),
- ))
+ try:
+ resp = opener.open(media_url)
+ except tuple(IGNORE_EXCEPTIONS):
+ pass
+ else:
+ with resp:
+ if resp.status == 404:
+ handler.on_404()
+ else:
+ assert resp.status == 200
+ lines = resp.read().decode('utf-8').splitlines()
+ handler.update(Capture(
+ time = _get_time(resp),
+ playlist = parse_media(lines),
+ ))
time.sleep(_DELAY.total_seconds())