Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix audio codec not being used in UniversalAudio #9192

Merged
merged 3 commits into from
Feb 2, 2023
Merged

Fix audio codec not being used in UniversalAudio #9192

merged 3 commits into from
Feb 2, 2023

Conversation

jmshrv
Copy link
Contributor

@jmshrv jmshrv commented Jan 28, 2023

Changes

This PR specifies the audio codec when creating the ffmpeg command line when streaming audio. Currently, Jellyfin doesn't specify this and therefore just falls back on whatever the default codec of the container is. For example, here is an ffmpeg log run from a call to /Audio/{id}/universal?transcodingContainer=ogg&audioCodec=opus. Note how Vorbis is used despite audioCodec being set to opus.

/Audio/0d811359188af113961e7d18b0085ca7/universal

{"Protocol":0,"Id":"0d811359188af113961e7d18b0085ca7","Path":"/media/Music/Casiopea/1982 - 4x4/01 - Mid-Manhattan.flac","EncoderPath":null,"EncoderProtocol":null,"Type":0,"Container":"flac","Size":31252924,"Name":"01 - Mid-Manhattan","IsRemote":false,"ETag":"5e9910bdcaf55a912ce4341f9a1e9d70","RunTimeTicks":2822000128,"ReadAtNativeFramerate":false,"IgnoreDts":false,"IgnoreIndex":false,"GenPtsInput":false,"SupportsTranscoding":true,"SupportsDirectStream":true,"SupportsDirectPlay":true,"IsInfiniteStream":false,"RequiresOpening":false,"OpenToken":null,"RequiresClosing":false,"LiveStreamId":null,"BufferMs":null,"RequiresLooping":false,"SupportsProbing":true,"VideoType":null,"IsoType":null,"Video3DFormat":null,"MediaStreams":[{"Codec":"flac","CodecTag":null,"Language":null,"ColorRange":null,"ColorSpace":null,"ColorTransfer":null,"ColorPrimaries":null,"DvVersionMajor":null,"DvVersionMinor":null,"DvProfile":null,"DvLevel":null,"RpuPresentFlag":null,"ElPresentFlag":null,"BlPresentFlag":null,"DvBlSignalCompatibilityId":null,"Comment":null,"TimeBase":"1/44100","CodecTimeBase":"1/44100","Title":null,"VideoRange":null,"VideoRangeType":null,"VideoDoViTitle":null,"LocalizedUndefined":null,"LocalizedDefault":null,"LocalizedForced":null,"LocalizedExternal":null,"DisplayTitle":"FLAC - Stereo","NalLengthSize":null,"IsInterlaced":false,"IsAVC":null,"ChannelLayout":"stereo","BitRate":885979,"BitDepth":16,"RefFrames":null,"PacketLength":null,"Channels":2,"SampleRate":44100,"IsDefault":false,"IsForced":false,"Height":null,"Width":null,"AverageFrameRate":null,"RealFrameRate":null,"Profile":null,"Type":0,"AspectRatio":null,"Index":0,"Score":null,"IsExternal":false,"DeliveryMethod":null,"DeliveryUrl":null,"IsExternalUrl":null,"IsTextSubtitleStream":false,"SupportsExternalStream":false,"Path":null,"PixelFormat":null,"Level":0,"IsAnamorphic":null}],"MediaAttachments":[],"Formats":[],"Bitrate":885979,"Timestamp":null,"RequiredHttpHeaders":{},"TranscodingUrl":null,"TranscodingSubProtocol":null,"TranscodingContainer":null,"AnalyzeDurationMs":null,"DefaultAudioStreamIndex":null,"DefaultSubtitleStreamIndex":null}

/usr/lib/jellyfin-ffmpeg/ffmpeg -analyzeduration 200M  -i file:"/media/Music/Casiopea/1982 - 4x4/01 - Mid-Manhattan.flac" -threads 0 -vn -ab 128000 -ac 2 -id3v2_version 3 -write_id3v1 1 -y "/config/transcodes/94889ed7de8e686dc7de7eddd19df672.ogg"


