aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2015-03-12 02:06:57 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2015-03-12 02:06:57 -0400
commitceb88b1359092dfc9551b15539a3e5182c91424f (patch)
tree614584f5035dcf6c9b1738ca10903eb0d35a07e6
parentd0d225e0d1b4179259bab7fc13df53276003d75a (diff)
support file playback with StreamBuilder
-rw-r--r--MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj6
-rw-r--r--MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj9
-rw-r--r--MediaBrowser.Model/Dlna/AudioOptions.cs11
-rw-r--r--MediaBrowser.Model/Dlna/DefaultLocalPlayer.cs22
-rw-r--r--MediaBrowser.Model/Dlna/ILocalPlayer.cs26
-rw-r--r--MediaBrowser.Model/Dlna/NullLocalPlayer.cs21
-rw-r--r--MediaBrowser.Model/Dlna/StreamBuilder.cs38
-rw-r--r--MediaBrowser.Model/MediaBrowser.Model.csproj3
-rw-r--r--Nuget/MediaBrowser.Common.Internal.nuspec4
-rw-r--r--Nuget/MediaBrowser.Common.nuspec2
-rw-r--r--Nuget/MediaBrowser.Model.Signed.nuspec2
-rw-r--r--Nuget/MediaBrowser.Server.Core.nuspec4
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>