Skip to content

Commit

Permalink
Merge pull request #948 from MoojMidge/master
Browse files Browse the repository at this point in the history
v7.1.1+beta.3
  • Loading branch information
MoojMidge authored Oct 29, 2024
2 parents c26812b + 58bcf96 commit 595d1c1
Show file tree
Hide file tree
Showing 9 changed files with 833 additions and 190 deletions.
2 changes: 1 addition & 1 deletion addon.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="plugin.video.youtube" name="YouTube" version="7.1.1+beta.2" provider-name="anxdpanic, bromix, MoojMidge">
<addon id="plugin.video.youtube" name="YouTube" version="7.1.1+beta.3" provider-name="anxdpanic, bromix, MoojMidge">
<requires>
<import addon="xbmc.python" version="3.0.0"/>
<import addon="script.module.requests" version="2.27.1"/>
Expand Down
11 changes: 11 additions & 0 deletions changelog.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,14 @@
## v7.1.1+beta.3
### Fixed
- Fix not listing full stream details in selection dialog
- Fix translated subtitles not being available for some videos #945
- Fix labelling for auto dubbed audio tracks
- Fix regressions in handling VP9.2 video streams
- Fix error handling items without headers #946

### Changed
- Use alternative streams to improve compatibility with external players

## v7.1.1+beta.2
### Fixed
- Standardise return type of LoginClient.refresh_token #932
Expand Down
10 changes: 10 additions & 0 deletions resources/lib/youtube_plugin/kodion/constants/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,11 @@
const_settings as SETTINGS,
const_sort_methods as SORT,
)
from .const_lang_region import (
DEFAULT_LANGUAGES,
DEFAULT_REGIONS,
TRANSLATION_LANGUAGES,
)


# Addon paths
Expand Down Expand Up @@ -147,4 +152,9 @@
'PATHS',
'SETTINGS',
'SORT',

# Languages and Regions
'DEFAULT_LANGUAGES',
'DEFAULT_REGIONS',
'TRANSLATION_LANGUAGES',
)
772 changes: 772 additions & 0 deletions resources/lib/youtube_plugin/kodion/constants/const_lang_region.py

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion resources/lib/youtube_plugin/kodion/items/media_item.py
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,7 @@ def set_headers(self, value):

def get_headers(self, as_string=False):
if as_string:
return urlencode(self._headers)
return urlencode(self._headers) if self._headers else ''
return self._headers