ffmpeg version 5.1.1-Jellyfin Copyright (c) 2000-2022 the FFmpeg developers
  built with gcc 10 (Debian 10.2.1-6)
  configuration: --prefix=/usr/lib/jellyfin-ffmpeg --target-os=linux --extra-libs=-lfftw3f --extra-version=Jellyfin --disable-doc --disable-ffplay --disable-ptx-compression --disable-shared --disable-libxcb --disable-sdl2 --disable-xlib --enable-lto --enable-gpl --enable-version3 --enable-static --enable-gmp --enable-gnutls --enable-chromaprint --enable-libdrm --enable-libass --enable-libfreetype --enable-libfribidi --enable-libfontconfig --enable-libbluray --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libdav1d --enable-libwebp --enable-libvpx --enable-libx264 --enable-libx265 --enable-libzvbi --enable-libzimg --enable-libfdk-aac --arch=amd64 --enable-libshaderc --enable-libplacebo --enable-vulkan --enable-opencl --enable-vaapi --enable-amf --enable-libmfx --enable-ffnvcodec --enable-cuda --enable-cuda-llvm --enable-cuvid --enable-nvdec --enable-nvenc
  libavutil      57. 28.100 / 57. 28.100
  libavcodec     59. 37.100 / 59. 37.100
  libavformat    59. 27.100 / 59. 27.100
  libavdevice    59.  7.100 / 59.  7.100
  libavfilter     8. 44.100 /  8. 44.100
  libswscale      6.  7.100 /  6.  7.100
  libswresample   4.  7.100 /  4.  7.100
  libpostproc    56.  6.100 / 56.  6.100
Input #0, flac, from 'file:/media/Music/Casiopea/1982 - 4x4/01 - Mid-Manhattan.flac':
  Metadata:
    ARTIST          : Casiopea
    TITLE           : Mid-Manhattan
    ALBUM           : 4x4
    DATE            : 1982
    track           : 01
    GENRE           : Fusion
    COMMENT         : EAC Flac 1.1.2 -5
  Duration: 00:04:42.20, start: 0.000000, bitrate: 885 kb/s
  Stream #0:0: Audio: flac, 44100 Hz, stereo, s16
Stream mapping:
  Stream #0:0 -> #0:0 (flac (native) -> vorbis (libvorbis))
Press [q] to stop, [?] for help
Output #0, ogg, to '/config/transcodes/94889ed7de8e686dc7de7eddd19df672.ogg':
  Metadata:
    ARTIST          : Casiopea
    TITLE           : Mid-Manhattan
    ALBUM           : 4x4
    DATE            : 1982
    track           : 01
    GENRE           : Fusion
    COMMENT         : EAC Flac 1.1.2 -5
    encoder         : Lavf59.27.100
  Stream #0:0: Audio: vorbis, 44100 Hz, stereo, fltp, 128 kb/s
    Metadata:
      encoder         : Lavc59.37.100 libvorbis
      ARTIST          : Casiopea
      TITLE           : Mid-Manhattan
      ALBUM           : 4x4
      DATE            : 1982
      TRACKNUMBER     : 01
      GENRE           : Fusion
      DESCRIPTION     : EAC Flac 1.1.2 -5
size=       4kB time=00:00:00.01 bitrate=2448.7kbits/s speed= 104x    
size=     183kB time=00:00:14.03 bitrate= 106.7kbits/s speed=27.9x    
size=     256kB time=00:00:28.34 bitrate=  74.0kbits/s speed=28.2x    
size=     512kB time=00:00:42.69 bitrate=  98.2kbits/s speed=28.3x    
size=     768kB time=00:00:56.87 bitrate= 110.6kbits/s speed=28.3x    
size=    1024kB time=00:01:11.22 bitrate= 117.8kbits/s speed=28.4x    
size=    1280kB time=00:01:25.60 bitrate= 122.5kbits/s speed=28.4x    
size=    1536kB time=00:01:40.01 bitrate= 125.8kbits/s speed=28.4x    
size=    1536kB time=00:01:54.18 bitrate= 110.2kbits/s speed=28.4x    
size=    1792kB time=00:02:08.24 bitrate= 114.5kbits/s speed=28.4x    
size=    2048kB time=00:02:22.43 bitrate= 117.8kbits/s speed=28.4x    
size=    2304kB time=00:02:36.78 bitrate= 120.4kbits/s speed=28.4x    
size=    2560kB time=00:02:51.18 bitrate= 122.5kbits/s speed=28.4x    
size=    2816kB time=00:03:05.34 bitrate= 124.5kbits/s speed=28.4x    
size=    3072kB time=00:03:19.71 bitrate= 126.0kbits/s speed=28.4x    
size=    3328kB time=00:03:34.11 bitrate= 127.3kbits/s speed=28.4x    
size=    3328kB time=00:03:47.96 bitrate= 119.6kbits/s speed=28.4x    
size=    3584kB time=00:04:01.92 bitrate= 121.4kbits/s speed=28.3x    
size=    3840kB time=00:04:15.92 bitrate= 122.9kbits/s speed=28.3x    
size=    4096kB time=00:04:30.06 bitrate= 124.2kbits/s speed=28.3x    
size=    4385kB time=00:04:42.19 bitrate= 127.3kbits/s speed=28.5x    
video:0kB audio:4340kB subtitle:0kB other streams:0kB global headers:4kB muxing overhead: 1.028162%

