diff options
| author | Sergey M․ <dstftw@gmail.com> | 2016-12-19 23:47:45 +0700 | 
|---|---|---|
| committer | Sergey M․ <dstftw@gmail.com> | 2016-12-19 23:47:45 +0700 | 
| commit | c80db5d3988b31a1f17b2e894099ff16b6b777c4 (patch) | |
| tree | a2c00b8e6a59cf764bb0e9f266cf266965bd4e59 | |
| parent | 5aaf012a4eacc50bb5b131f6c26027e391fc379a (diff) | |
[nrktv:direkte] Add support for live streams (#11488)
| -rw-r--r-- | youtube_dl/extractor/extractors.py | 1 | ||||
| -rw-r--r-- | youtube_dl/extractor/nrk.py | 32 | 
2 files changed, 30 insertions, 3 deletions
| diff --git a/youtube_dl/extractor/extractors.py b/youtube_dl/extractor/extractors.py index d75ea0c92..e44cf5d85 100644 --- a/youtube_dl/extractor/extractors.py +++ b/youtube_dl/extractor/extractors.py @@ -655,6 +655,7 @@ from .nrk import (      NRKPlaylistIE,      NRKSkoleIE,      NRKTVIE, +    NRKTVDirekteIE,  )  from .ntvde import NTVDeIE  from .ntvru import NTVRuIE diff --git a/youtube_dl/extractor/nrk.py b/youtube_dl/extractor/nrk.py index c89aac63e..776c40b94 100644 --- a/youtube_dl/extractor/nrk.py +++ b/youtube_dl/extractor/nrk.py @@ -48,6 +48,13 @@ class NRKBaseIE(InfoExtractor):          entries = [] +        conviva = data.get('convivaStatistics') or {} +        live = (data.get('mediaElementType') == 'Live' or +                data.get('isLive') is True or conviva.get('isLive')) + +        def make_title(t): +            return self._live_title(t) if live else t +          media_assets = data.get('mediaAssets')          if media_assets and isinstance(media_assets, list):              def video_id_and_title(idx): @@ -61,6 +68,13 @@ class NRKBaseIE(InfoExtractor):                  if not formats:                      continue                  self._sort_formats(formats) + +                # Some f4m streams may not work with hdcore in fragments' URLs +                for f in formats: +                    extra_param = f.get('extra_param_to_segment_url') +                    if extra_param and 'hdcore' in extra_param: +                        del f['extra_param_to_segment_url'] +                  entry_id, entry_title = video_id_and_title(num)                  duration = parse_duration(asset.get('duration'))                  subtitles = {} @@ -72,7 +86,7 @@ class NRKBaseIE(InfoExtractor):                          })                  entries.append({                      'id': asset.get('carrierId') or entry_id, -                    'title': entry_title, +                    'title': make_title(entry_title),                      'duration': duration,                      'subtitles': subtitles,                      'formats': formats, @@ -87,7 +101,7 @@ class NRKBaseIE(InfoExtractor):                  duration = parse_duration(data.get('duration'))                  entries = [{                      'id': video_id, -                    'title': title, +                    'title': make_title(title),                      'duration': duration,                      'formats': formats,                  }] @@ -111,7 +125,6 @@ class NRKBaseIE(InfoExtractor):                      message_type, message_type)),                  expected=True) -        conviva = data.get('convivaStatistics') or {}          series = conviva.get('seriesName') or data.get('seriesTitle')          episode = conviva.get('episodeName') or data.get('episodeNumberOrDate') @@ -260,6 +273,19 @@ class NRKTVIE(NRKBaseIE):      }] +class NRKTVDirekteIE(NRKTVIE): +    IE_DESC = 'NRK TV Direkte and NRK Radio Direkte' +    _VALID_URL = r'https?://(?:tv|radio)\.nrk\.no/direkte/(?P<id>[^/?#&]+)' + +    _TESTS = [{ +        'url': 'https://tv.nrk.no/direkte/nrk1', +        'only_matching': True, +    }, { +        'url': 'https://radio.nrk.no/direkte/p1_oslo_akershus', +        'only_matching': True, +    }] + +  class NRKPlaylistIE(InfoExtractor):      _VALID_URL = r'https?://(?:www\.)?nrk\.no/(?!video|skole)(?:[^/]+/)+(?P<id>[^/]+)' | 