def set_license_key(self, url):
Expand Down
174 changes: 2 additions & 172 deletions resources/lib/youtube_plugin/kodion/script_actions.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
from .compatibility import parse_qsl, urlsplit, xbmc, xbmcaddon, xbmcvfs
from .constants import (
DATA_PATH,
DEFAULT_LANGUAGES,
DEFAULT_REGIONS,
RELOAD_ACCESS_MANAGER,
SERVER_WAKEUP,
TEMP_PATH,
Expand All @@ -26,178 +28,6 @@
from ..youtube import Provider


DEFAULT_LANGUAGES = {'items': [
{'snippet': {'name': 'Afrikaans', 'hl': 'af'}, 'id': 'af'},
{'snippet': {'name': 'Azerbaijani', 'hl': 'az'}, 'id': 'az'},
{'snippet': {'name': 'Indonesian', 'hl': 'id'}, 'id': 'id'},
{'snippet': {'name': 'Malay', 'hl': 'ms'}, 'id': 'ms'},
{'snippet': {'name': 'Catalan', 'hl': 'ca'}, 'id': 'ca'},
{'snippet': {'name': 'Czech', 'hl': 'cs'}, 'id': 'cs'},
{'snippet': {'name': 'Danish', 'hl': 'da'}, 'id': 'da'},
{'snippet': {'name': 'German', 'hl': 'de'}, 'id': 'de'},
{'snippet': {'name': 'Estonian', 'hl': 'et'}, 'id': 'et'},
{'snippet': {'name': 'English (United Kingdom)', 'hl': 'en-GB'}, 'id': 'en-GB'},
{'snippet': {'name': 'English', 'hl': 'en'}, 'id': 'en'},
{'snippet': {'name': 'Spanish (Spain)', 'hl': 'es'}, 'id': 'es'},
{'snippet': {'name': 'Spanish (Latin America)', 'hl': 'es-419'}, 'id': 'es-419'},
{'snippet': {'name': 'Basque', 'hl': 'eu'}, 'id': 'eu'},
{'snippet': {'name': 'Filipino', 'hl': 'fil'}, 'id': 'fil'},
{'snippet': {'name': 'French', 'hl': 'fr'}, 'id': 'fr'},
{'snippet': {'name': 'French (Canada)', 'hl': 'fr-CA'}, 'id': 'fr-CA'},
{'snippet': {'name': 'Galician', 'hl': 'gl'}, 'id': 'gl'},
{'snippet': {'name': 'Croatian', 'hl': 'hr'}, 'id': 'hr'},
{'snippet': {'name': 'Zulu', 'hl': 'zu'}, 'id': 'zu'},
{'snippet': {'name': 'Icelandic', 'hl': 'is'}, 'id': 'is'},
{'snippet': {'name': 'Italian', 'hl': 'it'}, 'id': 'it'},
{'snippet': {'name': 'Swahili', 'hl': 'sw'}, 'id': 'sw'},
{'snippet': {'name': 'Latvian', 'hl': 'lv'}, 'id': 'lv'},
{'snippet': {'name': 'Lithuanian', 'hl': 'lt'}, 'id': 'lt'},
{'snippet': {'name': 'Hungarian', 'hl': 'hu'}, 'id': 'hu'},
{'snippet': {'name': 'Dutch', 'hl': 'nl'}, 'id': 'nl'},
{'snippet': {'name': 'Norwegian', 'hl': 'no'}, 'id': 'no'},
{'snippet': {'name': 'Uzbek', 'hl': 'uz'}, 'id': 'uz'},
{'snippet': {'name': 'Polish', 'hl': 'pl'}, 'id': 'pl'},
{'snippet': {'name': 'Portuguese (Portugal)', 'hl': 'pt-PT'}, 'id': 'pt-PT'},
{'snippet': {'name': 'Portuguese (Brazil)', 'hl': 'pt'}, 'id': 'pt'},
{'snippet': {'name': 'Romanian', 'hl': 'ro'}, 'id': 'ro'},
{'snippet': {'name': 'Albanian', 'hl': 'sq'}, 'id': 'sq'},
{'snippet': {'name': 'Slovak', 'hl': 'sk'}, 'id': 'sk'},
{'snippet': {'name': 'Slovenian', 'hl': 'sl'}, 'id': 'sl'},
{'snippet': {'name': 'Finnish', 'hl': 'fi'}, 'id': 'fi'},
{'snippet': {'name': 'Swedish', 'hl': 'sv'}, 'id': 'sv'},
{'snippet': {'name': 'Vietnamese', 'hl': 'vi'}, 'id': 'vi'},
{'snippet': {'name': 'Turkish', 'hl': 'tr'}, 'id': 'tr'},
{'snippet': {'name': 'Bulgarian', 'hl': 'bg'}, 'id': 'bg'},
{'snippet': {'name': 'Kyrgyz', 'hl': 'ky'}, 'id': 'ky'},
{'snippet': {'name': 'Kazakh', 'hl': 'kk'}, 'id': 'kk'},
{'snippet': {'name': 'Macedonian', 'hl': 'mk'}, 'id': 'mk'},
{'snippet': {'name': 'Mongolian', 'hl': 'mn'}, 'id': 'mn'},
{'snippet': {'name': 'Russian', 'hl': 'ru'}, 'id': 'ru'},
{'snippet': {'name': 'Serbian', 'hl': 'sr'}, 'id': 'sr'},
{'snippet': {'name': 'Ukrainian', 'hl': 'uk'}, 'id': 'uk'},
{'snippet': {'name': 'Greek', 'hl': 'el'}, 'id': 'el'},
{'snippet': {'name': 'Armenian', 'hl': 'hy'}, 'id': 'hy'},
{'snippet': {'name': 'Hebrew', 'hl': 'iw'}, 'id': 'iw'},
{'snippet': {'name': 'Urdu', 'hl': 'ur'}, 'id': 'ur'},
{'snippet': {'name': 'Arabic', 'hl': 'ar'}, 'id': 'ar'},
{'snippet': {'name': 'Persian', 'hl': 'fa'}, 'id': 'fa'},
{'snippet': {'name': 'Nepali', 'hl': 'ne'}, 'id': 'ne'},
{'snippet': {'name': 'Marathi', 'hl': 'mr'}, 'id': 'mr'},
{'snippet': {'name': 'Hindi', 'hl': 'hi'}, 'id': 'hi'},
{'snippet': {'name': 'Bengali', 'hl': 'bn'}, 'id': 'bn'},
{'snippet': {'name': 'Punjabi', 'hl': 'pa'}, 'id': 'pa'},
{'snippet': {'name': 'Gujarati', 'hl': 'gu'}, 'id': 'gu'},
{'snippet': {'name': 'Tamil', 'hl': 'ta'}, 'id': 'ta'},
{'snippet': {'name': 'Telugu', 'hl': 'te'}, 'id': 'te'},
{'snippet': {'name': 'Kannada', 'hl': 'kn'}, 'id': 'kn'},
{'snippet': {'name': 'Malayalam', 'hl': 'ml'}, 'id': 'ml'},
{'snippet': {'name': 'Sinhala', 'hl': 'si'}, 'id': 'si'},
{'snippet': {'name': 'Thai', 'hl': 'th'}, 'id': 'th'},
{'snippet': {'name': 'Lao', 'hl': 'lo'}, 'id': 'lo'},
{'snippet': {'name': 'Myanmar (Burmese)', 'hl': 'my'}, 'id': 'my'},
{'snippet': {'name': 'Georgian', 'hl': 'ka'}, 'id': 'ka'},
{'snippet': {'name': 'Amharic', 'hl': 'am'}, 'id': 'am'},
{'snippet': {'name': 'Khmer', 'hl': 'km'}, 'id': 'km'},
{'snippet': {'name': 'Chinese', 'hl': 'zh-CN'}, 'id': 'zh-CN'},
{'snippet': {'name': 'Chinese (Taiwan)', 'hl': 'zh-TW'}, 'id': 'zh-TW'},
{'snippet': {'name': 'Chinese (Hong Kong)', 'hl': 'zh-HK'}, 'id': 'zh-HK'},
{'snippet': {'name': 'Japanese', 'hl': 'ja'}, 'id': 'ja'},
{'snippet': {'name': 'Korean', 'hl': 'ko'}, 'id': 'ko'},
]}
DEFAULT_REGIONS = {'items': [
{'snippet': {'gl': 'DZ', 'name': 'Algeria'}, 'id': 'DZ'},
{'snippet': {'gl': 'AR', 'name': 'Argentina'}, 'id': 'AR'},
{'snippet': {'gl': 'AU', 'name': 'Australia'}, 'id': 'AU'},
{'snippet': {'gl': 'AT', 'name': 'Austria'}, 'id': 'AT'},
{'snippet': {'gl': 'AZ', 'name': 'Azerbaijan'}, 'id': 'AZ'},
{'snippet': {'gl': 'BH', 'name': 'Bahrain'}, 'id': 'BH'},
{'snippet': {'gl': 'BY', 'name': 'Belarus'}, 'id': 'BY'},
{'snippet': {'gl': 'BE', 'name': 'Belgium'}, 'id': 'BE'},
{'snippet': {'gl': 'BA', 'name': 'Bosnia and Herzegovina'}, 'id': 'BA'},
{'snippet': {'gl': 'BR', 'name': 'Brazil'}, 'id': 'BR'},
{'snippet': {'gl': 'BG', 'name': 'Bulgaria'}, 'id': 'BG'},
{'snippet': {'gl': 'CA', 'name': 'Canada'}, 'id': 'CA'},
{'snippet': {'gl': 'CL', 'name': 'Chile'}, 'id': 'CL'},
{'snippet': {'gl': 'CO', 'name': 'Colombia'}, 'id': 'CO'},
{'snippet': {'gl': 'HR', 'name': 'Croatia'}, 'id': 'HR'},
{'snippet': {'gl': 'CZ', 'name': 'Czech Republic'}, 'id': 'CZ'},
{'snippet': {'gl': 'DK', 'name': 'Denmark'}, 'id': 'DK'},
{'snippet': {'gl': 'EG', 'name': 'Egypt'}, 'id': 'EG'},
{'snippet': {'gl': 'EE', 'name': 'Estonia'}, 'id': 'EE'},
{'snippet': {'gl': 'FI', 'name': 'Finland'}, 'id': 'FI'},
{'snippet': {'gl': 'FR', 'name': 'France'}, 'id': 'FR'},
{'snippet': {'gl': 'GE', 'name': 'Georgia'}, 'id': 'GE'},
{'snippet': {'gl': 'DE', 'name': 'Germany'}, 'id': 'DE'},
{'snippet': {'gl': 'GH', 'name': 'Ghana'}, 'id': 'GH'},
{'snippet': {'gl': 'GR', 'name': 'Greece'}, 'id': 'GR'},
{'snippet': {'gl': 'HK', 'name': 'Hong Kong'}, 'id': 'HK'},
{'snippet': {'gl': 'HU', 'name': 'Hungary'}, 'id': 'HU'},
{'snippet': {'gl': 'IS', 'name': 'Iceland'}, 'id': 'IS'},
{'snippet': {'gl': 'IN', 'name': 'India'}, 'id': 'IN'},
{'snippet': {'gl': 'ID', 'name': 'Indonesia'}, 'id': 'ID'},
{'snippet': {'gl': 'IQ', 'name': 'Iraq'}, 'id': 'IQ'},
{'snippet': {'gl': 'IE', 'name': 'Ireland'}, 'id': 'IE'},
{'snippet': {'gl': 'IL', 'name': 'Israel'}, 'id': 'IL'},
{'snippet': {'gl': 'IT', 'name': 'Italy'}, 'id': 'IT'},
{'snippet': {'gl': 'JM', 'name': 'Jamaica'}, 'id': 'JM'},
{'snippet': {'gl': 'JP', 'name': 'Japan'}, 'id': 'JP'},
{'snippet': {'gl': 'JO', 'name': 'Jordan'}, 'id': 'JO'},
{'snippet': {'gl': 'KZ', 'name': 'Kazakhstan'}, 'id': 'KZ'},
{'snippet': {'gl': 'KE', 'name': 'Kenya'}, 'id': 'KE'},
{'snippet': {'gl': 'KW', 'name': 'Kuwait'}, 'id': 'KW'},
{'snippet': {'gl': 'LV', 'name': 'Latvia'}, 'id': 'LV'},
{'snippet': {'gl': 'LB', 'name': 'Lebanon'}, 'id': 'LB'},
{'snippet': {'gl': 'LY', 'name': 'Libya'}, 'id': 'LY'},
{'snippet': {'gl': 'LT', 'name': 'Lithuania'}, 'id': 'LT'},
{'snippet': {'gl': 'LU', 'name': 'Luxembourg'}, 'id': 'LU'},
{'snippet': {'gl': 'MK', 'name': 'Macedonia'}, 'id': 'MK'},
{'snippet': {'gl': 'MY', 'name': 'Malaysia'}, 'id': 'MY'},
{'snippet': {'gl': 'MX', 'name': 'Mexico'}, 'id': 'MX'},
{'snippet': {'gl': 'ME', 'name': 'Montenegro'}, 'id': 'ME'},
{'snippet': {'gl': 'MA', 'name': 'Morocco'}, 'id': 'MA'},
{'snippet': {'gl': 'NP', 'name': 'Nepal'}, 'id': 'NP'},
{'snippet': {'gl': 'NL', 'name': 'Netherlands'}, 'id': 'NL'},
{'snippet': {'gl': 'NZ', 'name': 'New Zealand'}, 'id': 'NZ'},
{'snippet': {'gl': 'NG', 'name': 'Nigeria'}, 'id': 'NG'},
{'snippet': {'gl': 'NO', 'name': 'Norway'}, 'id': 'NO'},
{'snippet': {'gl': 'OM', 'name': 'Oman'}, 'id': 'OM'},
{'snippet': {'gl': 'PK', 'name': 'Pakistan'}, 'id': 'PK'},
{'snippet': {'gl': 'PE', 'name': 'Peru'}, 'id': 'PE'},
{'snippet': {'gl': 'PH', 'name': 'Philippines'}, 'id': 'PH'},
{'snippet': {'gl': 'PL', 'name': 'Poland'}, 'id': 'PL'},
{'snippet': {'gl': 'PT', 'name': 'Portugal'}, 'id': 'PT'},
{'snippet': {'gl': 'PR', 'name': 'Puerto Rico'}, 'id': 'PR'},
{'snippet': {'gl': 'QA', 'name': 'Qatar'}, 'id': 'QA'},
{'snippet': {'gl': 'RO', 'name': 'Romania'}, 'id': 'RO'},
{'snippet': {'gl': 'RU', 'name': 'Russia'}, 'id': 'RU'},
{'snippet': {'gl': 'SA', 'name': 'Saudi Arabia'}, 'id': 'SA'},
{'snippet': {'gl': 'SN', 'name': 'Senegal'}, 'id': 'SN'},
{'snippet': {'gl': 'RS', 'name': 'Serbia'}, 'id': 'RS'},
{'snippet': {'gl': 'SG', 'name': 'Singapore'}, 'id': 'SG'},
{'snippet': {'gl': 'SK', 'name': 'Slovakia'}, 'id': 'SK'},
{'snippet': {'gl': 'SI', 'name': 'Slovenia'}, 'id': 'SI'},
{'snippet': {'gl': 'ZA', 'name': 'South Africa'}, 'id': 'ZA'},
{'snippet': {'gl': 'KR', 'name': 'South Korea'}, 'id': 'KR'},
{'snippet': {'gl': 'ES', 'name': 'Spain'}, 'id': 'ES'},
{'snippet': {'gl': 'LK', 'name': 'Sri Lanka'}, 'id': 'LK'},
{'snippet': {'gl': 'SE', 'name': 'Sweden'}, 'id': 'SE'},
{'snippet': {'gl': 'CH', 'name': 'Switzerland'}, 'id': 'CH'},
{'snippet': {'gl': 'TW', 'name': 'Taiwan'}, 'id': 'TW'},
{'snippet': {'gl': 'TZ', 'name': 'Tanzania'}, 'id': 'TZ'},
{'snippet': {'gl': 'TH', 'name': 'Thailand'}, 'id': 'TH'},
{'snippet': {'gl': 'TN', 'name': 'Tunisia'}, 'id': 'TN'},
{'snippet': {'gl': 'TR', 'name': 'Turkey'}, 'id': 'TR'},
{'snippet': {'gl': 'UG', 'name': 'Uganda'}, 'id': 'UG'},
{'snippet': {'gl': 'UA', 'name': 'Ukraine'}, 'id': 'UA'},
{'snippet': {'gl': 'AE', 'name': 'United Arab Emirates'}, 'id': 'AE'},
{'snippet': {'gl': 'GB', 'name': 'United Kingdom'}, 'id': 'GB'},
{'snippet': {'gl': 'US', 'name': 'United States'}, 'id': 'US'},
{'snippet': {'gl': 'VN', 'name': 'Vietnam'}, 'id': 'VN'},
{'snippet': {'gl': 'YE', 'name': 'Yemen'}, 'id': 'YE'},
{'snippet': {'gl': 'ZW', 'name': 'Zimbabwe'}, 'id': 'ZW'},
]}


def _config_actions(context, action, *_args):
localize = context.localize
settings = context.get_settings()
Expand Down
25 changes: 18 additions & 7 deletions resources/lib/youtube_plugin/youtube/helper/stream_info.py
Original file line number Diff line number Diff line change
Expand Up @@ -1734,14 +1734,14 @@ def load_stream_info(self, video_id):
title.append(' [ASR]')

localize = context.localize
for _prop in ('multi_lang', 'multi_audio'):
for _prop in ('multi_language', 'multi_audio'):
if not main_stream.get(_prop):
continue
_prop = 'stream.' + _prop
title.extend((' [', localize(_prop), ']'))

if len(title) > 1:
yt_format['title'] = ''.join(yt_format['title'])
yt_format['title'] = ''.join(title)

stream_list['9999'] = yt_format

Expand Down Expand Up @@ -1822,7 +1822,7 @@ def _process_stream_data(self, stream_data, default_lang_code='und'):
codec = 'dts'
if codec not in isa_capabilities:
continue
preferred_codec = codec in stream_features
preferred_codec = codec.split('.')[0] in stream_features
media_type, container = mime_type.split('/')
bitrate = stream.get('bitrate', 0)

Expand Down Expand Up @@ -1853,6 +1853,14 @@ def _process_stream_data(self, stream_data, default_lang_code='und'):
elif role_type == 2:
role = 'description'
label = localize('stream.descriptive')
# Secondary language track
elif role_type == 6:
role = 'alternate'
label = localize('stream.alternate')
# Auto-dubbed language track
elif role_type == 10:
role = 'dub'
label = localize('stream.dubbed')
# Unsure of what other audio types are actually available
# Role set to "alternate" as default fallback
else:
Expand Down Expand Up @@ -1903,8 +1911,11 @@ def _process_stream_data(self, stream_data, default_lang_code='und'):
if fps > 30 and not allow_hfr:
continue

hdr = ('colorInfo' in stream
or 'HDR' in stream.get('qualityLabel', ''))
if 'colorInfo' in stream:
hdr = not any(value.endswith('BT709')
for value in stream['colorInfo'].values())
else:
hdr = 'HDR' in stream.get('qualityLabel', '')
if hdr and not allow_hdr:
continue

Expand Down Expand Up @@ -2114,7 +2125,7 @@ def _filter_group(previous_group, previous_stream, item):
main_stream = {
'audio': audio_data[0][1][0],
'multi_audio': False,
'multi_lang': False,
'multi_language': False,
}
if video_data:
main_stream['video'] = video_data[0][1][0]
Expand Down Expand Up @@ -2337,7 +2348,7 @@ def _filter_group(previous_group, previous_stream, item):
output = ''.join(output)

if len(languages.difference({'', 'und'})) > 1:
main_stream['multi_lang'] = True
main_stream['multi_language'] = True
if roles.difference({'', 'main', 'dub'}):
main_stream['multi_audio'] = True

Expand Down
10 changes: 8 additions & 2 deletions resources/lib/youtube_plugin/youtube/helper/subtitles.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,11 @@
urlsplit,
xbmcvfs,
)
from ...kodion.constants import PLAY_PROMPT_SUBTITLES, TEMP_PATH
from ...kodion.constants import (
TRANSLATION_LANGUAGES,
PLAY_PROMPT_SUBTITLES,
TEMP_PATH,
)
from ...kodion.network import BaseRequestsClass
from ...kodion.utils import make_dirs