I haven't tested this PR yet since its 4am and I don't want to fight macOS right now, but I'll give it a go tomorrow.

@jmshrv
Copy link
Contributor Author

jmshrv commented Jan 28, 2023

Looks like it works when cherry-picked off v10.8.9

/Audio/5a6621ee6987d854c421a6b62064d84f/universal

{"Protocol":0,"Id":"5a6621ee6987d854c421a6b62064d84f","Path":"/media/My Chemical Romance/2022 - Foundations of Decay/01 - The Foundations of Decay.flac","EncoderPath":null,"EncoderProtocol":null,"Type":0,"Container":"flac","Size":42000284,"Name":"01 - The Foundations of Decay","IsRemote":false,"ETag":"2782cadc97d8e213375fbc35b496fa8c","RunTimeTicks":3607600128,"ReadAtNativeFramerate":false,"IgnoreDts":false,"IgnoreIndex":false,"GenPtsInput":false,"SupportsTranscoding":true,"SupportsDirectStream":true,"SupportsDirectPlay":true,"IsInfiniteStream":false,"RequiresOpening":false,"OpenToken":null,"RequiresClosing":false,"LiveStreamId":null,"BufferMs":null,"RequiresLooping":false,"SupportsProbing":true,"VideoType":null,"IsoType":null,"Video3DFormat":null,"MediaStreams":[{"Codec":"flac","CodecTag":null,"Language":null,"ColorRange":null,"ColorSpace":null,"ColorTransfer":null,"ColorPrimaries":null,"DvVersionMajor":null,"DvVersionMinor":null,"DvProfile":null,"DvLevel":null,"RpuPresentFlag":null,"ElPresentFlag":null,"BlPresentFlag":null,"DvBlSignalCompatibilityId":null,"Comment":null,"TimeBase":"1/44100","CodecTimeBase":null,"Title":null,"VideoRange":null,"VideoRangeType":null,"VideoDoViTitle":null,"LocalizedUndefined":null,"LocalizedDefault":null,"LocalizedForced":null,"LocalizedExternal":null,"DisplayTitle":"FLAC - Stereo","NalLengthSize":null,"IsInterlaced":false,"IsAVC":null,"ChannelLayout":"stereo","BitRate":931373,"BitDepth":16,"RefFrames":null,"PacketLength":null,"Channels":2,"SampleRate":44100,"IsDefault":false,"IsForced":false,"Height":null,"Width":null,"AverageFrameRate":null,"RealFrameRate":null,"Profile":null,"Type":0,"AspectRatio":null,"Index":0,"Score":null,"IsExternal":false,"DeliveryMethod":null,"DeliveryUrl":null,"IsExternalUrl":null,"IsTextSubtitleStream":false,"SupportsExternalStream":false,"Path":null,"PixelFormat":null,"Level":0,"IsAnamorphic":null}],"MediaAttachments":[],"Formats":[],"Bitrate":931373,"Timestamp":null,"RequiredHttpHeaders":{},"TranscodingUrl":null,"TranscodingSubProtocol":null,"TranscodingContainer":null,"AnalyzeDurationMs":null,"DefaultAudioStreamIndex":null,"DefaultSubtitleStreamIndex":null}

