aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Model
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Model')
-rw-r--r--MediaBrowser.Model/ApiClient/IApiClient.cs8
-rw-r--r--MediaBrowser.Model/ApiClient/IConnectionManager.cs8
-rw-r--r--MediaBrowser.Model/Dlna/Profiles/DefaultProfile.cs14
-rw-r--r--MediaBrowser.Model/Dlna/StreamBuilder.cs81
-rw-r--r--MediaBrowser.Model/Dlna/StreamInfo.cs19
-rw-r--r--MediaBrowser.Model/Dto/MediaSourceInfo.cs42
-rw-r--r--MediaBrowser.Model/MediaInfo/LiveMediaInfoResult.cs6
-rw-r--r--MediaBrowser.Model/Sync/LocalItemQuery.cs2
8 files changed, 97 insertions, 83 deletions
diff --git a/MediaBrowser.Model/ApiClient/IApiClient.cs b/MediaBrowser.Model/ApiClient/IApiClient.cs
index ef99e444f..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>
@@ -690,8 +685,9 @@ namespace MediaBrowser.Model.ApiClient
/// Stops the transcoding processes.
/// </summary>
/// <param name="deviceId">The device identifier.</param>
+ /// <param name="streamId">The stream identifier.</param>
/// <returns>Task.</returns>
- Task StopTranscodingProcesses(string deviceId);
+ Task StopTranscodingProcesses(string deviceId, string streamId);
/// <summary>
/// Sets the index of the audio stream.
diff --git a/MediaBrowser.Model/ApiClient/IConnectionManager.cs b/MediaBrowser.Model/ApiClient/IConnectionManager.cs
index 6ff48a044..84a815dfc 100644
--- a/MediaBrowser.Model/ApiClient/IConnectionManager.cs
+++ b/MediaBrowser.Model/ApiClient/IConnectionManager.cs
@@ -35,7 +35,13 @@ namespace MediaBrowser.Model.ApiClient
/// Occurs when [remote logged out].
/// </summary>
event EventHandler<EventArgs> RemoteLoggedOut;
-
+
+ /// <summary>
+ /// Gets the device.
+ /// </summary>
+ /// <value>The device.</value>
+ IDevice Device { get; }
+
/// <summary>
/// Gets the connect user.
/// </summary>
diff --git a/MediaBrowser.Model/Dlna/Profiles/DefaultProfile.cs b/MediaBrowser.Model/Dlna/Profiles/DefaultProfile.cs
index 959f8b801..c9db9fbf8 100644
--- a/MediaBrowser.Model/Dlna/Profiles/DefaultProfile.cs
+++ b/MediaBrowser.Model/Dlna/Profiles/DefaultProfile.cs
@@ -13,13 +13,13 @@ namespace MediaBrowser.Model.Dlna.Profiles
XDlnaDoc = "DMS-1.50";
- FriendlyName = "Media Browser";
- Manufacturer = "Media Browser";
- ModelDescription = "Media Browser";
- ModelName = "Media Browser";
- ModelNumber = "Media Browser";
- ModelUrl = "http://mediabrowser.tv/";
- ManufacturerUrl = "http://mediabrowser.tv/";
+ FriendlyName = "Emby";
+ Manufacturer = "Emby";
+ ModelDescription = "Emby";
+ ModelName = "Emby";
+ ModelNumber = "Emby";
+ ModelUrl = "http://emby.media/";
+ ManufacturerUrl = "http://emby.media/";
AlbumArtPn = "JPEG_SM";
diff --git a/MediaBrowser.Model/Dlna/StreamBuilder.cs b/MediaBrowser.Model/Dlna/StreamBuilder.cs
index 6edbe00da..3f88f9ac0 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,20 +308,22 @@ 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();
+ // TODO: This doesn't accout for situation of device being able to handle media bitrate, but wifi connection not fast enough
+ bool isEligibleForDirectPlay = IsEligibleForDirectPlay(item, options.Profile.MaxStaticBitrate, subtitleStream, options);
+ bool isEligibleForDirectStream = IsEligibleForDirectPlay(item, options.GetMaxBitrate(), subtitleStream, options);
- if (IsEligibleForDirectPlay(item, maxBitrateSetting, subtitleStream, options))
+ if (isEligibleForDirectPlay || isEligibleForDirectStream)
{
// See if it can be direct played
- var directPlay = GetVideoDirectPlayProfile(options, options.Profile, item, videoStream, audioStream);
+ PlayMethod? directPlay = GetVideoDirectPlayProfile(options.Profile, item, videoStream, audioStream, isEligibleForDirectPlay, isEligibleForDirectStream);
if (directPlay != null)
{
@@ -325,7 +332,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 +362,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;
@@ -411,6 +418,7 @@ namespace MediaBrowser.Model.Dlna
playlistItem.AudioBitrate = GetAudioBitrate(playlistItem.TargetAudioChannels, playlistItem.TargetAudioCodec);
}
+ int? maxBitrateSetting = options.GetMaxBitrate();
// Honor max rate
if (maxBitrateSetting.HasValue)
{
@@ -443,11 +451,12 @@ namespace MediaBrowser.Model.Dlna
return 128000;
}
- private PlayMethod? GetVideoDirectPlayProfile(VideoOptions options,
- DeviceProfile profile,
+ private PlayMethod? GetVideoDirectPlayProfile(DeviceProfile profile,
MediaSourceInfo mediaSource,
MediaStream videoStream,
- MediaStream audioStream)
+ MediaStream audioStream,
+ bool isEligibleForDirectPlay,
+ bool isEligibleForDirectStream)
{
// See if it can be direct played
DirectPlayProfile directPlay = null;
@@ -566,28 +575,34 @@ namespace MediaBrowser.Model.Dlna
}
}
- if (mediaSource.Protocol == MediaProtocol.Http)
+ if (isEligibleForDirectPlay)
{
- if (_localPlayer.CanAccessUrl(mediaSource.Path, mediaSource.RequiredHttpHeaders.Count > 0))
+ if (mediaSource.Protocol == MediaProtocol.Http)
{
- return PlayMethod.DirectPlay;
+ if (_localPlayer.CanAccessUrl(mediaSource.Path, mediaSource.RequiredHttpHeaders.Count > 0))
+ {
+ return PlayMethod.DirectPlay;
+ }
}
- }
- else if (mediaSource.Protocol == MediaProtocol.File)
- {
- if (_localPlayer.CanAccessFile(mediaSource.Path))
+ else if (mediaSource.Protocol == MediaProtocol.File)
{
- return PlayMethod.DirectPlay;
+ if (_localPlayer.CanAccessFile(mediaSource.Path))
+ {
+ return PlayMethod.DirectPlay;
+ }
}
}
- if (!mediaSource.SupportsDirectStream)
+ if (isEligibleForDirectStream)
{
- return null;
+ if (mediaSource.SupportsDirectStream)
+ {
+ return PlayMethod.DirectStream;
+ }
}
-
- return PlayMethod.DirectStream;
+
+ return null;
}
private bool IsEligibleForDirectPlay(MediaSourceInfo item,
@@ -597,7 +612,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 +623,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 +643,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..4eb1c0a8e 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
@@ -149,6 +151,9 @@ namespace MediaBrowser.Model.Dlna
list.Add(item.VideoProfile ?? string.Empty);
list.Add(item.Cabac.HasValue ? item.Cabac.Value.ToString() : string.Empty);
+ string streamId = item.PlaybackInfo == null ? null : item.PlaybackInfo.StreamId;
+ list.Add(streamId ?? string.Empty);
+
return string.Format("Params={0}", string.Join(";", list.ToArray()));
}
@@ -262,7 +267,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 +293,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.
diff --git a/MediaBrowser.Model/Sync/LocalItemQuery.cs b/MediaBrowser.Model/Sync/LocalItemQuery.cs
index 099392908..795a557ca 100644
--- a/MediaBrowser.Model/Sync/LocalItemQuery.cs
+++ b/MediaBrowser.Model/Sync/LocalItemQuery.cs
@@ -4,7 +4,7 @@ namespace MediaBrowser.Model.Sync
public class LocalItemQuery
{
public string ServerId { get; set; }
- public string AlbumArtist { get; set; }
+ public string AlbumArtistId { get; set; }
public string AlbumId { get; set; }
public string SeriesId { get; set; }
public string Type { get; set; }