aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2015-03-23 13:19:21 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2015-03-23 13:19:21 -0400
commite3a573ea977d31ab3fb4cfc73e2579ee85e75ae7 (patch)
tree64c51955b526488872c5ce1947ef15e346970cb4
parent30a507eca84a314578e1ae07c899a5bff97a56c6 (diff)
update stream closing
-rw-r--r--MediaBrowser.Api/Playback/BaseStreamingService.cs11
-rw-r--r--MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs2
-rw-r--r--MediaBrowser.Api/Playback/MediaInfoService.cs5
-rw-r--r--MediaBrowser.Model/ApiClient/IApiClient.cs5
-rw-r--r--MediaBrowser.Model/Dlna/StreamBuilder.cs35
-rw-r--r--MediaBrowser.Model/Dlna/StreamInfo.cs16
-rw-r--r--MediaBrowser.Model/Dto/MediaSourceInfo.cs42
-rw-r--r--MediaBrowser.Model/MediaInfo/LiveMediaInfoResult.cs6
8 files changed, 61 insertions, 61 deletions
diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs
index 5c857aa37..106085c46 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 43a9db131..e35570f76 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 943d9fe48..2a17b2fe8 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 c5b74c5c1..14cdbdc9a 100644
--- a/MediaBrowser.Model/ApiClient/IApiClient.cs
+++ b/MediaBrowser.Model/ApiClient/IApiClient.cs
@@ -38,11 +38,6 @@ namespace MediaBrowser.Model.ApiClient
event EventHandler<GenericEventArgs<RemoteLogoutReason>> RemoteLoggedOut;
/// <summary>
- /// Occurs when [authenticated].
- /// </summary>
- event EventHandler<GenericEventArgs<AuthenticationResult>> Authenticated;
-
- /// <summary>
/// Gets the API URL.
/// </summary>
/// <param name="handler">The handler.</param>
diff --git a/MediaBrowser.Model/Dlna/StreamBuilder.cs b/MediaBrowser.Model/Dlna/StreamBuilder.cs
index 6edbe00da..51c63b5cb 100644
--- a/MediaBrowser.Model/Dlna/StreamBuilder.cs
+++ b/MediaBrowser.Model/Dlna/StreamBuilder.cs
@@ -93,6 +93,13 @@ namespace MediaBrowser.Model.Dlna
// 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)
{
return i;
@@ -128,12 +135,12 @@ namespace MediaBrowser.Model.Dlna
DeviceProfile = options.Profile
};
- List<PlayMethod> directPlayMethods = GetAudioDirectPlayMethods(item, options);
+ MediaStream audioStream = item.GetDefaultAudioStream(null);
+
+ List<PlayMethod> 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<PlayMethod> GetAudioDirectPlayMethods(MediaSourceInfo item, AudioOptions options)
+ private List<PlayMethod> 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 9e7561967..fe7ff7d4c 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 3a9c1e7d4..5495a1f69 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 4a206ea20..16f4f76ee 100644
--- a/MediaBrowser.Model/MediaInfo/LiveMediaInfoResult.cs
+++ b/MediaBrowser.Model/MediaInfo/LiveMediaInfoResult.cs
@@ -13,10 +13,10 @@ namespace MediaBrowser.Model.MediaInfo
public List<MediaSourceInfo> MediaSources { get; set; }
/// <summary>
- /// Gets or sets the live stream identifier.
+ /// Gets or sets the stream identifier.
/// </summary>
- /// <value>The live stream identifier.</value>
- public string LiveStreamId { get; set; }
+ /// <value>The stream identifier.</value>
+ public string StreamId { get; set; }
/// <summary>
/// Gets or sets the error code.