[wakanim] Add support for MPD manifests (#1428)

Closes #1426
Authored by: nyuszika7h
This commit is contained in:
nyuszika7h 2021-10-26 18:33:43 +02:00 committed by GitHub
parent 673944b001
commit dc88e9be03
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1,6 +1,8 @@
# coding: utf-8 # coding: utf-8
from __future__ import unicode_literals from __future__ import unicode_literals
from urllib.parse import unquote
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..utils import (
merge_dicts, merge_dicts,
@ -37,20 +39,24 @@ def _real_extract(self, url):
webpage = self._download_webpage(url, video_id) webpage = self._download_webpage(url, video_id)
m3u8_url = urljoin(url, self._search_regex( manifest_url = urljoin(url, self._search_regex(
r'file\s*:\s*(["\'])(?P<url>(?:(?!\1).)+)\1', webpage, 'm3u8 url', r'file\s*:\s*(["\'])(?P<url>(?:(?!\1).)+)\1', webpage, 'manifest url',
group='url')) group='url'))
if not self.get_param('allow_unplayable_formats'): if not self.get_param('allow_unplayable_formats'):
# https://docs.microsoft.com/en-us/azure/media-services/previous/media-services-content-protection-overview#streaming-urls # https://docs.microsoft.com/en-us/azure/media-services/previous/media-services-content-protection-overview#streaming-urls
encryption = self._search_regex( encryption = self._search_regex(
r'encryption%3D(c(?:enc|bc(?:s-aapl)?))', r'encryption%3D(c(?:enc|bc(?:s-aapl)?))',
m3u8_url, 'encryption', default=None) manifest_url, 'encryption', default=None)
if encryption in ('cenc', 'cbcs-aapl'): if encryption in ('cenc', 'cbcs-aapl'):
self.report_drm(video_id) self.report_drm(video_id)
formats = self._extract_m3u8_formats( if 'format=mpd-time-cmaf' in unquote(manifest_url):
m3u8_url, video_id, 'mp4', entry_protocol='m3u8_native', formats = self._extract_mpd_formats(
m3u8_id='hls') manifest_url, video_id, mpd_id='dash')
else:
formats = self._extract_m3u8_formats(
manifest_url, video_id, 'mp4', entry_protocol='m3u8_native',
m3u8_id='hls')
info = self._search_json_ld(webpage, video_id, default={}) info = self._search_json_ld(webpage, video_id, default={})