From e3a573ea977d31ab3fb4cfc73e2579ee85e75ae7 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 23 Mar 2015 13:19:21 -0400 Subject: [PATCH] update stream closing --- .../Playback/BaseStreamingService.cs | 11 +++-- .../Playback/Hls/DynamicHlsService.cs | 2 +- MediaBrowser.Api/Playback/MediaInfoService.cs | 5 ++- MediaBrowser.Model/ApiClient/IApiClient.cs | 5 --- MediaBrowser.Model/Dlna/StreamBuilder.cs | 35 +++++++++------- MediaBrowser.Model/Dlna/StreamInfo.cs | 16 ++----- MediaBrowser.Model/Dto/MediaSourceInfo.cs | 42 ++++++++++--------- .../MediaInfo/LiveMediaInfoResult.cs | 6 +-- 8 files changed, 61 insertions(+), 61 deletions(-) diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs index 5c857aa379..106085c46b 100644 --- a/MediaBrowser.Api/Playback/BaseStreamingService.cs +++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs @@ -134,7 +134,8 @@ namespace MediaBrowser.Api.Playback var data = GetCommandLineArguments("dummy\\dummy", "dummyTranscodingId", state, false); data += "-" + (state.Request.DeviceId ?? string.Empty); - data += "-" + (state.Request.StreamId ?? state.Request.ClientTime ?? string.Empty); + data += "-" + (state.Request.StreamId ?? string.Empty); + data += "-" + (state.Request.ClientTime ?? string.Empty); var dataHash = data.GetMD5().ToString("N"); @@ -1054,7 +1055,7 @@ namespace MediaBrowser.Api.Playback } var transcodingJob = ApiEntryPoint.Instance.OnTranscodeBeginning(outputPath, - state.Request.StreamId ?? state.Request.ClientTime, + state.Request.StreamId, transcodingId, TranscodingJobType, process, @@ -1524,7 +1525,7 @@ namespace MediaBrowser.Api.Playback } else if (i == 16) { - request.StreamId = val; + request.ClientTime = val; } else if (i == 17) { @@ -1554,6 +1555,10 @@ namespace MediaBrowser.Api.Playback videoRequest.Cabac = string.Equals("true", val, StringComparison.OrdinalIgnoreCase); } } + else if (i == 21) + { + request.StreamId = val; + } } } diff --git a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs index 43a9db1312..e35570f765 100644 --- a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs +++ b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs @@ -136,7 +136,7 @@ namespace MediaBrowser.Api.Playback.Hls // If the playlist doesn't already exist, startup ffmpeg try { - ApiEntryPoint.Instance.KillTranscodingJobs(request.DeviceId, request.StreamId ?? request.ClientTime, p => false); + ApiEntryPoint.Instance.KillTranscodingJobs(request.DeviceId, request.StreamId, p => false); if (currentTranscodingIndex.HasValue) { diff --git a/MediaBrowser.Api/Playback/MediaInfoService.cs b/MediaBrowser.Api/Playback/MediaInfoService.cs index 943d9fe481..2a17b2fe8f 100644 --- a/MediaBrowser.Api/Playback/MediaInfoService.cs +++ b/MediaBrowser.Api/Playback/MediaInfoService.cs @@ -1,10 +1,10 @@ -using System; -using MediaBrowser.Controller.Library; +using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Net; using MediaBrowser.Model.Dlna; using MediaBrowser.Model.Dto; using MediaBrowser.Model.MediaInfo; using ServiceStack; +using System; using System.Collections.Generic; using System.Linq; using System.Threading; @@ -68,6 +68,7 @@ namespace MediaBrowser.Api.Playback } result.MediaSources = mediaSources.ToList(); + result.StreamId = Guid.NewGuid().ToString("N"); return ToOptimizedResult(result); } diff --git a/MediaBrowser.Model/ApiClient/IApiClient.cs b/MediaBrowser.Model/ApiClient/IApiClient.cs index c5b74c5c10..14cdbdc9ab 100644 --- a/MediaBrowser.Model/ApiClient/IApiClient.cs +++ b/MediaBrowser.Model/ApiClient/IApiClient.cs @@ -37,11 +37,6 @@ namespace MediaBrowser.Model.ApiClient /// event EventHandler> RemoteLoggedOut; - /// - /// Occurs when [authenticated]. - /// - event EventHandler> Authenticated; - /// /// Gets the API URL. /// diff --git a/MediaBrowser.Model/Dlna/StreamBuilder.cs b/MediaBrowser.Model/Dlna/StreamBuilder.cs index 6edbe00daf..51c63b5cb4 100644 --- a/MediaBrowser.Model/Dlna/StreamBuilder.cs +++ b/MediaBrowser.Model/Dlna/StreamBuilder.cs @@ -92,6 +92,13 @@ namespace MediaBrowser.Model.Dlna // Grab the first one that can be direct streamed // If that doesn't produce anything, just take the first foreach (StreamInfo i in streams) + { + if (i.PlayMethod == PlayMethod.DirectPlay && i.MediaSource.Protocol == MediaProtocol.File) + { + return i; + } + } + foreach (StreamInfo i in streams) { if (i.PlayMethod == PlayMethod.DirectPlay) { @@ -128,12 +135,12 @@ namespace MediaBrowser.Model.Dlna DeviceProfile = options.Profile }; - List directPlayMethods = GetAudioDirectPlayMethods(item, options); + MediaStream audioStream = item.GetDefaultAudioStream(null); + + List directPlayMethods = GetAudioDirectPlayMethods(item, audioStream, options); if (directPlayMethods.Count > 0) { - MediaStream audioStream = item.DefaultAudioStream; - string audioCodec = audioStream == null ? null : audioStream.Codec; // Make sure audio codec profiles are satisfied @@ -256,10 +263,8 @@ namespace MediaBrowser.Model.Dlna return playlistItem; } - private List GetAudioDirectPlayMethods(MediaSourceInfo item, AudioOptions options) + private List GetAudioDirectPlayMethods(MediaSourceInfo item, MediaStream audioStream, AudioOptions options) { - MediaStream audioStream = item.DefaultAudioStream; - DirectPlayProfile directPlayProfile = null; foreach (DirectPlayProfile i in options.Profile.DirectPlayProfiles) { @@ -303,12 +308,12 @@ namespace MediaBrowser.Model.Dlna DeviceProfile = options.Profile }; - int? audioStreamIndex = options.AudioStreamIndex ?? item.DefaultAudioStreamIndex; playlistItem.SubtitleStreamIndex = options.SubtitleStreamIndex ?? item.DefaultSubtitleStreamIndex; - - MediaStream audioStream = audioStreamIndex.HasValue ? item.GetMediaStream(MediaStreamType.Audio, audioStreamIndex.Value) : null; MediaStream subtitleStream = playlistItem.SubtitleStreamIndex.HasValue ? item.GetMediaStream(MediaStreamType.Subtitle, playlistItem.SubtitleStreamIndex.Value) : null; + MediaStream audioStream = item.GetDefaultAudioStream(options.AudioStreamIndex ?? item.DefaultAudioStreamIndex); + int? audioStreamIndex = audioStream == null ? (int?)null : audioStream.Index; + MediaStream videoStream = item.VideoStream; int? maxBitrateSetting = options.GetMaxBitrate(); @@ -325,7 +330,7 @@ namespace MediaBrowser.Model.Dlna if (subtitleStream != null) { - SubtitleProfile subtitleProfile = GetSubtitleProfile(subtitleStream, options.Profile, options.Context); + SubtitleProfile subtitleProfile = GetSubtitleProfile(subtitleStream, options.Profile.SubtitleProfiles, options.Context); playlistItem.SubtitleDeliveryMethod = subtitleProfile.Method; playlistItem.SubtitleFormat = subtitleProfile.Format; @@ -355,7 +360,7 @@ namespace MediaBrowser.Model.Dlna if (subtitleStream != null) { - SubtitleProfile subtitleProfile = GetSubtitleProfile(subtitleStream, options.Profile, options.Context); + SubtitleProfile subtitleProfile = GetSubtitleProfile(subtitleStream, options.Profile.SubtitleProfiles, options.Context); playlistItem.SubtitleDeliveryMethod = subtitleProfile.Method; playlistItem.SubtitleFormat = subtitleProfile.Format; @@ -597,7 +602,7 @@ namespace MediaBrowser.Model.Dlna { if (subtitleStream != null) { - SubtitleProfile subtitleProfile = GetSubtitleProfile(subtitleStream, options.Profile, options.Context); + SubtitleProfile subtitleProfile = GetSubtitleProfile(subtitleStream, options.Profile.SubtitleProfiles, options.Context); if (subtitleProfile.Method != SubtitleDeliveryMethod.External && subtitleProfile.Method != SubtitleDeliveryMethod.Embed) { @@ -608,10 +613,10 @@ namespace MediaBrowser.Model.Dlna return IsAudioEligibleForDirectPlay(item, maxBitrate); } - public static SubtitleProfile GetSubtitleProfile(MediaStream subtitleStream, DeviceProfile deviceProfile, EncodingContext context) + public static SubtitleProfile GetSubtitleProfile(MediaStream subtitleStream, SubtitleProfile[] subtitleProfiles, EncodingContext context) { // Look for an external profile that matches the stream type (text/graphical) - foreach (SubtitleProfile profile in deviceProfile.SubtitleProfiles) + foreach (SubtitleProfile profile in subtitleProfiles) { if (profile.Method == SubtitleDeliveryMethod.External && subtitleStream.IsTextSubtitleStream == MediaStream.IsTextFormat(profile.Format)) { @@ -628,7 +633,7 @@ namespace MediaBrowser.Model.Dlna } } - foreach (SubtitleProfile profile in deviceProfile.SubtitleProfiles) + foreach (SubtitleProfile profile in subtitleProfiles) { if (profile.Method == SubtitleDeliveryMethod.Embed && subtitleStream.IsTextSubtitleStream == MediaStream.IsTextFormat(profile.Format)) { diff --git a/MediaBrowser.Model/Dlna/StreamInfo.cs b/MediaBrowser.Model/Dlna/StreamInfo.cs index 9e75619672..fe7ff7d4c9 100644 --- a/MediaBrowser.Model/Dlna/StreamInfo.cs +++ b/MediaBrowser.Model/Dlna/StreamInfo.cs @@ -69,6 +69,8 @@ namespace MediaBrowser.Model.Dlna public SubtitleDeliveryMethod SubtitleDeliveryMethod { get; set; } public string SubtitleFormat { get; set; } + public LiveMediaInfoResult PlaybackInfo { get; set; } + public string MediaSourceId { get @@ -262,7 +264,7 @@ namespace MediaBrowser.Model.Dlna private SubtitleStreamInfo GetSubtitleStreamInfo(MediaStream stream) { - SubtitleProfile subtitleProfile = StreamBuilder.GetSubtitleProfile(stream, DeviceProfile, Context); + SubtitleProfile subtitleProfile = StreamBuilder.GetSubtitleProfile(stream, DeviceProfile.SubtitleProfiles, Context); if (subtitleProfile.Method != SubtitleDeliveryMethod.External) { @@ -288,17 +290,7 @@ namespace MediaBrowser.Model.Dlna { if (MediaSource != null) { - if (AudioStreamIndex.HasValue) - { - foreach (MediaStream i in MediaSource.MediaStreams) - { - if (i.Index == AudioStreamIndex.Value && i.Type == MediaStreamType.Audio) - return i; - } - return null; - } - - return MediaSource.DefaultAudioStream; + return MediaSource.GetDefaultAudioStream(AudioStreamIndex); } return null; diff --git a/MediaBrowser.Model/Dto/MediaSourceInfo.cs b/MediaBrowser.Model/Dto/MediaSourceInfo.cs index 3a9c1e7d4f..5495a1f692 100644 --- a/MediaBrowser.Model/Dto/MediaSourceInfo.cs +++ b/MediaBrowser.Model/Dto/MediaSourceInfo.cs @@ -57,39 +57,41 @@ namespace MediaBrowser.Model.Dto [IgnoreDataMember] public MediaStream DefaultAudioStream { - get - { - if (DefaultAudioStreamIndex.HasValue) - { - var val = DefaultAudioStreamIndex.Value; + get { return GetDefaultAudioStream(DefaultAudioStreamIndex); } + } - foreach (MediaStream i in MediaStreams) - { - if (i.Type == MediaStreamType.Audio && i.Index == val) - { - return i; - } - } - } + public MediaStream GetDefaultAudioStream(int? defaultIndex) + { + if (defaultIndex.HasValue) + { + var val = defaultIndex.Value; foreach (MediaStream i in MediaStreams) { - if (i.Type == MediaStreamType.Audio && i.IsDefault) + if (i.Type == MediaStreamType.Audio && i.Index == val) { return i; } } + } - foreach (MediaStream i in MediaStreams) + foreach (MediaStream i in MediaStreams) + { + if (i.Type == MediaStreamType.Audio && i.IsDefault) { - if (i.Type == MediaStreamType.Audio) - { - return i; - } + return i; } + } - return null; + foreach (MediaStream i in MediaStreams) + { + if (i.Type == MediaStreamType.Audio) + { + return i; + } } + + return null; } [IgnoreDataMember] diff --git a/MediaBrowser.Model/MediaInfo/LiveMediaInfoResult.cs b/MediaBrowser.Model/MediaInfo/LiveMediaInfoResult.cs index 4a206ea202..16f4f76ee4 100644 --- a/MediaBrowser.Model/MediaInfo/LiveMediaInfoResult.cs +++ b/MediaBrowser.Model/MediaInfo/LiveMediaInfoResult.cs @@ -13,10 +13,10 @@ namespace MediaBrowser.Model.MediaInfo public List MediaSources { get; set; } /// - /// Gets or sets the live stream identifier. + /// Gets or sets the stream identifier. /// - /// The live stream identifier. - public string LiveStreamId { get; set; } + /// The stream identifier. + public string StreamId { get; set; } /// /// Gets or sets the error code.