diff options
| -rw-r--r-- | MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj | 6 | ||||
| -rw-r--r-- | MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj | 9 | ||||
| -rw-r--r-- | MediaBrowser.Model/Dlna/AudioOptions.cs | 11 | ||||
| -rw-r--r-- | MediaBrowser.Model/Dlna/DefaultLocalPlayer.cs | 22 | ||||
| -rw-r--r-- | MediaBrowser.Model/Dlna/ILocalPlayer.cs | 26 | ||||
| -rw-r--r-- | MediaBrowser.Model/Dlna/NullLocalPlayer.cs | 21 | ||||
| -rw-r--r-- | MediaBrowser.Model/Dlna/StreamBuilder.cs | 38 | ||||
| -rw-r--r-- | MediaBrowser.Model/MediaBrowser.Model.csproj | 3 | ||||
| -rw-r--r-- | Nuget/MediaBrowser.Common.Internal.nuspec | 4 | ||||
| -rw-r--r-- | Nuget/MediaBrowser.Common.nuspec | 2 | ||||
| -rw-r--r-- | Nuget/MediaBrowser.Model.Signed.nuspec | 2 | ||||
| -rw-r--r-- | Nuget/MediaBrowser.Server.Core.nuspec | 4 |
12 files changed, 121 insertions, 27 deletions
diff --git a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj index 4f56f828b..2e61ed89c 100644 --- a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj +++ b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj @@ -356,12 +356,18 @@ <Compile Include="..\MediaBrowser.Model\Dlna\HttpHeaderInfo.cs"> <Link>Dlna\HttpHeaderInfo.cs</Link> </Compile> + <Compile Include="..\MediaBrowser.Model\Dlna\ILocalPlayer.cs"> + <Link>Dlna\ILocalPlayer.cs</Link> + </Compile> <Compile Include="..\MediaBrowser.Model\Dlna\MediaFormatProfile.cs"> <Link>Dlna\MediaFormatProfile.cs</Link> </Compile> <Compile Include="..\MediaBrowser.Model\Dlna\MediaFormatProfileResolver.cs"> <Link>Dlna\MediaFormatProfileResolver.cs</Link> </Compile> + <Compile Include="..\MediaBrowser.Model\Dlna\NullLocalPlayer.cs"> + <Link>Dlna\NullLocalPlayer.cs</Link> + </Compile> <Compile Include="..\MediaBrowser.Model\Dlna\PlaybackErrorCode.cs"> <Link>Dlna\PlaybackErrorCode.cs</Link> </Compile> diff --git a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj index b49cef740..ba4ac22e7 100644 --- a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj +++ b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj @@ -288,6 +288,9 @@ <Compile Include="..\MediaBrowser.Model\Dlna\ContentFeatureBuilder.cs"> <Link>Dlna\ContentFeatureBuilder.cs</Link> </Compile> + <Compile Include="..\MediaBrowser.Model\Dlna\DefaultLocalPlayer.cs"> + <Link>Dlna\DefaultLocalPlayer.cs</Link> + </Compile> <Compile Include="..\MediaBrowser.Model\Dlna\DeviceIdentification.cs"> <Link>Dlna\DeviceIdentification.cs</Link> </Compile> @@ -321,12 +324,18 @@ <Compile Include="..\MediaBrowser.Model\Dlna\HttpHeaderInfo.cs"> <Link>Dlna\HttpHeaderInfo.cs</Link> </Compile> + <Compile Include="..\MediaBrowser.Model\Dlna\ILocalPlayer.cs"> + <Link>Dlna\ILocalPlayer.cs</Link> + </Compile> <Compile Include="..\MediaBrowser.Model\Dlna\MediaFormatProfile.cs"> <Link>Dlna\MediaFormatProfile.cs</Link> </Compile> <Compile Include="..\MediaBrowser.Model\Dlna\MediaFormatProfileResolver.cs"> <Link>Dlna\MediaFormatProfileResolver.cs</Link> </Compile> + <Compile Include="..\MediaBrowser.Model\Dlna\NullLocalPlayer.cs"> + <Link>Dlna\NullLocalPlayer.cs</Link> + </Compile> <Compile Include="..\MediaBrowser.Model\Dlna\PlaybackErrorCode.cs"> <Link>Dlna\PlaybackErrorCode.cs</Link> </Compile> diff --git a/MediaBrowser.Model/Dlna/AudioOptions.cs b/MediaBrowser.Model/Dlna/AudioOptions.cs index cddfd8955..6ad4fa265 100644 --- a/MediaBrowser.Model/Dlna/AudioOptions.cs +++ b/MediaBrowser.Model/Dlna/AudioOptions.cs @@ -46,17 +46,6 @@ namespace MediaBrowser.Model.Dlna /// </summary> /// <value>The audio transcoding bitrate.</value> public int? AudioTranscodingBitrate { get; set; } - - /// <summary> - /// Gets or sets a value indicating whether [supports direct remote content]. - /// </summary> - /// <value><c>true</c> if [supports direct remote content]; otherwise, <c>false</c>.</value> - public bool SupportsDirectRemoteContent { get; set; } - /// <summary> - /// Gets or sets a value indicating whether [supports custom HTTP headers]. - /// </summary> - /// <value><c>true</c> if [supports custom HTTP headers]; otherwise, <c>false</c>.</value> - public bool SupportsCustomHttpHeaders { get; set; } /// <summary> /// Gets the maximum bitrate. diff --git a/MediaBrowser.Model/Dlna/DefaultLocalPlayer.cs b/MediaBrowser.Model/Dlna/DefaultLocalPlayer.cs new file mode 100644 index 000000000..fc15a55a0 --- /dev/null +++ b/MediaBrowser.Model/Dlna/DefaultLocalPlayer.cs @@ -0,0 +1,22 @@ +using System.IO; + +namespace MediaBrowser.Model.Dlna +{ + public class DefaultLocalPlayer : ILocalPlayer + { + public bool CanAccessFile(string path) + { + return File.Exists(path); + } + + public bool CanAccessDirectory(string path) + { + return Directory.Exists(path); + } + + public virtual bool CanAccessUrl(string url, bool requiresCustomRequestHeaders) + { + return false; + } + } +} diff --git a/MediaBrowser.Model/Dlna/ILocalPlayer.cs b/MediaBrowser.Model/Dlna/ILocalPlayer.cs new file mode 100644 index 000000000..55e11ec4b --- /dev/null +++ b/MediaBrowser.Model/Dlna/ILocalPlayer.cs @@ -0,0 +1,26 @@ + +namespace MediaBrowser.Model.Dlna +{ + public interface ILocalPlayer + { + /// <summary> + /// Determines whether this instance [can access file] the specified path. + /// </summary> + /// <param name="path">The path.</param> + /// <returns><c>true</c> if this instance [can access file] the specified path; otherwise, <c>false</c>.</returns> + bool CanAccessFile(string path); + /// <summary> + /// Determines whether this instance [can access directory] the specified path. + /// </summary> + /// <param name="path">The path.</param> + /// <returns><c>true</c> if this instance [can access directory] the specified path; otherwise, <c>false</c>.</returns> + bool CanAccessDirectory(string path); + /// <summary> + /// Determines whether this instance [can access URL] the specified URL. + /// </summary> + /// <param name="url">The URL.</param> + /// <param name="requiresCustomRequestHeaders">if set to <c>true</c> [requires custom request headers].</param> + /// <returns><c>true</c> if this instance [can access URL] the specified URL; otherwise, <c>false</c>.</returns> + bool CanAccessUrl(string url, bool requiresCustomRequestHeaders); + } +} diff --git a/MediaBrowser.Model/Dlna/NullLocalPlayer.cs b/MediaBrowser.Model/Dlna/NullLocalPlayer.cs new file mode 100644 index 000000000..c34b63887 --- /dev/null +++ b/MediaBrowser.Model/Dlna/NullLocalPlayer.cs @@ -0,0 +1,21 @@ + +namespace MediaBrowser.Model.Dlna +{ + public class NullLocalPlayer : ILocalPlayer + { + public bool CanAccessFile(string path) + { + return false; + } + + public bool CanAccessDirectory(string path) + { + return false; + } + + public bool CanAccessUrl(string url, bool requiresCustomRequestHeaders) + { + return false; + } + } +} diff --git a/MediaBrowser.Model/Dlna/StreamBuilder.cs b/MediaBrowser.Model/Dlna/StreamBuilder.cs index 559a543f2..126b218e8 100644 --- a/MediaBrowser.Model/Dlna/StreamBuilder.cs +++ b/MediaBrowser.Model/Dlna/StreamBuilder.cs @@ -10,6 +10,17 @@ namespace MediaBrowser.Model.Dlna { public class StreamBuilder { + private readonly ILocalPlayer _localPlayer; + + public StreamBuilder(ILocalPlayer localPlayer) + { + _localPlayer = localPlayer; + } + public StreamBuilder() + : this(new NullLocalPlayer()) + { + } + public StreamInfo BuildAudioItem(AudioOptions options) { ValidateAudioInput(options); @@ -73,7 +84,7 @@ namespace MediaBrowser.Model.Dlna StreamInfo streamInfo = BuildVideoItem(i, options); if (streamInfo != null) { - streams.Add(streamInfo); + streams.Add(streamInfo); } } @@ -180,7 +191,15 @@ namespace MediaBrowser.Model.Dlna if (all) { - playlistItem.PlayMethod = PlayMethod.DirectStream; + if (item.Protocol == MediaProtocol.File && _localPlayer.CanAccessFile(item.Path)) + { + playlistItem.PlayMethod = PlayMethod.DirectPlay; + } + else + { + playlistItem.PlayMethod = PlayMethod.DirectStream; + } + playlistItem.Container = item.Container; return playlistItem; @@ -530,18 +549,17 @@ namespace MediaBrowser.Model.Dlna if (mediaSource.Protocol == MediaProtocol.Http) { - if (!options.SupportsDirectRemoteContent) + if (_localPlayer.CanAccessUrl(mediaSource.Path, mediaSource.RequiredHttpHeaders.Count > 0)) { - return null; + return PlayMethod.DirectPlay; } + } - if (mediaSource.RequiredHttpHeaders.Count > 0 && !options.SupportsCustomHttpHeaders) - { - return null; - } + else if (mediaSource.Protocol == MediaProtocol.File && _localPlayer.CanAccessFile(mediaSource.Path)) + { return PlayMethod.DirectPlay; } - + return PlayMethod.DirectStream; } @@ -574,7 +592,7 @@ namespace MediaBrowser.Model.Dlna { return profile; } - + // For sync we can handle the longer extraction times if (context == EncodingContext.Static && subtitleStream.IsTextSubtitleStream) { diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index 662b76002..14ec093ec 100644 --- a/MediaBrowser.Model/MediaBrowser.Model.csproj +++ b/MediaBrowser.Model/MediaBrowser.Model.csproj @@ -124,7 +124,10 @@ <Compile Include="Devices\LocalFileInfo.cs" /> <Compile Include="Devices\DeviceInfo.cs" /> <Compile Include="Devices\DevicesOptions.cs" /> + <Compile Include="Dlna\DefaultLocalPlayer.cs" /> <Compile Include="Dlna\EncodingContext.cs" /> + <Compile Include="Dlna\ILocalPlayer.cs" /> + <Compile Include="Dlna\NullLocalPlayer.cs" /> <Compile Include="Dlna\PlaybackErrorCode.cs" /> <Compile Include="Dlna\PlaybackException.cs" /> <Compile Include="Dlna\Profiles\DefaultProfile.cs" /> diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec index 05c2807c0..fc506e822 100644 --- a/Nuget/MediaBrowser.Common.Internal.nuspec +++ b/Nuget/MediaBrowser.Common.Internal.nuspec @@ -2,7 +2,7 @@ <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd"> <metadata> <id>MediaBrowser.Common.Internal</id> - <version>3.0.582</version> + <version>3.0.583</version> <title>MediaBrowser.Common.Internal</title> <authors>Luke</authors> <owners>ebr,Luke,scottisafool</owners> @@ -12,7 +12,7 @@ <description>Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption.</description> <copyright>Copyright © Media Browser 2013</copyright> <dependencies> - <dependency id="MediaBrowser.Common" version="3.0.582" /> + <dependency id="MediaBrowser.Common" version="3.0.583" /> <dependency id="NLog" version="3.2.0.0" /> <dependency id="SimpleInjector" version="2.7.0" /> </dependencies> diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec index 8d6ecd1a1..c45951383 100644 --- a/Nuget/MediaBrowser.Common.nuspec +++ b/Nuget/MediaBrowser.Common.nuspec @@ -2,7 +2,7 @@ <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd"> <metadata> <id>MediaBrowser.Common</id> - <version>3.0.582</version> + <version>3.0.583</version> <title>MediaBrowser.Common</title> <authors>Media Browser Team</authors> <owners>ebr,Luke,scottisafool</owners> diff --git a/Nuget/MediaBrowser.Model.Signed.nuspec b/Nuget/MediaBrowser.Model.Signed.nuspec index c907f9c51..c38bf5ffb 100644 --- a/Nuget/MediaBrowser.Model.Signed.nuspec +++ b/Nuget/MediaBrowser.Model.Signed.nuspec @@ -2,7 +2,7 @@ <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd"> <metadata> <id>MediaBrowser.Model.Signed</id> - <version>3.0.582</version> + <version>3.0.583</version> <title>MediaBrowser.Model - Signed Edition</title> <authors>Media Browser Team</authors> <owners>ebr,Luke,scottisafool</owners> diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec index 31064cfe0..b78c8e3aa 100644 --- a/Nuget/MediaBrowser.Server.Core.nuspec +++ b/Nuget/MediaBrowser.Server.Core.nuspec @@ -2,7 +2,7 @@ <package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> <metadata> <id>MediaBrowser.Server.Core</id> - <version>3.0.582</version> + <version>3.0.583</version> <title>Media Browser.Server.Core</title> <authors>Media Browser Team</authors> <owners>ebr,Luke,scottisafool</owners> @@ -12,7 +12,7 @@ <description>Contains core components required to build plugins for Media Browser Server.</description> <copyright>Copyright © Media Browser 2013</copyright> <dependencies> - <dependency id="MediaBrowser.Common" version="3.0.582" /> + <dependency id="MediaBrowser.Common" version="3.0.583" /> </dependencies> </metadata> <files> |
