From 8ee9a0adf9f4b1ea72a4bbe322ef7941975a4b70 Mon Sep 17 00:00:00 2001 From: Vincent Lark Date: Sat, 21 Oct 2023 23:57:05 +0200 Subject: [PATCH] Forward user_agent config to ffprobe --- .../Encoder/MediaEncoder.cs | 6 +++ .../Probing/ProbeExternalSourcesTests.cs | 47 +++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 tests/Jellyfin.MediaEncoding.Tests/Probing/ProbeExternalSourcesTests.cs diff --git a/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs b/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs index 4668b8bbbc..e8041f1984 100644 --- a/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs +++ b/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs @@ -418,6 +418,7 @@ namespace MediaBrowser.MediaEncoding.Encoder public Task GetMediaInfo(MediaInfoRequest request, CancellationToken cancellationToken) { var extractChapters = request.MediaType == DlnaProfileType.Video && request.ExtractChapters; + var requiredHeaders = request.MediaSource.RequiredHttpHeaders; var analyzeDuration = string.Empty; var ffmpegAnalyzeDuration = _config.GetFFmpegAnalyzeDuration() ?? string.Empty; var ffmpegProbeSize = _config.GetFFmpegProbeSize() ?? string.Empty; @@ -442,6 +443,11 @@ namespace MediaBrowser.MediaEncoding.Encoder extraArgs += " -probesize " + ffmpegProbeSize; } + if (requiredHeaders.ContainsKey("user_agent")) + { + extraArgs += " -user_agent " + requiredHeaders["user_agent"]; + } + return GetMediaInfoInternal( GetInputArgument(request.MediaSource.Path, request.MediaSource), request.MediaSource.Path, diff --git a/tests/Jellyfin.MediaEncoding.Tests/Probing/ProbeExternalSourcesTests.cs b/tests/Jellyfin.MediaEncoding.Tests/Probing/ProbeExternalSourcesTests.cs new file mode 100644 index 0000000000..17f8ec163b --- /dev/null +++ b/tests/Jellyfin.MediaEncoding.Tests/Probing/ProbeExternalSourcesTests.cs @@ -0,0 +1,47 @@ +using System.Collections.Generic; +using System.Threading; +using MediaBrowser.Controller.Configuration; +using MediaBrowser.MediaEncoding.Encoder; +using MediaBrowser.Model.Globalization; +using MediaBrowser.Model.IO; +using MediaBrowser.Model.MediaInfo; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using Moq; +using Xunit; + +namespace Jellyfin.MediaEncoding.Tests.Probing +{ + public class ProbeExternalSourcesTests + { + [Fact] + public void GetMediaInfo_Uses_UserAgent() + { + var encoder = new MediaEncoder( + Mock.Of>(), + Mock.Of(), + Mock.Of(), + Mock.Of(), + Mock.Of(), + new ConfigurationBuilder().Build(), + Mock.Of()); + + var req = new MediaBrowser.Controller.MediaEncoding.MediaInfoRequest() + { + MediaSource = new MediaBrowser.Model.Dto.MediaSourceInfo + { + Path = "/path/to/stream", + Protocol = MediaProtocol.Http, + RequiredHttpHeaders = new Dictionary() + { + { "user_agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/530.35 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/530.35" }, + } + }, + ExtractChapters = false, + MediaType = MediaBrowser.Model.Dlna.DlnaProfileType.Video, + }; + + encoder.GetMediaInfo(req, CancellationToken.None); + } + } +}