resolve wtv transcoding

This commit is contained in:
Luke Pulverenti 2014-09-09 20:28:59 -04:00
parent a2dc5e090b
commit b314199319
7 changed files with 104 additions and 64 deletions

View File

@ -1,5 +1,6 @@
using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.IO;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Channels;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Dlna;
@ -60,9 +61,12 @@ namespace MediaBrowser.Api.Playback.Hls
public class DynamicHlsService : BaseHlsService
{
public DynamicHlsService(IServerConfigurationManager serverConfig, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IFileSystem fileSystem, ILiveTvManager liveTvManager, IDlnaManager dlnaManager, IChannelManager channelManager, ISubtitleEncoder subtitleEncoder)
protected INetworkManager NetworkManager { get; private set; }
public DynamicHlsService(IServerConfigurationManager serverConfig, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IFileSystem fileSystem, ILiveTvManager liveTvManager, IDlnaManager dlnaManager, IChannelManager channelManager, ISubtitleEncoder subtitleEncoder, INetworkManager networkManager)
: base(serverConfig, userManager, libraryManager, isoManager, mediaEncoder, fileSystem, liveTvManager, dlnaManager, channelManager, subtitleEncoder)
{
NetworkManager = networkManager;
}
public object Get(GetMasterHlsVideoStream request)
@ -480,6 +484,12 @@ namespace MediaBrowser.Api.Playback.Hls
private bool EnableAdaptiveBitrateStreaming(StreamState state)
{
// Within the local network this will likely do more harm than good.
if (Request.IsLocal || NetworkManager.IsInLocalNetwork(Request.RemoteIp))
{
return false;
}
var request = state.Request as GetMasterHlsVideoStream;
if (request != null && !request.EnableAdaptiveBitrateStreaming)

View File

@ -1,5 +1,7 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace MediaBrowser.Common.Net
{
@ -13,6 +15,65 @@ namespace MediaBrowser.Common.Net
/// </summary>
public static string JsonMimeType = "application/json";
/// <summary>
/// Any extension in this list is considered a video file - can be added to at runtime for extensibility
/// </summary>
private static readonly List<string> VideoFileExtensions = new List<string>
{
".mkv",
".m2t",
".m2ts",
".img",
".iso",
".mk3d",
".ts",
".rmvb",
".mov",
".avi",
".mpg",
".mpeg",
".wmv",
".mp4",
".divx",
".dvr-ms",
".wtv",
".ogm",
".ogv",
".asf",
".m4v",
".flv",
".f4v",
".3gp",
".webm",
".mts",
".m2v",
".rec"
};
private static readonly Dictionary<string, string> VideoFileExtensionsDictionary = VideoFileExtensions.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase);
/// <summary>
/// Determines whether [is video file] [the specified path].
/// </summary>
/// <param name="path">The path.</param>
/// <returns><c>true</c> if [is video file] [the specified path]; otherwise, <c>false</c>.</returns>
public static bool IsVideoFile(string path)
{
if (string.IsNullOrEmpty(path))
{
throw new ArgumentNullException("path");
}
var extension = Path.GetExtension(path);
if (string.IsNullOrEmpty(extension))
{
return false;
}
return VideoFileExtensionsDictionary.ContainsKey(extension);
}
/// <summary>
/// Gets the type of the MIME.
/// </summary>
@ -26,7 +87,7 @@ namespace MediaBrowser.Common.Net
{
throw new ArgumentNullException("path");
}
var ext = Path.GetExtension(path) ?? string.Empty;
// http://en.wikipedia.org/wiki/Internet_media_type
@ -37,10 +98,6 @@ namespace MediaBrowser.Common.Net
{
return "video/mpeg";
}
if (ext.Equals(".mp4", StringComparison.OrdinalIgnoreCase))
{
return "video/mp4";
}
if (ext.Equals(".ogv", StringComparison.OrdinalIgnoreCase))
{
return "video/ogg";
@ -90,6 +147,12 @@ namespace MediaBrowser.Common.Net
return "video/mp2t";
}
// Catch-all for all video types that don't require specific mime types
if (VideoFileExtensionsDictionary.ContainsKey(ext))
{
return "video/" + ext.TrimStart('.').ToLower();
}
// Type text
if (ext.Equals(".css", StringComparison.OrdinalIgnoreCase))
{
@ -152,7 +215,7 @@ namespace MediaBrowser.Common.Net
return "image/vnd.microsoft.icon";
}
// Type audio
// Type audio
if (ext.Equals(".mp3", StringComparison.OrdinalIgnoreCase))
{
return "audio/mpeg";

View File

@ -3,7 +3,6 @@ namespace MediaBrowser.Controller.Connect
{
public interface IConnectManager
{
string WanIpAddress { get; }
string WanApiAddress { get; }
}
}

View File

@ -1,9 +1,10 @@
using System.Globalization;
using MediaBrowser.Common.IO;
using MediaBrowser.Common.IO;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
@ -30,43 +31,6 @@ namespace MediaBrowser.Controller.Resolvers
};
/// <summary>
/// Any extension in this list is considered a video file - can be added to at runtime for extensibility
/// </summary>
public static List<string> VideoFileExtensions = new List<string>
{
".mkv",
".m2t",
".m2ts",
".img",
".iso",
".mk3d",
".ts",
".rmvb",
".mov",
".avi",
".mpg",
".mpeg",
".wmv",
".mp4",
".divx",
".dvr-ms",
".wtv",
".ogm",
".ogv",
".asf",
".m4v",
".flv",
".f4v",
".3gp",
".webm",
".mts",
".m2v",
".rec"
};
private static readonly Dictionary<string, string> VideoFileExtensionsDictionary = VideoFileExtensions.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase);
private static readonly Regex MultiFileRegex = new Regex(
@"(.*?)([ _.-]*(?:cd|dvd|p(?:ar)?t|dis[ck]|d)[ _.-]*[0-9]+)(.*?)(\.[^.]+)$",
RegexOptions.Compiled | RegexOptions.IgnoreCase);
@ -156,19 +120,7 @@ namespace MediaBrowser.Controller.Resolvers
/// <returns><c>true</c> if [is video file] [the specified path]; otherwise, <c>false</c>.</returns>
public static bool IsVideoFile(string path)
{
if (string.IsNullOrEmpty(path))
{
throw new ArgumentNullException("path");
}
var extension = Path.GetExtension(path);
if (string.IsNullOrEmpty(extension))
{
return false;
}
return VideoFileExtensionsDictionary.ContainsKey(extension);
return MimeTypes.IsVideoFile(path);
}
/// <summary>

View File

@ -31,8 +31,23 @@ namespace MediaBrowser.Server.Implementations.Connect
public string ConnectServerId { get; set; }
public string ConnectAccessKey { get; set; }
public string WanIpAddress { get; private set; }
public string DiscoveredWanIpAddress { get; private set; }
public string WanIpAddress
{
get
{
var address = _config.Configuration.WanDdns;
if (string.IsNullOrWhiteSpace(address))
{
address = DiscoveredWanIpAddress;
}
return address;
}
}
public string WanApiAddress
{
get
@ -75,7 +90,7 @@ namespace MediaBrowser.Server.Implementations.Connect
internal void OnWanAddressResolved(string address)
{
WanIpAddress = address;
DiscoveredWanIpAddress = address;
//UpdateConnectInfo();
}

View File

@ -445,5 +445,6 @@
"MessageTrialExpired": "The trial period for this feature has expired",
"MessageTrialWillExpireIn": "The trial period for this feature will expire in {0} day(s)",
"MessageInstallPluginFromApp": "This plugin must be installed from with in the app you intend to use it in.",
"ValuePriceUSD": "Price: {0} (USD)"
"ValuePriceUSD": "Price: {0} (USD)",
"MessageFeatureIncludedWithSupporter": "You are registered for this feature, and will be able to continue using it with an active supporter membership."
}

View File

@ -1152,5 +1152,5 @@
"XmlDocumentAttributeListHelp": "These attributes are applied to the root element of every xml response.",
"OptionSaveMetadataAsHidden": "Save metadata and images as hidden files",
"LabelExtractChaptersDuringLibraryScan": "Extract chapter images during the library scan",
"LabelExtractChaptersDuringLibraryScanHelp": "If enabled, chapter images will be extracted as part of the normal library scan. If disabled they will be extracted during the chapter images scheduled task, allowing the regular library scan to complete faster."
"LabelExtractChaptersDuringLibraryScanHelp": "If enabled, chapter images will be extracted when videos are imported during the library scan. If disabled they will be extracted during the chapter images scheduled task, allowing the regular library scan to complete faster."
}