Expand Down Expand Up @@ -94,6 +98,7 @@ def load(self, captions, headers=None):
self.renderer = captions.get('playerCaptionsTracklistRenderer', {})
self.caption_tracks = self.renderer.get('captionTracks', [])
self.translation_langs = self.renderer.get('translationLanguages', [])
self.translation_langs.extend(TRANSLATION_LANGUAGES)

try:
default_audio = self.renderer.get('defaultAudioTrackIndex')
Expand Down Expand Up @@ -466,7 +471,8 @@ def _get_track(self,
if sel_track:
return sel_track, sel_lang, sel_language, sel_kind

self._context.log_debug('Subtitles._get - no subtitle for: |{lang}|'
self._context.log_debug('Subtitles._get_track'
' - no subtitle for: |{lang}|'
.format(lang=lang))
return None, None, None, None

Expand Down
17 changes: 10 additions & 7 deletions resources/lib/youtube_plugin/youtube/helper/yt_play.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,13 +66,17 @@ def _play_stream(provider, context):
audio_only = True
else:
audio_only = settings.audio_only()
use_adaptive_formats = (not is_external
or settings.alternative_player_adaptive())

try:
streams = client.get_streams(context,
video_id,
ask_for_quality,
audio_only,
settings.use_mpd_videos())
streams = client.get_streams(
context,
video_id=video_id,
ask_for_quality=ask_for_quality,
audio_only=audio_only,
use_mpd=use_adaptive_formats and settings.use_mpd_videos(),
)
except YouTubeException as exc:
context.log_error('yt_play.play_video - {exc!r}:\n{details}'.format(
exc=exc, details=''.join(format_stack())
Expand All @@ -90,8 +94,7 @@ def _play_stream(provider, context):
streams,
ask_for_quality=ask_for_quality,
audio_only=audio_only,
use_adaptive_formats=(not is_external
or settings.alternative_player_adaptive()),
use_adaptive_formats=use_adaptive_formats,
)

if stream is None:
Expand Down

0 comments on commit 595d1c1

Please sign in to comment.