aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--yt_dlp/extractor/lbry.py40
1 files changed, 25 insertions, 15 deletions
diff --git a/yt_dlp/extractor/lbry.py b/yt_dlp/extractor/lbry.py
index 0f87bf1d7..1405ce0c7 100644
--- a/yt_dlp/extractor/lbry.py
+++ b/yt_dlp/extractor/lbry.py
@@ -184,28 +184,38 @@ class LBRYIE(LBRYBaseIE):
display_id = compat_urllib_parse_unquote(display_id)
uri = 'lbry://' + display_id
result = self._resolve_url(uri, display_id, 'stream')
- result_value = result['value']
- if result_value.get('stream_type') not in self._SUPPORTED_STREAM_TYPES:
+ if result['value'].get('stream_type') in self._SUPPORTED_STREAM_TYPES:
+ claim_id, is_live, headers = result['claim_id'], False, None
+ streaming_url = self._call_api_proxy(
+ 'get', claim_id, {'uri': uri}, 'streaming url')['streaming_url']
+ final_url = self._request_webpage(
+ streaming_url, display_id, note='Downloading streaming redirect url info').geturl()
+ elif result.get('value_type') == 'stream':
+ claim_id, is_live = result['signing_channel']['claim_id'], True
+ headers = {'referer': 'https://player.odysee.live/'}
+ live_data = self._download_json(
+ f'https://api.live.odysee.com/v1/odysee/live/{claim_id}', claim_id,
+ note='Downloading livestream JSON metadata')['data']
+ if not live_data['live']:
+ raise ExtractorError('This stream is not live', expected=True)
+ streaming_url = final_url = live_data['url']
+ else:
raise ExtractorError('Unsupported URL', expected=True)
- claim_id = result['claim_id']
- title = result_value['title']
- streaming_url = self._call_api_proxy(
- 'get', claim_id, {'uri': uri}, 'streaming url')['streaming_url']
+
info = self._parse_stream(result, url)
- urlh = self._request_webpage(
- streaming_url, display_id, note='Downloading streaming redirect url info')
- if determine_ext(urlh.geturl()) == 'm3u8':
+ if determine_ext(final_url) == 'm3u8':
info['formats'] = self._extract_m3u8_formats(
- urlh.geturl(), display_id, 'mp4', entry_protocol='m3u8_native',
- m3u8_id='hls')
+ final_url, display_id, 'mp4', 'm3u8_native', m3u8_id='hls', live=is_live, headers=headers)
self._sort_formats(info['formats'])
else:
info['url'] = streaming_url
- info.update({
+ return {
+ **info,
'id': claim_id,
- 'title': title,
- })
- return info
+ 'title': result['value']['title'],
+ 'is_live': is_live,
+ 'http_headers': headers,
+ }
class LBRYChannelIE(LBRYBaseIE):