mirror of
https://github.com/jellyfin/jellyfin-kodi.git
synced 2025-06-18 06:06:14 +00:00
Added audio/sub selection for transcoding
Also fixed transcoding not terminating as it should and leaving the ffmpeg running.
This commit is contained in:
parent
68245268ba
commit
ecaaa11deb
3 changed files with 132 additions and 176 deletions
|
@ -210,11 +210,6 @@ class PlayUtils():
|
|||
deviceId = self.clientInfo.getMachineId()
|
||||
playurl = "%s/mediabrowser/Videos/%s/master.m3u8?mediaSourceId=%s" % (server, id, id)
|
||||
playurl = "%s&VideoCodec=h264&AudioCodec=aac,ac3&deviceId=%s&VideoBitrate=%s" % (playurl, deviceId, self.getVideoBitRate()*1000)
|
||||
|
||||
mediaSources = result[u'MediaSources']
|
||||
prefs = self.audioSubsPref(mediaSources)
|
||||
|
||||
playurl = "%s%s" % (playurl, prefs)
|
||||
self.logMsg("Playurl: %s" % playurl)
|
||||
|
||||
return playurl
|
||||
|
@ -312,110 +307,4 @@ class PlayUtils():
|
|||
return True
|
||||
else:
|
||||
self.logMsg("Path is detected as follow: %s. Try direct streaming." % path, 2)
|
||||
return False
|
||||
|
||||
def audioSubsPref(self, mediaSources):
|
||||
|
||||
addon = xbmcaddon.Addon()
|
||||
|
||||
defaultAudio = mediaSources[0][u'DefaultAudioStreamIndex']
|
||||
playurlprefs = "&AudioStreamIndex=%s" % defaultAudio
|
||||
|
||||
codecs = [
|
||||
# Possible codecs
|
||||
u'und', u'ac3', u'dts', u'5.1', u'aac', u'mp3', u'dca'
|
||||
]
|
||||
|
||||
try:
|
||||
mediaStream = mediaSources[0].get('MediaStreams')
|
||||
audiotracks = {}
|
||||
substracks = {}
|
||||
defaultSubs = None
|
||||
|
||||
for stream in mediaStream:
|
||||
# Since Emby returns all possible tracks together, have to sort them.
|
||||
if u'Audio' in stream[u'Type']:
|
||||
if u'Language' in stream:
|
||||
audiotracks[stream[u'Language']] = stream[u'Index']
|
||||
else:
|
||||
audiotracks[stream[u'Codec']] = stream[u'Index']
|
||||
|
||||
if u'Subtitle' in stream[u'Type']:
|
||||
if u'Language' in stream:
|
||||
substracks[stream[u'Language']] = stream[u'Index']
|
||||
if stream[u'IsDefault'] == True:
|
||||
defaultSubs = stream[u'Language']
|
||||
else:
|
||||
substracks[stream[u'Codec']] = stream[u'Index']
|
||||
if stream[u'IsDefault']:
|
||||
defaultSubs = stream[u'Codec']
|
||||
|
||||
self.logMsg("%s %s %s" % (defaultSubs, audiotracks, substracks), 1)
|
||||
|
||||
if len(audiotracks) == 1 and len(substracks) == 0:
|
||||
# There's only one audio track and no subtitles
|
||||
playurlprefs = "&AudioStreamIndex=%s" % defaultAudio
|
||||
return playurlprefs
|
||||
|
||||
codec_intrack = False
|
||||
for codec in codecs:
|
||||
for track in audiotracks:
|
||||
if codec in track:
|
||||
codec_intrack = True
|
||||
|
||||
if self.audioPref in audiotracks:
|
||||
self.logMsg("Door 1", 2)
|
||||
# Audio pref is available
|
||||
playurlprefs = "&AudioStreamIndex=%s" % audiotracks[self.audioPref]
|
||||
|
||||
if addon.getSetting('subsoverride') == "true":
|
||||
# Subs are forced.
|
||||
if self.subsPref in substracks:
|
||||
self.logMsg("Door 1.1", 2)
|
||||
playurlprefs = "%s&SubtitleStreamIndex=%s" % (playurlprefs, substracks[self.subsPref])
|
||||
else:
|
||||
# Use default subs
|
||||
if defaultSubs != None:
|
||||
self.logMsg("Door 1.2", 2)
|
||||
playurlprefs = "%s&SubtitleStreamIndex=%s" % (playurlprefs, substracks[defaultSubs])
|
||||
|
||||
elif (len(audiotracks) == 1) and not codec_intrack:
|
||||
self.logMsg("Door 2", 2)
|
||||
# 1. There's one audio track.
|
||||
# 2. The audio is defined as a language.
|
||||
# 3. Audio pref is not available, guaranteed.
|
||||
playurlprefs = "&AudioStreamIndex=%s" % defaultAudio
|
||||
|
||||
if self.subsPref in substracks:
|
||||
self.logMsg("Door 2.1", 2)
|
||||
# Subs pref is available.
|
||||
playurlprefs = "%s&SubtitleStreamIndex=%s" % (playurlprefs, substracks[self.subsPref])
|
||||
else:
|
||||
# Use default subs
|
||||
if defaultSubs != None:
|
||||
self.logMsg("Door 2.2", 2)
|
||||
playurlprefs = "%s&SubtitleStreamIndex=%s" % (playurlprefs, substracks[defaultSubs])
|
||||
|
||||
elif len(audiotracks) == 1 and codec_intrack:
|
||||
self.logMsg("Door 3", 2)
|
||||
# 1. There one audio track.
|
||||
# 2. The audio is undefined or a codec.
|
||||
# 3. Audio track is mislabeled.
|
||||
playurlprefs = "&AudioStreamIndex=%s" % defaultAudio
|
||||
|
||||
if self.subsPref in substracks:
|
||||
# If the subtitle is available, only display
|
||||
# if the setting is enabled.
|
||||
if addon.getSetting('subsoverride') == "true":
|
||||
# Subs are forced.
|
||||
self.logMsg("Door 3.1", 2)
|
||||
playurlprefs = "%s&SubtitleStreamIndex=%s" % (playurlprefs, substracks[self.subsPref])
|
||||
else:
|
||||
# Use default subs
|
||||
if defaultSubs != None:
|
||||
self.logMsg("Door 3.2", 2)
|
||||
playurlprefs = "%s&SubtitleStreamIndex=%s" % (playurlprefs, substracks[defaultSubs])
|
||||
|
||||
except: pass
|
||||
|
||||
return playurlprefs
|
||||
return False
|
Loading…
Add table
Add a link
Reference in a new issue