/usr/lib/jellyfin-ffmpeg/ffmpeg -analyzeduration 200M  -i file:"/media/My Chemical Romance/2022 - Foundations of Decay/01 - The Foundations of Decay.flac" -threads 0 -vn -ab 128000 -ac 2 -acodec libopus -id3v2_version 3 -write_id3v1 1 -y "/config/transcodes/e9368677bd6046e5ec43db217705e2df.ogg"


ffmpeg version 4.4.1-Jellyfin Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 10 (Debian 10.2.1-6)
  configuration: --prefix=/usr/lib/jellyfin-ffmpeg --target-os=linux --extra-version=Jellyfin --disable-doc --disable-ffplay --disable-shared --disable-libxcb --disable-sdl2 --disable-xlib --enable-lto --enable-gpl --enable-version3 --enable-static --enable-gmp --enable-gnutls --enable-libdrm --enable-libass --enable-libfreetype --enable-libfribidi --enable-libfontconfig --enable-libbluray --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libdav1d --enable-libwebp --enable-libvpx --enable-libx264 --enable-libx265 --enable-libzvbi --enable-libzimg --arch=amd64 --enable-opencl --enable-vaapi --enable-amf --enable-libmfx --enable-vdpau --enable-ffnvcodec --enable-cuda --enable-cuda-llvm --enable-cuvid --enable-nvdec --enable-nvenc
  libavutil      56. 70.100 / 56. 70.100
  libavcodec     58.134.100 / 58.134.100
  libavformat    58. 76.100 / 58. 76.100
  libavdevice    58. 13.100 / 58. 13.100
  libavfilter     7.110.100 /  7.110.100
  libswscale      5.  9.100 /  5.  9.100
  libswresample   3.  9.100 /  3.  9.100
  libpostproc    55.  9.100 / 55.  9.100
Input #0, flac, from 'file:/media/My Chemical Romance/2022 - Foundations of Decay/01 - The Foundations of Decay.flac':
  Metadata:
    GENRE           : Alternative
    track           : 1
    ALBUM           : The Foundations of Decay
    DATE            : 2022
    TITLE           : The Foundations of Decay
    ARTIST          : My Chemical Romance
  Duration: 00:06:00.76, start: 0.000000, bitrate: 931 kb/s
  Stream #0:0: Audio: flac, 44100 Hz, stereo, s16
Stream mapping:
  Stream #0:0 -> #0:0 (flac (native) -> opus (libopus))
Press [q] to stop, [?] for help
Output #0, ogg, to '/config/transcodes/e9368677bd6046e5ec43db217705e2df.ogg':
  Metadata:
    GENRE           : Alternative
    track           : 1
    ALBUM           : The Foundations of Decay
    DATE            : 2022
    TITLE           : The Foundations of Decay
    ARTIST          : My Chemical Romance
    encoder         : Lavf58.76.100
  Stream #0:0: Audio: opus, 48000 Hz, stereo, s16, 128 kb/s
    Metadata:
      encoder         : Lavc58.134.100 libopus
      GENRE           : Alternative
      TRACKNUMBER     : 1
      ALBUM           : The Foundations of Decay
      DATE            : 2022
      TITLE           : The Foundations of Decay
      ARTIST          : My Chemical Romance
size=       0kB time=00:00:00.05 bitrate=  42.9kbits/s speed= 242x    
size=    1024kB time=00:01:18.17 bitrate= 107.3kbits/s speed= 156x    
size=    2304kB time=00:02:35.07 bitrate= 121.7kbits/s speed= 155x    
size=    3584kB time=00:03:56.07 bitrate= 124.4kbits/s speed= 157x    
size=    4608kB time=00:05:14.91 bitrate= 119.9kbits/s speed= 157x    
size=    5576kB time=00:06:00.75 bitrate= 126.6kbits/s speed= 157x    
video:0kB audio:5531kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.815147%

However, you do have to specify the actual ffmpeg encoder (in this case, I had to do audioCodec=libopus). I'm pretty sure this is inconsistent with the rest of Jellyfin, and I saw a function somewhere to get the encoder name, so I'll tie it up to that.

UniversalAudio seems broken on master, but master is supposed to be unstable after all 🙃

