From f3c8ba707773394fe9162a9cbac0abb330f8329d Mon Sep 17 00:00:00 2001 From: angelblue05 Date: Thu, 21 Jan 2016 11:10:01 -0600 Subject: [PATCH] New transcode method for subs Extract subtitles and append them to the player, rather than burning them (burning them would result in playback failure 80% of the time) --- resources/lib/playbackutils.py | 4 ++-- resources/lib/playutils.py | 25 +++++++++++++++++++++---- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/resources/lib/playbackutils.py b/resources/lib/playbackutils.py index 4ab5ba0f..3ec60b64 100644 --- a/resources/lib/playbackutils.py +++ b/resources/lib/playbackutils.py @@ -189,7 +189,7 @@ class PlaybackUtils(): # For transcoding only, ask for audio/subs pref if utils.window('emby_%s.playmethod' % playurl) == "Transcode": - playurl = playutils.audioSubsPref(playurl) + playurl = playutils.audioSubsPref(playurl, listitem) utils.window('emby_%s.playmethod' % playurl, value="Transcode") listitem.setPath(playurl) @@ -232,7 +232,7 @@ class PlaybackUtils(): playmethod = utils.window('%s.playmethod' % embyitem) # Only for direct play and direct stream subtitles = self.externalSubs(playurl) - if playmethod in ("DirectStream", "Transcode"): + if playmethod != "Transcode": # Direct play automatically appends external listitem.setSubtitles(subtitles) diff --git a/resources/lib/playutils.py b/resources/lib/playutils.py index 10575a71..8b5474aa 100644 --- a/resources/lib/playutils.py +++ b/resources/lib/playutils.py @@ -323,7 +323,7 @@ class PlayUtils(): # max bit rate supported by server (max signed 32bit integer) return bitrate.get(videoQuality, 2147483) - def audioSubsPref(self, url): + def audioSubsPref(self, url, listitem): # For transcoding only # Present the list of audio to select from audioStreamsList = {} @@ -331,6 +331,7 @@ class PlayUtils(): audioStreamsChannelsList = {} subtitleStreamsList = {} subtitleStreams = ['No subtitles'] + downloadableStreams = [] selectAudioIndex = "" selectSubsIndex = "" playurlprefs = "%s" % url @@ -361,8 +362,8 @@ class PlayUtils(): audioStreams.append(track) elif 'Subtitle' in type: - if stream['IsExternal']: - continue + '''if stream['IsExternal']: + continue''' try: track = "%s - %s" % (index, stream['Language']) except: @@ -370,10 +371,14 @@ class PlayUtils(): default = stream['IsDefault'] forced = stream['IsForced'] + downloadable = stream['IsTextSubtitleStream'] + if default: track = "%s - Default" % track if forced: track = "%s - Forced" % track + if downloadable: + downloadableStreams.append(index) subtitleStreamsList[track] = index subtitleStreams.append(track) @@ -401,7 +406,19 @@ class PlayUtils(): # User selected subtitles selected = subtitleStreams[resp] selectSubsIndex = subtitleStreamsList[selected] - playurlprefs += "&SubtitleStreamIndex=%s" % selectSubsIndex + + # Load subtitles in the listitem if downloadable + if selectSubsIndex in downloadableStreams: + + itemid = item['Id'] + url = [("%s/Videos/%s/%s/Subtitles/%s/Stream.srt" + % (self.server, itemid, itemid, selectSubsIndex))] + self.logMsg("Set up subtitles: %s %s" % (selectSubsIndex, url), 1) + listitem.setSubtitles(url) + else: + # Burn subtitles + playurlprefs += "&SubtitleStreamIndex=%s" % selectSubsIndex + else: # User backed out of selection playurlprefs += "&SubtitleStreamIndex=%s" % mediasources.get('DefaultSubtitleStreamIndex', "")