pass around encoding options

pull/1154/head
Luke Pulverenti 7 years ago
parent 4aaf3499bd
commit d500998d78

@ -22,6 +22,7 @@ using System.Threading.Tasks;
using MediaBrowser.Common.Net; using MediaBrowser.Common.Net;
using MediaBrowser.Controller; using MediaBrowser.Controller;
using MediaBrowser.Controller.Net; using MediaBrowser.Controller.Net;
using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Diagnostics; using MediaBrowser.Model.Diagnostics;
namespace MediaBrowser.Api.Playback namespace MediaBrowser.Api.Playback
@ -100,11 +101,7 @@ namespace MediaBrowser.Api.Playback
/// <summary> /// <summary>
/// Gets the command line arguments. /// Gets the command line arguments.
/// </summary> /// </summary>
/// <param name="outputPath">The output path.</param> protected abstract string GetCommandLineArguments(string outputPath, EncodingOptions encodingOptions, StreamState state, bool isEncoding);
/// <param name="state">The state.</param>
/// <param name="isEncoding">if set to <c>true</c> [is encoding].</param>
/// <returns>System.String.</returns>
protected abstract string GetCommandLineArguments(string outputPath, StreamState state, bool isEncoding);
/// <summary> /// <summary>
/// Gets the type of the transcoding job. /// Gets the type of the transcoding job.
@ -125,11 +122,11 @@ namespace MediaBrowser.Api.Playback
/// <summary> /// <summary>
/// Gets the output file path. /// Gets the output file path.
/// </summary> /// </summary>
private string GetOutputFilePath(StreamState state, string outputFileExtension) private string GetOutputFilePath(StreamState state, EncodingOptions encodingOptions, string outputFileExtension)
{ {
var folder = ServerConfigurationManager.ApplicationPaths.TranscodingTempPath; var folder = ServerConfigurationManager.ApplicationPaths.TranscodingTempPath;
var data = GetCommandLineArguments("dummy\\dummy", state, false); var data = GetCommandLineArguments("dummy\\dummy", encodingOptions, state, false);
data += "-" + (state.Request.DeviceId ?? string.Empty); data += "-" + (state.Request.DeviceId ?? string.Empty);
data += "-" + (state.Request.PlaySessionId ?? string.Empty); data += "-" + (state.Request.PlaySessionId ?? string.Empty);
@ -217,8 +214,10 @@ namespace MediaBrowser.Api.Playback
} }
} }
var encodingOptions = ApiEntryPoint.Instance.GetEncodingOptions();
var transcodingId = Guid.NewGuid().ToString("N"); var transcodingId = Guid.NewGuid().ToString("N");
var commandLineArgs = GetCommandLineArguments(outputPath, state, true); var commandLineArgs = GetCommandLineArguments(outputPath, encodingOptions, state, true);
var process = ApiEntryPoint.Instance.ProcessFactory.Create(new ProcessOptions var process = ApiEntryPoint.Instance.ProcessFactory.Create(new ProcessOptions
{ {
@ -826,7 +825,10 @@ namespace MediaBrowser.Api.Playback
var ext = string.IsNullOrWhiteSpace(state.OutputContainer) var ext = string.IsNullOrWhiteSpace(state.OutputContainer)
? GetOutputFileExtension(state) ? GetOutputFileExtension(state)
: ("." + state.OutputContainer); : ("." + state.OutputContainer);
state.OutputFilePath = GetOutputFilePath(state, ext);
var encodingOptions = ApiEntryPoint.Instance.GetEncodingOptions();
state.OutputFilePath = GetOutputFilePath(state, encodingOptions, ext);
return state; return state;
} }

@ -14,6 +14,7 @@ using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using MediaBrowser.Controller.Net; using MediaBrowser.Controller.Net;
using MediaBrowser.Model.Configuration;
namespace MediaBrowser.Api.Playback.Hls namespace MediaBrowser.Api.Playback.Hls
{ {
@ -25,15 +26,12 @@ namespace MediaBrowser.Api.Playback.Hls
/// <summary> /// <summary>
/// Gets the audio arguments. /// Gets the audio arguments.
/// </summary> /// </summary>
/// <param name="state">The state.</param> protected abstract string GetAudioArguments(StreamState state, EncodingOptions encodingOptions);
/// <returns>System.String.</returns>
protected abstract string GetAudioArguments(StreamState state);
/// <summary> /// <summary>
/// Gets the video arguments. /// Gets the video arguments.
/// </summary> /// </summary>
/// <param name="state">The state.</param> protected abstract string GetVideoArguments(StreamState state, EncodingOptions encodingOptions);
/// <returns>System.String.</returns>
protected abstract string GetVideoArguments(StreamState state);
/// <summary> /// <summary>
/// Gets the segment file extension. /// Gets the segment file extension.
@ -242,10 +240,8 @@ namespace MediaBrowser.Api.Playback.Hls
} }
} }
protected override string GetCommandLineArguments(string outputPath, StreamState state, bool isEncoding) protected override string GetCommandLineArguments(string outputPath, EncodingOptions encodingOptions, StreamState state, bool isEncoding)
{ {
var encodingOptions = ApiEntryPoint.Instance.GetEncodingOptions();
var itsOffsetMs = 0; var itsOffsetMs = 0;
var itsOffset = itsOffsetMs == 0 ? string.Empty : string.Format("-itsoffset {0} ", TimeSpan.FromMilliseconds(itsOffsetMs).TotalSeconds.ToString(UsCulture)); var itsOffset = itsOffsetMs == 0 ? string.Empty : string.Format("-itsoffset {0} ", TimeSpan.FromMilliseconds(itsOffsetMs).TotalSeconds.ToString(UsCulture));
@ -285,8 +281,8 @@ namespace MediaBrowser.Api.Playback.Hls
EncodingHelper.GetInputArgument(state, encodingOptions), EncodingHelper.GetInputArgument(state, encodingOptions),
threads, threads,
EncodingHelper.GetMapArgs(state), EncodingHelper.GetMapArgs(state),
GetVideoArguments(state), GetVideoArguments(state, encodingOptions),
GetAudioArguments(state), GetAudioArguments(state, encodingOptions),
state.SegmentLength.ToString(UsCulture), state.SegmentLength.ToString(UsCulture),
startNumberParam, startNumberParam,
outputPath, outputPath,
@ -306,8 +302,8 @@ namespace MediaBrowser.Api.Playback.Hls
EncodingHelper.GetInputArgument(state, encodingOptions), EncodingHelper.GetInputArgument(state, encodingOptions),
threads, threads,
EncodingHelper.GetMapArgs(state), EncodingHelper.GetMapArgs(state),
GetVideoArguments(state), GetVideoArguments(state, encodingOptions),
GetAudioArguments(state), GetAudioArguments(state, encodingOptions),
state.SegmentLength.ToString(UsCulture), state.SegmentLength.ToString(UsCulture),
startNumberParam, startNumberParam,
state.HlsListSize.ToString(UsCulture), state.HlsListSize.ToString(UsCulture),

@ -18,6 +18,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Services; using MediaBrowser.Model.Services;
using MimeTypes = MediaBrowser.Model.Net.MimeTypes; using MimeTypes = MediaBrowser.Model.Net.MimeTypes;
@ -777,7 +778,7 @@ namespace MediaBrowser.Api.Playback.Hls
return ResultFactory.GetResult(playlistText, MimeTypes.GetMimeType("playlist.m3u8"), new Dictionary<string, string>()); return ResultFactory.GetResult(playlistText, MimeTypes.GetMimeType("playlist.m3u8"), new Dictionary<string, string>());
} }
protected override string GetAudioArguments(StreamState state) protected override string GetAudioArguments(StreamState state, EncodingOptions encodingOptions)
{ {
var audioCodec = EncodingHelper.GetAudioEncoder(state); var audioCodec = EncodingHelper.GetAudioEncoder(state);
@ -813,7 +814,7 @@ namespace MediaBrowser.Api.Playback.Hls
if (string.Equals(audioCodec, "copy", StringComparison.OrdinalIgnoreCase)) if (string.Equals(audioCodec, "copy", StringComparison.OrdinalIgnoreCase))
{ {
var videoCodec = EncodingHelper.GetVideoEncoder(state, ApiEntryPoint.Instance.GetEncodingOptions()); var videoCodec = EncodingHelper.GetVideoEncoder(state, encodingOptions);
if (string.Equals(videoCodec, "copy", StringComparison.OrdinalIgnoreCase) && state.EnableBreakOnNonKeyFrames(videoCodec)) if (string.Equals(videoCodec, "copy", StringComparison.OrdinalIgnoreCase) && state.EnableBreakOnNonKeyFrames(videoCodec))
{ {
@ -844,19 +845,19 @@ namespace MediaBrowser.Api.Playback.Hls
args += " -ar " + state.OutputAudioSampleRate.Value.ToString(UsCulture); args += " -ar " + state.OutputAudioSampleRate.Value.ToString(UsCulture);
} }
args += " " + EncodingHelper.GetAudioFilterParam(state, ApiEntryPoint.Instance.GetEncodingOptions(), true); args += " " + EncodingHelper.GetAudioFilterParam(state, encodingOptions, true);
return args; return args;
} }
protected override string GetVideoArguments(StreamState state) protected override string GetVideoArguments(StreamState state, EncodingOptions encodingOptions)
{ {
if (!state.IsOutputVideo) if (!state.IsOutputVideo)
{ {
return string.Empty; return string.Empty;
} }
var codec = EncodingHelper.GetVideoEncoder(state, ApiEntryPoint.Instance.GetEncodingOptions()); var codec = EncodingHelper.GetVideoEncoder(state, encodingOptions);
var args = "-codec:v:0 " + codec; var args = "-codec:v:0 " + codec;
@ -882,8 +883,6 @@ namespace MediaBrowser.Api.Playback.Hls
var hasGraphicalSubs = state.SubtitleStream != null && !state.SubtitleStream.IsTextSubtitleStream && state.SubtitleDeliveryMethod == SubtitleDeliveryMethod.Encode; var hasGraphicalSubs = state.SubtitleStream != null && !state.SubtitleStream.IsTextSubtitleStream && state.SubtitleDeliveryMethod == SubtitleDeliveryMethod.Encode;
var encodingOptions = ApiEntryPoint.Instance.GetEncodingOptions();
args += " " + EncodingHelper.GetVideoQualityParam(state, codec, encodingOptions, GetDefaultH264Preset()) + keyFrameArg; args += " " + EncodingHelper.GetVideoQualityParam(state, codec, encodingOptions, GetDefaultH264Preset()) + keyFrameArg;
//args += " -mixed-refs 0 -refs 3 -x264opts b_pyramid=0:weightb=0:weightp=0"; //args += " -mixed-refs 0 -refs 3 -x264opts b_pyramid=0:weightb=0:weightp=0";
@ -918,9 +917,8 @@ namespace MediaBrowser.Api.Playback.Hls
return args; return args;
} }
protected override string GetCommandLineArguments(string outputPath, StreamState state, bool isEncoding) protected override string GetCommandLineArguments(string outputPath, EncodingOptions encodingOptions, StreamState state, bool isEncoding)
{ {
var encodingOptions = ApiEntryPoint.Instance.GetEncodingOptions();
var threads = EncodingHelper.GetNumberOfThreads(state, encodingOptions, false); var threads = EncodingHelper.GetNumberOfThreads(state, encodingOptions, false);
var inputModifier = EncodingHelper.GetInputModifier(state, encodingOptions); var inputModifier = EncodingHelper.GetInputModifier(state, encodingOptions);
@ -947,7 +945,7 @@ namespace MediaBrowser.Api.Playback.Hls
segmentFormat = "mpegts"; segmentFormat = "mpegts";
} }
var videoCodec = EncodingHelper.GetVideoEncoder(state, ApiEntryPoint.Instance.GetEncodingOptions()); var videoCodec = EncodingHelper.GetVideoEncoder(state, encodingOptions);
var breakOnNonKeyFrames = state.EnableBreakOnNonKeyFrames(videoCodec); var breakOnNonKeyFrames = state.EnableBreakOnNonKeyFrames(videoCodec);
var breakOnNonKeyFramesArg = breakOnNonKeyFrames ? " -break_non_keyframes 1" : ""; var breakOnNonKeyFramesArg = breakOnNonKeyFrames ? " -break_non_keyframes 1" : "";
@ -957,8 +955,8 @@ namespace MediaBrowser.Api.Playback.Hls
EncodingHelper.GetInputArgument(state, encodingOptions), EncodingHelper.GetInputArgument(state, encodingOptions),
threads, threads,
mapArgs, mapArgs,
GetVideoArguments(state), GetVideoArguments(state, encodingOptions),
GetAudioArguments(state), GetAudioArguments(state, encodingOptions),
state.SegmentLength.ToString(UsCulture), state.SegmentLength.ToString(UsCulture),
startNumberParam, startNumberParam,
outputPath, outputPath,

@ -7,6 +7,7 @@ using MediaBrowser.Model.IO;
using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Serialization;
using System; using System;
using MediaBrowser.Controller.Net; using MediaBrowser.Controller.Net;
using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Dlna; using MediaBrowser.Model.Dlna;
using MediaBrowser.Model.Services; using MediaBrowser.Model.Services;
@ -31,9 +32,7 @@ namespace MediaBrowser.Api.Playback.Hls
/// <summary> /// <summary>
/// Gets the audio arguments. /// Gets the audio arguments.
/// </summary> /// </summary>
/// <param name="state">The state.</param> protected override string GetAudioArguments(StreamState state, EncodingOptions encodingOptions)
/// <returns>System.String.</returns>
protected override string GetAudioArguments(StreamState state)
{ {
var codec = EncodingHelper.GetAudioEncoder(state); var codec = EncodingHelper.GetAudioEncoder(state);
@ -63,7 +62,7 @@ namespace MediaBrowser.Api.Playback.Hls
args += " -ar " + state.OutputAudioSampleRate.Value.ToString(UsCulture); args += " -ar " + state.OutputAudioSampleRate.Value.ToString(UsCulture);
} }
args += " " + EncodingHelper.GetAudioFilterParam(state, ApiEntryPoint.Instance.GetEncodingOptions(), true); args += " " + EncodingHelper.GetAudioFilterParam(state, encodingOptions, true);
return args; return args;
} }
@ -71,16 +70,14 @@ namespace MediaBrowser.Api.Playback.Hls
/// <summary> /// <summary>
/// Gets the video arguments. /// Gets the video arguments.
/// </summary> /// </summary>
/// <param name="state">The state.</param> protected override string GetVideoArguments(StreamState state, EncodingOptions encodingOptions)
/// <returns>System.String.</returns>
protected override string GetVideoArguments(StreamState state)
{ {
if (!state.IsOutputVideo) if (!state.IsOutputVideo)
{ {
return string.Empty; return string.Empty;
} }
var codec = EncodingHelper.GetVideoEncoder(state, ApiEntryPoint.Instance.GetEncodingOptions()); var codec = EncodingHelper.GetVideoEncoder(state, encodingOptions);
var args = "-codec:v:0 " + codec; var args = "-codec:v:0 " + codec;
@ -106,7 +103,6 @@ namespace MediaBrowser.Api.Playback.Hls
var hasGraphicalSubs = state.SubtitleStream != null && !state.SubtitleStream.IsTextSubtitleStream && state.SubtitleDeliveryMethod == SubtitleDeliveryMethod.Encode; var hasGraphicalSubs = state.SubtitleStream != null && !state.SubtitleStream.IsTextSubtitleStream && state.SubtitleDeliveryMethod == SubtitleDeliveryMethod.Encode;
var encodingOptions = ApiEntryPoint.Instance.GetEncodingOptions();
args += " " + EncodingHelper.GetVideoQualityParam(state, codec, encodingOptions, GetDefaultH264Preset()) + keyFrameArg; args += " " + EncodingHelper.GetVideoQualityParam(state, codec, encodingOptions, GetDefaultH264Preset()) + keyFrameArg;
// Add resolution params, if specified // Add resolution params, if specified

@ -10,6 +10,7 @@ using MediaBrowser.Model.Serialization;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using MediaBrowser.Controller.Net; using MediaBrowser.Controller.Net;
using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.IO; using MediaBrowser.Model.IO;
using MediaBrowser.Model.Services; using MediaBrowser.Model.Services;
using MediaBrowser.Model.System; using MediaBrowser.Model.System;
@ -58,10 +59,8 @@ namespace MediaBrowser.Api.Playback.Progressive
return ProcessRequest(request, true); return ProcessRequest(request, true);
} }
protected override string GetCommandLineArguments(string outputPath, StreamState state, bool isEncoding) protected override string GetCommandLineArguments(string outputPath, EncodingOptions encodingOptions, StreamState state, bool isEncoding)
{ {
var encodingOptions = ApiEntryPoint.Instance.GetEncodingOptions();
return EncodingHelper.GetProgressiveAudioFullCommandLine(state, encodingOptions, outputPath); return EncodingHelper.GetProgressiveAudioFullCommandLine(state, encodingOptions, outputPath);
} }
} }

@ -8,6 +8,7 @@ using MediaBrowser.Model.IO;
using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Serialization;
using System.Threading.Tasks; using System.Threading.Tasks;
using MediaBrowser.Controller.Net; using MediaBrowser.Controller.Net;
using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Services; using MediaBrowser.Model.Services;
using MediaBrowser.Model.System; using MediaBrowser.Model.System;
@ -91,10 +92,8 @@ namespace MediaBrowser.Api.Playback.Progressive
return ProcessRequest(request, true); return ProcessRequest(request, true);
} }
protected override string GetCommandLineArguments(string outputPath, StreamState state, bool isEncoding) protected override string GetCommandLineArguments(string outputPath, EncodingOptions encodingOptions, StreamState state, bool isEncoding)
{ {
var encodingOptions = ApiEntryPoint.Instance.GetEncodingOptions();
return EncodingHelper.GetProgressiveVideoFullCommandLine(state, encodingOptions, outputPath, GetDefaultH264Preset()); return EncodingHelper.GetProgressiveVideoFullCommandLine(state, encodingOptions, outputPath, GetDefaultH264Preset());
} }
} }

Loading…
Cancel
Save