[15:34:10] [ERR] [17] Jellyfin.Api.Middleware.ExceptionMiddleware: Error processing request. URL GET /Audio/5a6621ee6987d854c421a6b62064d84f/universal.
System.TypeInitializationException: The type initializer for 'Nikse.SubtitleEdit.Core.Common.Configuration' threw an exception.
 ---> System.UnauthorizedAccessException: Access to the path '/Subtitle Edit' is denied.
 ---> System.IO.IOException: Permission denied
   --- End of inner exception stack trace ---
   at System.IO.FileSystem.CreateParentsAndDirectory(String fullPath, UnixFileMode unixCreateMode)
   at System.IO.FileSystem.CreateDirectory(String fullPath, UnixFileMode unixCreateMode)
   at System.IO.Directory.CreateDirectory(String path)
   at Nikse.SubtitleEdit.Core.Common.Configuration.GetDataDirectory()
   at Nikse.SubtitleEdit.Core.Common.Configuration..cctor()
   --- End of inner exception stack trace ---
   at Nikse.SubtitleEdit.Core.Common.Configuration.get_Settings()
   at Nikse.SubtitleEdit.Core.SubtitleFormats.MPlayer2.get_Extension()
   at MediaBrowser.MediaEncoding.Subtitles.SubtitleEditParser.<>c.<.ctor>b__2_0(SubtitleFormat subtitleFormat)
   at System.Linq.Enumerable.WhereListIterator`1.MoveNext()
   at System.Linq.Lookup`2.Create(IEnumerable`1 source, Func`2 keySelector, IEqualityComparer`1 comparer)
   at System.Linq.GroupedEnumerable`2.GetEnumerator()
   at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
   at MediaBrowser.MediaEncoding.Subtitles.SubtitleEditParser..ctor(ILogger`1 logger)
   at InvokeStub_SubtitleEditParser..ctor(Object, Object, IntPtr*)
   at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite callSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite callSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite callSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite callSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite callSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitDisposeCache(ServiceCallSite transientCallSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve(ServiceCallSite callSite, ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.DynamicServiceProviderEngine.<>c__DisplayClass2_0.<RealizeService>b__0(ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
   at Microsoft.AspNetCore.Mvc.Controllers.ControllerFactoryProvider.<>c__DisplayClass6_0.<CreateControllerFactory>g__CreateController|0(ControllerContext controllerContext)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync()
--- End of stack trace from previous location ---
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeFilterPipelineAsync()
--- End of stack trace from previous location ---
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
   at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
   at Jellyfin.Api.Middleware.ServerStartupMessageMiddleware.Invoke(HttpContext httpContext, IServerApplicationHost serverApplicationHost, ILocalizationManager localizationManager)
   at Jellyfin.Api.Middleware.WebSocketHandlerMiddleware.Invoke(HttpContext httpContext, IWebSocketManager webSocketManager)
   at Jellyfin.Api.Middleware.IpBasedAccessValidationMiddleware.Invoke(HttpContext httpContext, INetworkManager networkManager)
   at Jellyfin.Api.Middleware.LanFilteringMiddleware.Invoke(HttpContext httpContext, INetworkManager networkManager, IServerConfigurationManager serverConfigurationManager)
   at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
   at Jellyfin.Api.Middleware.QueryStringDecodingMiddleware.Invoke(HttpContext httpContext)
   at Swashbuckle.AspNetCore.ReDoc.ReDocMiddleware.Invoke(HttpContext httpContext)
   at Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.Invoke(HttpContext httpContext)
   at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider)
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
   at Jellyfin.Api.Middleware.RobotsRedirectionMiddleware.Invoke(HttpContext httpContext)
   at Jellyfin.Api.Middleware.LegacyEmbyRouteRewriteMiddleware.Invoke(HttpContext httpContext)
   at Jellyfin.Api.Middleware.ResponseTimeMiddleware.Invoke(HttpContext context, IServerConfigurationManager serverConfigurationManager)
   at Jellyfin.Api.Middleware.ExceptionMiddleware.Invoke(HttpContext context)

@Bond-009 Bond-009 merged commit 29c1f54 into jellyfin:master Feb 2, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants