aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Model
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Model')
-rw-r--r--MediaBrowser.Model/Configuration/UserConfiguration.cs17
-rw-r--r--MediaBrowser.Model/Dto/MediaSourceInfo.cs22
-rw-r--r--MediaBrowser.Model/MediaBrowser.Model.csproj1
-rw-r--r--MediaBrowser.Model/MediaInfo/AudioCodec.cs5
-rw-r--r--MediaBrowser.Model/MediaInfo/Container.cs3
-rw-r--r--MediaBrowser.Model/MediaInfo/MediaStreamSelector.cs91
-rw-r--r--MediaBrowser.Model/MediaInfo/SubtitleFormat.cs6
-rw-r--r--MediaBrowser.Model/MediaInfo/VideoCodec.cs14
8 files changed, 146 insertions, 13 deletions
diff --git a/MediaBrowser.Model/Configuration/UserConfiguration.cs b/MediaBrowser.Model/Configuration/UserConfiguration.cs
index 2658e8973..552747f5f 100644
--- a/MediaBrowser.Model/Configuration/UserConfiguration.cs
+++ b/MediaBrowser.Model/Configuration/UserConfiguration.cs
@@ -25,6 +25,12 @@ namespace MediaBrowser.Model.Configuration
public string AudioLanguagePreference { get; set; }
/// <summary>
+ /// Gets or sets a value indicating whether [play default audio track].
+ /// </summary>
+ /// <value><c>true</c> if [play default audio track]; otherwise, <c>false</c>.</value>
+ public bool PlayDefaultAudioTrack { get; set; }
+
+ /// <summary>
/// Gets or sets the subtitle language preference.
/// </summary>
/// <value>The subtitle language preference.</value>
@@ -61,6 +67,8 @@ namespace MediaBrowser.Model.Configuration
public UnratedItem[] BlockUnratedItems { get; set; }
+ public SubtitlePlaybackMode SubtitleMode { get; set; }
+
/// <summary>
/// Initializes a new instance of the <see cref="UserConfiguration" /> class.
/// </summary>
@@ -68,6 +76,7 @@ namespace MediaBrowser.Model.Configuration
{
IsAdministrator = true;
+ PlayDefaultAudioTrack = true;
EnableRemoteControlOfOtherUsers = true;
EnableLiveTvManagement = true;
EnableMediaPlayback = true;
@@ -79,4 +88,12 @@ namespace MediaBrowser.Model.Configuration
BlockUnratedItems = new UnratedItem[] { };
}
}
+
+ public enum SubtitlePlaybackMode
+ {
+ Default = 0,
+ Always = 1,
+ OnlyForced = 2,
+ None = 3
+ }
}
diff --git a/MediaBrowser.Model/Dto/MediaSourceInfo.cs b/MediaBrowser.Model/Dto/MediaSourceInfo.cs
index 4fe586333..d215f2866 100644
--- a/MediaBrowser.Model/Dto/MediaSourceInfo.cs
+++ b/MediaBrowser.Model/Dto/MediaSourceInfo.cs
@@ -1,8 +1,8 @@
-using System;
-using System.Runtime.Serialization;
-using MediaBrowser.Model.Entities;
+using MediaBrowser.Model.Entities;
using MediaBrowser.Model.MediaInfo;
+using System;
using System.Collections.Generic;
+using System.Runtime.Serialization;
namespace MediaBrowser.Model.Dto
{
@@ -41,11 +41,27 @@ namespace MediaBrowser.Model.Dto
MediaStreams = new List<MediaStream>();
}
+ public int? DefaultAudioStreamIndex { get; set; }
+ public int? DefaultSubtitleStreamIndex { get; set; }
+
[IgnoreDataMember]
public MediaStream DefaultAudioStream
{
get
{
+ if (DefaultAudioStreamIndex.HasValue)
+ {
+ var val = DefaultAudioStreamIndex.Value;
+
+ foreach (MediaStream i in MediaStreams)
+ {
+ if (i.Type == MediaStreamType.Audio && i.Index == val)
+ {
+ return i;
+ }
+ }
+ }
+
foreach (MediaStream i in MediaStreams)
{
if (i.Type == MediaStreamType.Audio && i.IsDefault)
diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj
index 2c714f831..9bf52baed 100644
--- a/MediaBrowser.Model/MediaBrowser.Model.csproj
+++ b/MediaBrowser.Model/MediaBrowser.Model.csproj
@@ -172,6 +172,7 @@
<Compile Include="Logging\NullLogger.cs" />
<Compile Include="MediaInfo\AudioCodec.cs" />
<Compile Include="MediaInfo\Container.cs" />
+ <Compile Include="MediaInfo\MediaStreamSelector.cs" />
<Compile Include="MediaInfo\SubtitleFormat.cs" />
<Compile Include="MediaInfo\TransportStreamTimestamp.cs" />
<Compile Include="MediaInfo\VideoCodec.cs" />
diff --git a/MediaBrowser.Model/MediaInfo/AudioCodec.cs b/MediaBrowser.Model/MediaInfo/AudioCodec.cs
index a76c0e742..5353f2b3e 100644
--- a/MediaBrowser.Model/MediaInfo/AudioCodec.cs
+++ b/MediaBrowser.Model/MediaInfo/AudioCodec.cs
@@ -2,7 +2,8 @@
{
public class AudioCodec
{
- public const string AAC = "AAC";
- public const string MP3 = "MP3";
+ public const string AAC = "aac";
+ public const string MP3 = "mp3";
+ public const string AC3 = "ac3";
}
} \ No newline at end of file
diff --git a/MediaBrowser.Model/MediaInfo/Container.cs b/MediaBrowser.Model/MediaInfo/Container.cs
index 0305b9cfa..3762edf9f 100644
--- a/MediaBrowser.Model/MediaInfo/Container.cs
+++ b/MediaBrowser.Model/MediaInfo/Container.cs
@@ -3,6 +3,7 @@ namespace MediaBrowser.Model.MediaInfo
{
public class Container
{
- public const string MP4 = "MP4";
+ public const string MP4 = "mp4";
+ public const string MKV = "mkv";
}
}
diff --git a/MediaBrowser.Model/MediaInfo/MediaStreamSelector.cs b/MediaBrowser.Model/MediaInfo/MediaStreamSelector.cs
new file mode 100644
index 000000000..d498c3a32
--- /dev/null
+++ b/MediaBrowser.Model/MediaInfo/MediaStreamSelector.cs
@@ -0,0 +1,91 @@
+using MediaBrowser.Model.Configuration;
+using MediaBrowser.Model.Dto;
+using MediaBrowser.Model.Entities;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace MediaBrowser.Model.MediaInfo
+{
+ public static class MediaStreamSelector
+ {
+ public static int? GetDefaultAudioStreamIndex(MediaSourceInfo mediaSource, IEnumerable<string> preferredLanguages, bool preferDefaultTrack)
+ {
+ var streams = GetSortedStreams(mediaSource.MediaStreams, MediaStreamType.Audio, preferredLanguages.FirstOrDefault())
+ .ToList();
+
+ if (preferDefaultTrack)
+ {
+ var defaultStream = streams.FirstOrDefault(i => i.IsDefault);
+
+ if (defaultStream != null)
+ {
+ return defaultStream.Index;
+ }
+ }
+
+ var stream = streams.FirstOrDefault();
+
+ if (stream != null)
+ {
+ return stream.Index;
+ }
+
+ return null;
+ }
+
+ public static int? GetDefaultSubtitleStreamIndex(MediaSourceInfo mediaSource,
+ IEnumerable<string> preferredLanguages,
+ SubtitlePlaybackMode mode,
+ string audioTrackLanguage)
+ {
+ var streams = GetSortedStreams(mediaSource.MediaStreams, MediaStreamType.Subtitle, preferredLanguages.FirstOrDefault())
+ .ToList();
+
+ MediaStream stream = null;
+
+ if (mode == SubtitlePlaybackMode.Default)
+ {
+ stream = streams.FirstOrDefault(i => i.IsDefault);
+ }
+ else if (mode == SubtitlePlaybackMode.Always)
+ {
+ stream = streams.FirstOrDefault(i => i.IsDefault) ??
+ streams.FirstOrDefault();
+ }
+ else if (mode == SubtitlePlaybackMode.OnlyForced)
+ {
+ stream = streams.FirstOrDefault(i => i.IsForced);
+ }
+
+ if (stream != null)
+ {
+ return stream.Index;
+ }
+
+ return null;
+ }
+
+ private static IEnumerable<MediaStream> GetSortedStreams(IEnumerable<MediaStream> streams, MediaStreamType type, string defaultLanguage)
+ {
+ var orderStreams = streams
+ .Where(i => i.Type == type);
+
+ // For subs give a preference to text for performance
+
+ if (string.IsNullOrEmpty(defaultLanguage))
+ {
+ return orderStreams.OrderBy(i => i.IsDefault)
+ .ThenBy(i => !i.IsGraphicalSubtitleStream)
+ .ThenBy(i => i.Index)
+ .ToList();
+ }
+
+ return orderStreams.OrderBy(i => string.Equals(i.Language, defaultLanguage, StringComparison.OrdinalIgnoreCase))
+ .ThenBy(i => i.IsDefault)
+ .ThenBy(i => !i.IsGraphicalSubtitleStream)
+ .ThenBy(i => i.Index)
+ .ToList();
+ }
+ }
+}
diff --git a/MediaBrowser.Model/MediaInfo/SubtitleFormat.cs b/MediaBrowser.Model/MediaInfo/SubtitleFormat.cs
index 51a0dbc9e..30eb50825 100644
--- a/MediaBrowser.Model/MediaInfo/SubtitleFormat.cs
+++ b/MediaBrowser.Model/MediaInfo/SubtitleFormat.cs
@@ -2,6 +2,10 @@
{
public class SubtitleFormat
{
- public const string SRT = "SRT";
+ public const string SRT = "srt";
+ public const string SSA = "ssa";
+ public const string ASS = "ass";
+ public const string VTT = "vtt";
+ public const string SUB = "sub";
}
} \ No newline at end of file
diff --git a/MediaBrowser.Model/MediaInfo/VideoCodec.cs b/MediaBrowser.Model/MediaInfo/VideoCodec.cs
index 7405eb13e..81755dac9 100644
--- a/MediaBrowser.Model/MediaInfo/VideoCodec.cs
+++ b/MediaBrowser.Model/MediaInfo/VideoCodec.cs
@@ -2,11 +2,13 @@
{
public class VideoCodec
{
- public const string H263 = "H263";
- public const string H264 = "H264";
- public const string H265 = "H265";
- public const string MPEG4 = "MPEG4";
- public const string MSMPEG4 = "MSMPEG4";
- public const string VC1 = "VC1";
+ public const string H263 = "h263";
+ public const string H264 = "h264";
+ public const string H265 = "h265";
+ public const string MPEG4 = "mpeg4";
+ public const string MPEG1 = "mpeg1video";
+ public const string MPEG2 = "mpeg2video";
+ public const string MSMPEG4 = "msmpeg4";
+ public const string VC1 = "vc1";
}
} \ No newline at end of file