1
0
mirror of https://github.com/yt-dlp/yt-dlp.git synced 2025-06-28 01:18:30 +00:00

[ie/EasyBroadcastLiveIE] Add extractor

This commit is contained in:
CasperMcFadden95 2025-06-22 14:13:58 +00:00 committed by GitHub
parent 73bf102116
commit 4cc768576f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 86 additions and 0 deletions

View File

@ -574,6 +574,7 @@
ClipYouEmbedIE, ClipYouEmbedIE,
EaglePlatformIE, EaglePlatformIE,
) )
from .easybroadcast import EasyBroadcastLiveIE
from .ebaumsworld import EbaumsWorldIE from .ebaumsworld import EbaumsWorldIE
from .ebay import EbayIE from .ebay import EbayIE
from .egghead import ( from .egghead import (

View File

@ -0,0 +1,67 @@
from yt_dlp.extractor.common import InfoExtractor
from yt_dlp.utils import (
ExtractorError,
)
class EasyBroadcastLiveIE(InfoExtractor):
_VALID_URL = r'https?://(?:\w+\.)?player\.easybroadcast\.io/events/(?P<id>[0-9a-zA-Z_]+)'
_TESTS = [
{
'url': 'https://al24.player.easybroadcast.io/events/66_al24_u4yga6h',
'info_dict': {
'id': '66_al24_u4yga6h',
'title': 'Al24',
'ext': 'mp4',
'live_status': 'is_live',
},
},
{
'url': 'https://snrt.player.easybroadcast.io/events/73_aloula_w1dqfwm',
'info_dict': {
'id': '73_aloula_w1dqfwm',
'title': 'Aloula',
'ext': 'mp4',
'live_status': 'is_live',
},
},
{
'url': 'https://captaprod.player.easybroadcast.io/events/54_tvr_vtucuxt',
'info_dict': {
'id': '54_tvr_vtucuxt',
'title': 'TVR',
'ext': 'mp4',
'live_status': 'is_live',
},
},
]
def _real_extract(self, url):
event_id = self._match_id(url)
base_url = url.split('/events/')[0]
api_url = f'{base_url}/api/events/{event_id}'
metadata = self._download_json(api_url, event_id, note='Downloading EasyBroadcast event metadata')
m3u8_url = metadata.get('stream')
token = None
if metadata.get('token_authentication', False):
token_api_url = f'https://token.easybroadcast.io/all?url={m3u8_url}'
token = self._download_webpage(token_api_url, event_id, note='Fetching stream token').strip()
m3u8_url = m3u8_url + '?' + token
if not token:
raise ExtractorError('Empty token returned from token server.')
formats = self._extract_m3u8_formats(m3u8_url, video_id=event_id, ext='mp4', m3u8_id='hls', live=True)
if token:
for fmt in formats:
fmt['url'] = fmt['url'] + '?' + token
return {
'id': event_id,
'title': metadata.get('name', event_id),
'formats': formats,
'is_live': True,
}

View File

@ -6,6 +6,7 @@
from .common import InfoExtractor from .common import InfoExtractor
from .commonprotocols import RtmpIE from .commonprotocols import RtmpIE
from .easybroadcast import EasyBroadcastLiveIE
from .youtube import YoutubeIE from .youtube import YoutubeIE
from ..compat import compat_etree_fromstring from ..compat import compat_etree_fromstring
from ..cookies import LenientSimpleCookie from ..cookies import LenientSimpleCookie
@ -804,6 +805,16 @@ class GenericIE(InfoExtractor):
}, },
'skip': 'All The Daily Show URLs now redirect to http://www.cc.com/shows/', 'skip': 'All The Daily Show URLs now redirect to http://www.cc.com/shows/',
}, },
# EasyBroadcast embed
{
'url': 'https://al24news.dz/en/live',
'info_dict': {
'id': '66_al24_u4yga6h',
'title': 'Al24',
'ext': 'mp4',
'live_status': 'is_live',
},
},
# jwplayer YouTube # jwplayer YouTube
{ {
'url': 'http://media.nationalarchives.gov.uk/index.php/webinar-using-discovery-national-archives-online-catalogue/', 'url': 'http://media.nationalarchives.gov.uk/index.php/webinar-using-discovery-national-archives-online-catalogue/',
@ -2612,6 +2623,13 @@ def _extract_embeds(self, url, webpage, *, urlh=None, info_dict={}):
if embeds: if embeds:
return embeds return embeds
# EasyBroadcast embed
mobj = re.search(
EasyBroadcastLiveIE._VALID_URL,
webpage)
if mobj is not None:
return [self.url_result(mobj.group(0), ie=EasyBroadcastLiveIE)]
jwplayer_data = self._find_jwplayer_data( jwplayer_data = self._find_jwplayer_data(
webpage, video_id, transform_source=js_to_json) webpage, video_id, transform_source=js_to_json)
if jwplayer_data: if jwplayer_data: