"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "Jellyfin.Api/Controllers/DynamicHlsController.cs" between
jellyfin-10.8.9.tar.gz and jellyfin-10.8.10.tar.gz

About: Jellyfin is a suite of multimedia applications that puts you in control of managing and streaming your digital media.

DynamicHlsController.cs  (jellyfin-10.8.9):DynamicHlsController.cs  (jellyfin-10.8.10)
skipping to change at line 16 skipping to change at line 16
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Jellyfin.Api.Attributes; using Jellyfin.Api.Attributes;
using Jellyfin.Api.Constants; using Jellyfin.Api.Constants;
using Jellyfin.Api.Helpers; using Jellyfin.Api.Helpers;
using Jellyfin.Api.Models.PlaybackDtos; using Jellyfin.Api.Models.PlaybackDtos;
using Jellyfin.Api.Models.StreamingDtos; using Jellyfin.Api.Models.StreamingDtos;
using Jellyfin.Extensions;
using Jellyfin.MediaEncoding.Hls.Playlist; using Jellyfin.MediaEncoding.Hls.Playlist;
using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Configuration;
using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Devices; using MediaBrowser.Controller.Devices;
using MediaBrowser.Controller.Dlna; using MediaBrowser.Controller.Dlna;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.MediaEncoding; using MediaBrowser.Controller.MediaEncoding;
using MediaBrowser.Controller.Net; using MediaBrowser.Controller.Net;
using MediaBrowser.MediaEncoding.Encoder;
using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Dlna; using MediaBrowser.Model.Dlna;
using MediaBrowser.Model.IO; using MediaBrowser.Model.IO;
using MediaBrowser.Model.Net; using MediaBrowser.Model.Net;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
namespace Jellyfin.Api.Controllers namespace Jellyfin.Api.Controllers
skipping to change at line 1665 skipping to change at line 1667
threads, threads,
mapArgs, mapArgs,
GetVideoArguments(state, startNumber, isEventPlaylist), GetVideoArguments(state, startNumber, isEventPlaylist),
GetAudioArguments(state), GetAudioArguments(state),
maxMuxingQueueSize, maxMuxingQueueSize,
state.SegmentLength.ToString(CultureInfo.InvariantCulture), state.SegmentLength.ToString(CultureInfo.InvariantCulture),
segmentFormat, segmentFormat,
startNumber.ToString(CultureInfo.InvariantCulture), startNumber.ToString(CultureInfo.InvariantCulture),
baseUrlParam, baseUrlParam,
isEventPlaylist ? "event" : "vod", isEventPlaylist ? "event" : "vod",
outputTsArg, EncodingUtils.NormalizePath(outputTsArg),
outputPath).Trim(); EncodingUtils.NormalizePath(outputPath)).Trim();
} }
/// <summary> /// <summary>
/// Gets the audio arguments for transcoding. /// Gets the audio arguments for transcoding.
/// </summary> /// </summary>
/// <param name="state">The <see cref="StreamState"/>.</param> /// <param name="state">The <see cref="StreamState"/>.</param>
/// <returns>The command line arguments for audio transcoding.</returns> /// <returns>The command line arguments for audio transcoding.</returns>
private string GetAudioArguments(StreamState state) private string GetAudioArguments(StreamState state)
{ {
if (state.AudioStream == null) if (state.AudioStream == null)
skipping to change at line 1696 skipping to change at line 1698
{ {
var bitStreamArgs = EncodingHelper.GetAudioBitStreamArgument s(state, state.Request.SegmentContainer, state.MediaSource.Container); var bitStreamArgs = EncodingHelper.GetAudioBitStreamArgument s(state, state.Request.SegmentContainer, state.MediaSource.Container);
return "-acodec copy -strict -2" + bitStreamArgs; return "-acodec copy -strict -2" + bitStreamArgs;
} }
var audioTranscodeParams = string.Empty; var audioTranscodeParams = string.Empty;
audioTranscodeParams += "-acodec " + audioCodec; audioTranscodeParams += "-acodec " + audioCodec;
if (state.OutputAudioBitrate.HasValue) if (state.OutputAudioBitrate.HasValue && !EncodingHelper.Lossles sAudioCodecs.Contains(state.ActualOutputAudioCodec, StringComparison.OrdinalIgno reCase))
{ {
audioTranscodeParams += " -ab " + state.OutputAudioBitrate.V alue.ToString(CultureInfo.InvariantCulture); audioTranscodeParams += " -ab " + state.OutputAudioBitrate.V alue.ToString(CultureInfo.InvariantCulture);
} }
if (state.OutputAudioChannels.HasValue) if (state.OutputAudioChannels.HasValue)
{ {
audioTranscodeParams += " -ac " + state.OutputAudioChannels. Value.ToString(CultureInfo.InvariantCulture); audioTranscodeParams += " -ac " + state.OutputAudioChannels. Value.ToString(CultureInfo.InvariantCulture);
} }
if (state.OutputAudioSampleRate.HasValue) if (state.OutputAudioSampleRate.HasValue)
{ {
audioTranscodeParams += " -ar " + state.OutputAudioSampleRat e.Value.ToString(CultureInfo.InvariantCulture); audioTranscodeParams += " -ar " + state.OutputAudioSampleRat e.Value.ToString(CultureInfo.InvariantCulture);
} }
audioTranscodeParams += " -vn"; audioTranscodeParams += " -vn";
return audioTranscodeParams; return audioTranscodeParams;
} }
// dts, flac, opus and truehd are experimental in mp4 muxer // dts, flac, opus and truehd are experimental in mp4 muxer
var strictArgs = string.Empty; var strictArgs = string.Empty;
var actualOutputAudioCodec = state.ActualOutputAudioCodec;
if (string.Equals(state.ActualOutputAudioCodec, "flac", StringCompar if (string.Equals(actualOutputAudioCodec, "flac", StringComparison.O
ison.OrdinalIgnoreCase) rdinalIgnoreCase)
|| string.Equals(state.ActualOutputAudioCodec, "opus", StringCom || string.Equals(actualOutputAudioCodec, "opus", StringCompariso
parison.OrdinalIgnoreCase) n.OrdinalIgnoreCase)
|| string.Equals(state.ActualOutputAudioCodec, "dts", StringComp || string.Equals(actualOutputAudioCodec, "dts", StringComparison
arison.OrdinalIgnoreCase) .OrdinalIgnoreCase)
|| string.Equals(state.ActualOutputAudioCodec, "truehd", StringC || string.Equals(actualOutputAudioCodec, "truehd", StringCompari
omparison.OrdinalIgnoreCase)) son.OrdinalIgnoreCase))
{ {
strictArgs = " -strict -2"; strictArgs = " -strict -2";
} }
if (EncodingHelper.IsCopyCodec(audioCodec)) if (EncodingHelper.IsCopyCodec(audioCodec))
{ {
var videoCodec = _encodingHelper.GetVideoEncoder(state, _encodin gOptions); var videoCodec = _encodingHelper.GetVideoEncoder(state, _encodin gOptions);
var bitStreamArgs = EncodingHelper.GetAudioBitStreamArguments(st ate, state.Request.SegmentContainer, state.MediaSource.Container); var bitStreamArgs = EncodingHelper.GetAudioBitStreamArguments(st ate, state.Request.SegmentContainer, state.MediaSource.Container);
var copyArgs = "-codec:a:0 copy" + bitStreamArgs + strictArgs; var copyArgs = "-codec:a:0 copy" + bitStreamArgs + strictArgs;
skipping to change at line 1750 skipping to change at line 1752
var args = "-codec:a:0 " + audioCodec + strictArgs; var args = "-codec:a:0 " + audioCodec + strictArgs;
var channels = state.OutputAudioChannels; var channels = state.OutputAudioChannels;
if (channels.HasValue) if (channels.HasValue)
{ {
args += " -ac " + channels.Value; args += " -ac " + channels.Value;
} }
var bitrate = state.OutputAudioBitrate; var bitrate = state.OutputAudioBitrate;
if (bitrate.HasValue && !EncodingHelper.LosslessAudioCodecs.Contains
if (bitrate.HasValue) (actualOutputAudioCodec, StringComparison.OrdinalIgnoreCase))
{ {
args += " -ab " + bitrate.Value.ToString(CultureInfo.InvariantCu lture); args += " -ab " + bitrate.Value.ToString(CultureInfo.InvariantCu lture);
} }
if (state.OutputAudioSampleRate.HasValue) if (state.OutputAudioSampleRate.HasValue)
{ {
args += " -ar " + state.OutputAudioSampleRate.Value.ToString(Cul tureInfo.InvariantCulture); args += " -ar " + state.OutputAudioSampleRate.Value.ToString(Cul tureInfo.InvariantCulture);
} }
args += _encodingHelper.GetAudioFilterParam(state, _encodingOptions) ; args += _encodingHelper.GetAudioFilterParam(state, _encodingOptions) ;
skipping to change at line 1846 skipping to change at line 1847
// Currenly b-frames in libx265 breaks the FMP4-HLS playback on iOS, disable it for now. // Currenly b-frames in libx265 breaks the FMP4-HLS playback on iOS, disable it for now.
if (string.Equals(codec, "libx265", StringComparison.OrdinalIgno reCase)) if (string.Equals(codec, "libx265", StringComparison.OrdinalIgno reCase))
{ {
args += " -bf 0"; args += " -bf 0";
} }
// 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";
// video processing filters. // video processing filters.
args += _encodingHelper.GetVideoProcessingFilterParam(state, _en var videoProcessParam = _encodingHelper.GetVideoProcessingFilter
codingOptions, codec); Param(state, _encodingOptions, codec);
var negativeMapArgs = _encodingHelper.GetNegativeMapArgsByFilter
s(state, videoProcessParam);
args = negativeMapArgs + args + videoProcessParam;
// -start_at_zero is necessary to use with -ss when seeking, // -start_at_zero is necessary to use with -ss when seeking,
// otherwise the target position cannot be determined. // otherwise the target position cannot be determined.
if (state.SubtitleStream != null) if (state.SubtitleStream != null)
{ {
// Disable start_at_zero for external graphical subs // Disable start_at_zero for external graphical subs
if (!(state.SubtitleStream.IsExternal && !state.SubtitleStre am.IsTextSubtitleStream)) if (!(state.SubtitleStream.IsExternal && !state.SubtitleStre am.IsTextSubtitleStream))
{ {
args += " -start_at_zero"; args += " -start_at_zero";
} }
 End of changes. 7 change blocks. 
16 lines changed or deleted 23 lines changed or added

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)