move methods to base class
This commit is contained in:
parent
3a9360dd6b
commit
820b4873fb
|
@ -783,7 +783,6 @@ namespace MediaBrowser.Api.Playback
|
||||||
state.OutputContainer = (container ?? string.Empty).TrimStart('.');
|
state.OutputContainer = (container ?? string.Empty).TrimStart('.');
|
||||||
|
|
||||||
state.OutputAudioBitrate = EncodingHelper.GetAudioBitrateParam(state.Request, state.AudioStream);
|
state.OutputAudioBitrate = EncodingHelper.GetAudioBitrateParam(state.Request, state.AudioStream);
|
||||||
state.OutputAudioSampleRate = request.AudioSampleRate;
|
|
||||||
|
|
||||||
state.OutputAudioCodec = state.Request.AudioCodec;
|
state.OutputAudioCodec = state.Request.AudioCodec;
|
||||||
|
|
||||||
|
|
|
@ -250,248 +250,6 @@ namespace MediaBrowser.Api.Playback
|
||||||
|
|
||||||
public DeviceProfile DeviceProfile { get; set; }
|
public DeviceProfile DeviceProfile { get; set; }
|
||||||
|
|
||||||
public int? TotalOutputBitrate
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return (OutputAudioBitrate ?? 0) + (OutputVideoBitrate ?? 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public int? OutputWidth
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (VideoStream != null && VideoStream.Width.HasValue && VideoStream.Height.HasValue)
|
|
||||||
{
|
|
||||||
var size = new ImageSize
|
|
||||||
{
|
|
||||||
Width = VideoStream.Width.Value,
|
|
||||||
Height = VideoStream.Height.Value
|
|
||||||
};
|
|
||||||
|
|
||||||
var newSize = DrawingUtils.Resize(size,
|
|
||||||
VideoRequest.Width,
|
|
||||||
VideoRequest.Height,
|
|
||||||
VideoRequest.MaxWidth,
|
|
||||||
VideoRequest.MaxHeight);
|
|
||||||
|
|
||||||
return Convert.ToInt32(newSize.Width);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (VideoRequest == null)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return VideoRequest.MaxWidth ?? VideoRequest.Width;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public int? OutputHeight
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (VideoStream != null && VideoStream.Width.HasValue && VideoStream.Height.HasValue)
|
|
||||||
{
|
|
||||||
var size = new ImageSize
|
|
||||||
{
|
|
||||||
Width = VideoStream.Width.Value,
|
|
||||||
Height = VideoStream.Height.Value
|
|
||||||
};
|
|
||||||
|
|
||||||
var newSize = DrawingUtils.Resize(size,
|
|
||||||
VideoRequest.Width,
|
|
||||||
VideoRequest.Height,
|
|
||||||
VideoRequest.MaxWidth,
|
|
||||||
VideoRequest.MaxHeight);
|
|
||||||
|
|
||||||
return Convert.ToInt32(newSize.Height);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (VideoRequest == null)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return VideoRequest.MaxHeight ?? VideoRequest.Height;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Predicts the audio sample rate that will be in the output stream
|
|
||||||
/// </summary>
|
|
||||||
public int? TargetVideoBitDepth
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var stream = VideoStream;
|
|
||||||
return stream == null || !Request.Static ? null : stream.BitDepth;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the target reference frames.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The target reference frames.</value>
|
|
||||||
public int? TargetRefFrames
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var stream = VideoStream;
|
|
||||||
return stream == null || !Request.Static ? null : stream.RefFrames;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public int? TargetVideoStreamCount
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (Request.Static)
|
|
||||||
{
|
|
||||||
return GetMediaStreamCount(MediaStreamType.Video, int.MaxValue);
|
|
||||||
}
|
|
||||||
return GetMediaStreamCount(MediaStreamType.Video, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public int? TargetAudioStreamCount
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (Request.Static)
|
|
||||||
{
|
|
||||||
return GetMediaStreamCount(MediaStreamType.Audio, int.MaxValue);
|
|
||||||
}
|
|
||||||
return GetMediaStreamCount(MediaStreamType.Audio, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool? IsTargetAnamorphic
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (Request.Static)
|
|
||||||
{
|
|
||||||
return VideoStream == null ? null : VideoStream.IsAnamorphic;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool? IsTargetInterlaced
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (Request.Static)
|
|
||||||
{
|
|
||||||
return VideoStream == null ? (bool?)null : VideoStream.IsInterlaced;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (DeInterlace)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return VideoStream == null ? (bool?)null : VideoStream.IsInterlaced;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private int? GetMediaStreamCount(MediaStreamType type, int limit)
|
|
||||||
{
|
|
||||||
var count = MediaSource.GetStreamCount(type);
|
|
||||||
|
|
||||||
if (count.HasValue)
|
|
||||||
{
|
|
||||||
count = Math.Min(count.Value, limit);
|
|
||||||
}
|
|
||||||
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Predicts the audio sample rate that will be in the output stream
|
|
||||||
/// </summary>
|
|
||||||
public float? TargetFramerate
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var stream = VideoStream;
|
|
||||||
var requestedFramerate = VideoRequest.MaxFramerate ?? VideoRequest.Framerate;
|
|
||||||
|
|
||||||
return requestedFramerate.HasValue && !Request.Static
|
|
||||||
? requestedFramerate
|
|
||||||
: stream == null ? null : stream.AverageFrameRate ?? stream.RealFrameRate;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public TransportStreamTimestamp TargetTimestamp
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var defaultValue = string.Equals(OutputContainer, "m2ts", StringComparison.OrdinalIgnoreCase) ?
|
|
||||||
TransportStreamTimestamp.Valid :
|
|
||||||
TransportStreamTimestamp.None;
|
|
||||||
|
|
||||||
return !Request.Static
|
|
||||||
? defaultValue
|
|
||||||
: InputTimestamp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Predicts the audio sample rate that will be in the output stream
|
|
||||||
/// </summary>
|
|
||||||
public int? TargetPacketLength
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var stream = VideoStream;
|
|
||||||
return !Request.Static
|
|
||||||
? null
|
|
||||||
: stream == null ? null : stream.PacketLength;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Predicts the audio sample rate that will be in the output stream
|
|
||||||
/// </summary>
|
|
||||||
public string TargetVideoProfile
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var stream = VideoStream;
|
|
||||||
return !string.IsNullOrEmpty(VideoRequest.Profile) && !Request.Static
|
|
||||||
? VideoRequest.Profile
|
|
||||||
: stream == null ? null : stream.Profile;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public string TargetVideoCodecTag
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var stream = VideoStream;
|
|
||||||
return !Request.Static
|
|
||||||
? null
|
|
||||||
: stream == null ? null : stream.CodecTag;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool? IsTargetAVC
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (Request.Static)
|
|
||||||
{
|
|
||||||
return VideoStream == null ? null : VideoStream.IsAVC;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public TranscodingJob TranscodingJob;
|
public TranscodingJob TranscodingJob;
|
||||||
public override void ReportTranscodingProgress(TimeSpan? transcodingPosition, float? framerate, double? percentComplete, long? bytesTranscoded, int? bitRate)
|
public override void ReportTranscodingProgress(TimeSpan? transcodingPosition, float? framerate, double? percentComplete, long? bytesTranscoded, int? bitRate)
|
||||||
{
|
{
|
||||||
|
|
|
@ -8,6 +8,7 @@ using MediaBrowser.Model.Entities;
|
||||||
using MediaBrowser.Model.IO;
|
using MediaBrowser.Model.IO;
|
||||||
using MediaBrowser.Model.Logging;
|
using MediaBrowser.Model.Logging;
|
||||||
using MediaBrowser.Model.MediaInfo;
|
using MediaBrowser.Model.MediaInfo;
|
||||||
|
using MediaBrowser.Model.Drawing;
|
||||||
|
|
||||||
namespace MediaBrowser.Controller.MediaEncoding
|
namespace MediaBrowser.Controller.MediaEncoding
|
||||||
{
|
{
|
||||||
|
@ -134,7 +135,6 @@ namespace MediaBrowser.Controller.MediaEncoding
|
||||||
|
|
||||||
public int? OutputAudioBitrate;
|
public int? OutputAudioBitrate;
|
||||||
public int? OutputAudioChannels;
|
public int? OutputAudioChannels;
|
||||||
public int? OutputAudioSampleRate;
|
|
||||||
public bool DeInterlace { get; set; }
|
public bool DeInterlace { get; set; }
|
||||||
public bool IsVideoRequest { get; set; }
|
public bool IsVideoRequest { get; set; }
|
||||||
public TranscodingJobType TranscodingType { get; set; }
|
public TranscodingJobType TranscodingType { get; set; }
|
||||||
|
@ -173,6 +173,97 @@ namespace MediaBrowser.Controller.MediaEncoding
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int? TotalOutputBitrate
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return (OutputAudioBitrate ?? 0) + (OutputVideoBitrate ?? 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int? OutputWidth
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (VideoStream != null && VideoStream.Width.HasValue && VideoStream.Height.HasValue)
|
||||||
|
{
|
||||||
|
var size = new ImageSize
|
||||||
|
{
|
||||||
|
Width = VideoStream.Width.Value,
|
||||||
|
Height = VideoStream.Height.Value
|
||||||
|
};
|
||||||
|
|
||||||
|
var newSize = DrawingUtils.Resize(size,
|
||||||
|
BaseRequest.Width,
|
||||||
|
BaseRequest.Height,
|
||||||
|
BaseRequest.MaxWidth,
|
||||||
|
BaseRequest.MaxHeight);
|
||||||
|
|
||||||
|
return Convert.ToInt32(newSize.Width);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!IsVideoRequest)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return BaseRequest.MaxWidth ?? BaseRequest.Width;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int? OutputHeight
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (VideoStream != null && VideoStream.Width.HasValue && VideoStream.Height.HasValue)
|
||||||
|
{
|
||||||
|
var size = new ImageSize
|
||||||
|
{
|
||||||
|
Width = VideoStream.Width.Value,
|
||||||
|
Height = VideoStream.Height.Value
|
||||||
|
};
|
||||||
|
|
||||||
|
var newSize = DrawingUtils.Resize(size,
|
||||||
|
BaseRequest.Width,
|
||||||
|
BaseRequest.Height,
|
||||||
|
BaseRequest.MaxWidth,
|
||||||
|
BaseRequest.MaxHeight);
|
||||||
|
|
||||||
|
return Convert.ToInt32(newSize.Height);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!IsVideoRequest)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return BaseRequest.MaxHeight ?? BaseRequest.Height;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int? OutputAudioSampleRate
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (BaseRequest.Static || string.Equals(OutputAudioCodec, "copy", StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
if (AudioStream != null)
|
||||||
|
{
|
||||||
|
return AudioStream.SampleRate;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (BaseRequest.AudioSampleRate.HasValue)
|
||||||
|
{
|
||||||
|
// Don't exceed what the encoder supports
|
||||||
|
// Seeing issues of attempting to encode to 88200
|
||||||
|
return Math.Min(44100, BaseRequest.AudioSampleRate.Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Predicts the audio sample rate that will be in the output stream
|
/// Predicts the audio sample rate that will be in the output stream
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -189,6 +280,180 @@ namespace MediaBrowser.Controller.MediaEncoding
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Predicts the audio sample rate that will be in the output stream
|
||||||
|
/// </summary>
|
||||||
|
public int? TargetVideoBitDepth
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
var stream = VideoStream;
|
||||||
|
return stream == null || !BaseRequest.Static ? null : stream.BitDepth;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the target reference frames.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The target reference frames.</value>
|
||||||
|
public int? TargetRefFrames
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
var stream = VideoStream;
|
||||||
|
return stream == null || !BaseRequest.Static ? null : stream.RefFrames;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Predicts the audio sample rate that will be in the output stream
|
||||||
|
/// </summary>
|
||||||
|
public float? TargetFramerate
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
var stream = VideoStream;
|
||||||
|
var requestedFramerate = BaseRequest.MaxFramerate ?? BaseRequest.Framerate;
|
||||||
|
|
||||||
|
return requestedFramerate.HasValue && !BaseRequest.Static
|
||||||
|
? requestedFramerate
|
||||||
|
: stream == null ? null : stream.AverageFrameRate ?? stream.RealFrameRate;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public TransportStreamTimestamp TargetTimestamp
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
var defaultValue = string.Equals(OutputContainer, "m2ts", StringComparison.OrdinalIgnoreCase) ?
|
||||||
|
TransportStreamTimestamp.Valid :
|
||||||
|
TransportStreamTimestamp.None;
|
||||||
|
|
||||||
|
return !BaseRequest.Static
|
||||||
|
? defaultValue
|
||||||
|
: InputTimestamp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Predicts the audio sample rate that will be in the output stream
|
||||||
|
/// </summary>
|
||||||
|
public int? TargetPacketLength
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
var stream = VideoStream;
|
||||||
|
return !BaseRequest.Static
|
||||||
|
? null
|
||||||
|
: stream == null ? null : stream.PacketLength;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Predicts the audio sample rate that will be in the output stream
|
||||||
|
/// </summary>
|
||||||
|
public string TargetVideoProfile
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
var stream = VideoStream;
|
||||||
|
return !string.IsNullOrEmpty(BaseRequest.Profile) && !BaseRequest.Static
|
||||||
|
? BaseRequest.Profile
|
||||||
|
: stream == null ? null : stream.Profile;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string TargetVideoCodecTag
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
var stream = VideoStream;
|
||||||
|
return !BaseRequest.Static
|
||||||
|
? null
|
||||||
|
: stream == null ? null : stream.CodecTag;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool? IsTargetAnamorphic
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (BaseRequest.Static)
|
||||||
|
{
|
||||||
|
return VideoStream == null ? null : VideoStream.IsAnamorphic;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool? IsTargetInterlaced
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (BaseRequest.Static)
|
||||||
|
{
|
||||||
|
return VideoStream == null ? (bool?)null : VideoStream.IsInterlaced;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DeInterlace)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return VideoStream == null ? (bool?)null : VideoStream.IsInterlaced;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool? IsTargetAVC
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (BaseRequest.Static)
|
||||||
|
{
|
||||||
|
return VideoStream == null ? null : VideoStream.IsAVC;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int? TargetVideoStreamCount
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (BaseRequest.Static)
|
||||||
|
{
|
||||||
|
return GetMediaStreamCount(MediaStreamType.Video, int.MaxValue);
|
||||||
|
}
|
||||||
|
return GetMediaStreamCount(MediaStreamType.Video, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int? TargetAudioStreamCount
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (BaseRequest.Static)
|
||||||
|
{
|
||||||
|
return GetMediaStreamCount(MediaStreamType.Audio, int.MaxValue);
|
||||||
|
}
|
||||||
|
return GetMediaStreamCount(MediaStreamType.Audio, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private int? GetMediaStreamCount(MediaStreamType type, int limit)
|
||||||
|
{
|
||||||
|
var count = MediaSource.GetStreamCount(type);
|
||||||
|
|
||||||
|
if (count.HasValue)
|
||||||
|
{
|
||||||
|
count = Math.Min(count.Value, limit);
|
||||||
|
}
|
||||||
|
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
protected void DisposeIsoMount()
|
protected void DisposeIsoMount()
|
||||||
{
|
{
|
||||||
if (IsoMount != null)
|
if (IsoMount != null)
|
||||||
|
|
|
@ -150,248 +150,6 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public int? TotalOutputBitrate
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return (OutputAudioBitrate ?? 0) + (OutputVideoBitrate ?? 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public int? OutputWidth
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (VideoStream != null && VideoStream.Width.HasValue && VideoStream.Height.HasValue)
|
|
||||||
{
|
|
||||||
var size = new ImageSize
|
|
||||||
{
|
|
||||||
Width = VideoStream.Width.Value,
|
|
||||||
Height = VideoStream.Height.Value
|
|
||||||
};
|
|
||||||
|
|
||||||
var newSize = DrawingUtils.Resize(size,
|
|
||||||
Options.Width,
|
|
||||||
Options.Height,
|
|
||||||
Options.MaxWidth,
|
|
||||||
Options.MaxHeight);
|
|
||||||
|
|
||||||
return Convert.ToInt32(newSize.Width);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!IsVideoRequest)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return Options.MaxWidth ?? Options.Width;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public int? OutputHeight
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (VideoStream != null && VideoStream.Width.HasValue && VideoStream.Height.HasValue)
|
|
||||||
{
|
|
||||||
var size = new ImageSize
|
|
||||||
{
|
|
||||||
Width = VideoStream.Width.Value,
|
|
||||||
Height = VideoStream.Height.Value
|
|
||||||
};
|
|
||||||
|
|
||||||
var newSize = DrawingUtils.Resize(size,
|
|
||||||
Options.Width,
|
|
||||||
Options.Height,
|
|
||||||
Options.MaxWidth,
|
|
||||||
Options.MaxHeight);
|
|
||||||
|
|
||||||
return Convert.ToInt32(newSize.Height);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!IsVideoRequest)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return Options.MaxHeight ?? Options.Height;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Predicts the audio sample rate that will be in the output stream
|
|
||||||
/// </summary>
|
|
||||||
public int? TargetVideoBitDepth
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var stream = VideoStream;
|
|
||||||
return stream == null || !Options.Static ? null : stream.BitDepth;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the target reference frames.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The target reference frames.</value>
|
|
||||||
public int? TargetRefFrames
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var stream = VideoStream;
|
|
||||||
return stream == null || !Options.Static ? null : stream.RefFrames;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Predicts the audio sample rate that will be in the output stream
|
|
||||||
/// </summary>
|
|
||||||
public float? TargetFramerate
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var stream = VideoStream;
|
|
||||||
var requestedFramerate = Options.MaxFramerate ?? Options.Framerate;
|
|
||||||
|
|
||||||
return requestedFramerate.HasValue && !Options.Static
|
|
||||||
? requestedFramerate
|
|
||||||
: stream == null ? null : stream.AverageFrameRate ?? stream.RealFrameRate;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public TransportStreamTimestamp TargetTimestamp
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var defaultValue = string.Equals(OutputContainer, "m2ts", StringComparison.OrdinalIgnoreCase) ?
|
|
||||||
TransportStreamTimestamp.Valid :
|
|
||||||
TransportStreamTimestamp.None;
|
|
||||||
|
|
||||||
return !Options.Static
|
|
||||||
? defaultValue
|
|
||||||
: InputTimestamp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Predicts the audio sample rate that will be in the output stream
|
|
||||||
/// </summary>
|
|
||||||
public int? TargetPacketLength
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var stream = VideoStream;
|
|
||||||
return !Options.Static
|
|
||||||
? null
|
|
||||||
: stream == null ? null : stream.PacketLength;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Predicts the audio sample rate that will be in the output stream
|
|
||||||
/// </summary>
|
|
||||||
public string TargetVideoProfile
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var stream = VideoStream;
|
|
||||||
return !string.IsNullOrEmpty(Options.Profile) && !Options.Static
|
|
||||||
? Options.Profile
|
|
||||||
: stream == null ? null : stream.Profile;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public string TargetVideoCodecTag
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var stream = VideoStream;
|
|
||||||
return !Options.Static
|
|
||||||
? null
|
|
||||||
: stream == null ? null : stream.CodecTag;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool? IsTargetAnamorphic
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (Options.Static)
|
|
||||||
{
|
|
||||||
return VideoStream == null ? null : VideoStream.IsAnamorphic;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool? IsTargetInterlaced
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (Options.Static)
|
|
||||||
{
|
|
||||||
return VideoStream == null ? (bool?)null : VideoStream.IsInterlaced;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (DeInterlace)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return VideoStream == null ? (bool?)null : VideoStream.IsInterlaced;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool? IsTargetAVC
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (Options.Static)
|
|
||||||
{
|
|
||||||
return VideoStream == null ? null : VideoStream.IsAVC;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public int? TargetVideoStreamCount
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (Options.Static)
|
|
||||||
{
|
|
||||||
return GetMediaStreamCount(MediaStreamType.Video, int.MaxValue);
|
|
||||||
}
|
|
||||||
return GetMediaStreamCount(MediaStreamType.Video, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public int? TargetAudioStreamCount
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (Options.Static)
|
|
||||||
{
|
|
||||||
return GetMediaStreamCount(MediaStreamType.Audio, int.MaxValue);
|
|
||||||
}
|
|
||||||
return GetMediaStreamCount(MediaStreamType.Audio, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private int? GetMediaStreamCount(MediaStreamType type, int limit)
|
|
||||||
{
|
|
||||||
var count = MediaSource.GetStreamCount(type);
|
|
||||||
|
|
||||||
if (count.HasValue)
|
|
||||||
{
|
|
||||||
count = Math.Min(count.Value, limit);
|
|
||||||
}
|
|
||||||
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void ReportTranscodingProgress(TimeSpan? transcodingPosition, float? framerate, double? percentComplete, long? bytesTranscoded, int? bitRate)
|
public override void ReportTranscodingProgress(TimeSpan? transcodingPosition, float? framerate, double? percentComplete, long? bytesTranscoded, int? bitRate)
|
||||||
{
|
{
|
||||||
var ticks = transcodingPosition.HasValue ? transcodingPosition.Value.Ticks : (long?)null;
|
var ticks = transcodingPosition.HasValue ? transcodingPosition.Value.Ticks : (long?)null;
|
||||||
|
|
|
@ -105,7 +105,6 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||||
//state.OutputContainer = (container ?? string.Empty).TrimStart('.');
|
//state.OutputContainer = (container ?? string.Empty).TrimStart('.');
|
||||||
|
|
||||||
state.OutputAudioBitrate = encodingHelper.GetAudioBitrateParam(state.Options, state.AudioStream);
|
state.OutputAudioBitrate = encodingHelper.GetAudioBitrateParam(state.Options, state.AudioStream);
|
||||||
state.OutputAudioSampleRate = request.AudioSampleRate;
|
|
||||||
|
|
||||||
state.OutputAudioCodec = state.Options.AudioCodec;
|
state.OutputAudioCodec = state.Options.AudioCodec;
|
||||||
|
|
||||||
|
|
|
@ -80,11 +80,6 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||||
int defaultImageExtractionTimeoutMs,
|
int defaultImageExtractionTimeoutMs,
|
||||||
bool enableEncoderFontFile, IEnvironmentInfo environmentInfo)
|
bool enableEncoderFontFile, IEnvironmentInfo environmentInfo)
|
||||||
{
|
{
|
||||||
if (jsonSerializer == null)
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException("jsonSerializer");
|
|
||||||
}
|
|
||||||
|
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
_jsonSerializer = jsonSerializer;
|
_jsonSerializer = jsonSerializer;
|
||||||
ConfigurationManager = configurationManager;
|
ConfigurationManager = configurationManager;
|
||||||
|
@ -330,7 +325,7 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||||
}
|
}
|
||||||
|
|
||||||
var newPaths = GetEncoderPaths(appPath);
|
var newPaths = GetEncoderPaths(appPath);
|
||||||
if (string.IsNullOrWhiteSpace(newPaths.Item1) || string.IsNullOrWhiteSpace(newPaths.Item2))
|
if (string.IsNullOrWhiteSpace(newPaths.Item1) || string.IsNullOrWhiteSpace(newPaths.Item2) || IsSystemInstalledPath(appPath))
|
||||||
{
|
{
|
||||||
newPaths = TestForInstalledVersions();
|
newPaths = TestForInstalledVersions();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user