diff options
Diffstat (limited to 'MediaBrowser.Model')
| -rw-r--r-- | MediaBrowser.Model/ApiClient/IApiClient.cs | 8 | ||||
| -rw-r--r-- | MediaBrowser.Model/ApiClient/IConnectionManager.cs | 8 | ||||
| -rw-r--r-- | MediaBrowser.Model/Dlna/Profiles/DefaultProfile.cs | 14 | ||||
| -rw-r--r-- | MediaBrowser.Model/Dlna/StreamBuilder.cs | 81 | ||||
| -rw-r--r-- | MediaBrowser.Model/Dlna/StreamInfo.cs | 19 | ||||
| -rw-r--r-- | MediaBrowser.Model/Dto/MediaSourceInfo.cs | 42 | ||||
| -rw-r--r-- | MediaBrowser.Model/MediaInfo/LiveMediaInfoResult.cs | 6 | ||||
| -rw-r--r-- | MediaBrowser.Model/Sync/LocalItemQuery.cs | 2 |
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; } |
