HW Encoding, Docker, Arc380 - User 16333 - 2025-03-13
Hello Everyone,
I'm having trouble with hardware encoding on my ARC 380, i get this error in my log:
Quote:
[06:46:20] [INF] [38] Jellyfin.Api.Helpers.MediaInfoHelper: User policy for pat. EnablePlaybackRemuxing: True EnableVideoPlaybackTranscoding: True EnableAudioPlaybackTranscoding: True │
│ [06:46:20] [INF] [21] MediaBrowser.MediaEncoding.Transcoding.TranscodeManager: Deleting partial stream file(s) /cache/transcodes/aa9a8c254fab01eace6c2bef74bc130d.m3u8 │
│ [06:46:21] [INF] [42] Jellyfin.Api.Controllers.DynamicHlsController: Current HLS implementation doesn't support non-keyframe breaks but one is requested, ignoring that request │
│ [06:46:21] [INF] [42] MediaBrowser.MediaEncoding.Transcoding.TranscodeManager: /usr/lib/jellyfin-ffmpeg/ffmpeg -analyzeduration 200M -probesize 1G -f matroska -init_hw_device vaapi=va:,vendor_id=0x8086,driver=iHD -init_hw_device qsv=qs │
│ [06:46:21] [ERR] [21] MediaBrowser.MediaEncoding.Transcoding.TranscodeManager: FFmpeg exited with code 218 │
│ [06:46:21] [ERR] [21] Jellyfin.Api.Middleware.ExceptionMiddleware: Error processing request. URL GET /videos/31b30acd-2398-fa67-e7ec-9687e900b4ae/hls1/main/-1.mp4. │
│ MediaBrowser.Common.FfmpegException: FFmpeg exited with code 218 │
│ at MediaBrowser.MediaEncoding.Transcoding.TranscodeManager.StartFfMpeg(StreamState state, String outputPath, String commandLineArguments, Guid userId, TranscodingJobType transcodingJobType, CancellationTokenSource cancellationTokenS │
│ at Jellyfin.Api.Controllers.DynamicHlsController.GetDynamicSegment(StreamingRequestDto streamingRequest, Int32 segmentId) │
│ at Jellyfin.Api.Controllers.DynamicHlsController.GetHlsVideoSegment(Guid itemId, String playlistId, Int32 segmentId, String container, Int64 runtimeTicks, Int64 actualSegmentLengthTicks, Nullable1 static, String params, String tag, │
│ at lambda_method1177(Closure, Object) │
│ at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfActionResultExecutor.Execute(ActionContext actionContext, IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments) │
│ at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask 1 actionResultValueTask) │
│ at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) │
│ at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context) │
│ at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) │
│ at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeInnerFilterAsync>g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) │
│ 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>g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) │
│ 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 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 Microsoft.AspNetCore.ResponseCompression.ResponseCompressionMiddleware.InvokeCore(HttpContext context) │
│ at Jellyfin.Api.Middleware.ResponseTimeMiddleware.Invoke(HttpContext context, IServerConfigurationManager serverConfigurationManager) │
│ at Jellyfin.Api.Middleware.ExceptionMiddleware.Invoke(HttpContext context) │
│ [06:46:21] [INF] [38] MediaBrowser.MediaEncoding.Transcoding.TranscodeManager: Deleting partial stream file(s) /cache/transcodes/dc7808c1ba6ffd1b70f1c85dc0107f2f.m3u8 │
│ [06:46:23] [INF] [60] Emby.Server.Implementations.Session.SessionManager: Playback stopped reported by app Jellyfin Web 10.10.1 playing Moviename. Stopped at 0 ms
Setup:
- K8S Cluster with Talos Linux on Proxmox
- Jellyfin in Docker container
- GPU passed from Proxmox to K8S Node to Container
- Jellyfin Transcoding settings are attached as screenshot
- The same vm/container deployment was working with a intel IGpu
- Jellyfin deployed with official helm chart
When i install and run intel_gpu_top in the container i get an output and there is some activity on blitter and video for a short moment when i try to start to play something:
Code: intel-gpu-top: Intel Dg2 (Gen12) @ /dev/dri/card0 - 0/ 0 MHz; 100% RC6; 0 irqs/s
ENGINES BUSY MI_SEMA MI_WAIT
Render/3D 0.00% | | 0% 0%
Blitter 0.00% | | 0% 0%
Video 0.00% | | 0% 0%
VideoEnhance 0.00% | | 0% 0%
[unknown] 0.00% | | 0% 0%
PID NAME Render/3D Blitter Video VideoEnhance [unknown]
VAInfo also shows a device:
Code: root@jellyfin-57cb486b5f-swgzk:/# /usr/lib/jellyfin-ffmpeg/vainfo
Trying display: drm
libva info: VA-API version 1.22.0
libva info: Trying to open /usr/lib/jellyfin-ffmpeg/lib/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.22 (libva 2.22.0)
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 24.4.1 (105a308)
vainfo: Supported profile and entrypoints
VAProfileNone : VAEntrypointVideoProc
VAProfileNone : VAEntrypointStats
VAProfileMPEG2Simple : VAEntrypointVLD
VAProfileMPEG2Main : VAEntrypointVLD
VAProfileH264Main : VAEntrypointVLD
VAProfileH264Main : VAEntrypointEncSliceLP
VAProfileH264High : VAEntrypointVLD
VAProfileH264High : VAEntrypointEncSliceLP
VAProfileVC1Simple : VAEntrypointVLD
VAProfileVC1Main : VAEntrypointVLD
VAProfileVC1Advanced : VAEntrypointVLD
VAProfileJPEGBaseline : VAEntrypointVLD
VAProfileJPEGBaseline : VAEntrypointEncPicture
VAProfileH264ConstrainedBaseline: VAEntrypointVLD
VAProfileH264ConstrainedBaseline: VAEntrypointEncSliceLP
VAProfileHEVCMain : VAEntrypointVLD
VAProfileHEVCMain : VAEntrypointEncSliceLP
VAProfileHEVCMain10 : VAEntrypointVLD
VAProfileHEVCMain10 : VAEntrypointEncSliceLP
VAProfileVP9Profile0 : VAEntrypointVLD
VAProfileVP9Profile1 : VAEntrypointVLD
VAProfileVP9Profile2 : VAEntrypointVLD
VAProfileVP9Profile3 : VAEntrypointVLD
VAProfileHEVCMain12 : VAEntrypointVLD
VAProfileHEVCMain422_10 : VAEntrypointVLD
VAProfileHEVCMain422_10 : VAEntrypointEncSliceLP
VAProfileHEVCMain422_12 : VAEntrypointVLD
VAProfileHEVCMain444 : VAEntrypointVLD
VAProfileHEVCMain444 : VAEntrypointEncSliceLP
VAProfileHEVCMain444_10 : VAEntrypointVLD
VAProfileHEVCMain444_10 : VAEntrypointEncSliceLP
VAProfileHEVCMain444_12 : VAEntrypointVLD
VAProfileHEVCSccMain : VAEntrypointVLD
VAProfileHEVCSccMain : VAEntrypointEncSliceLP
VAProfileHEVCSccMain10 : VAEntrypointVLD
VAProfileHEVCSccMain10 : VAEntrypointEncSliceLP
VAProfileHEVCSccMain444 : VAEntrypointVLD
VAProfileHEVCSccMain444 : VAEntrypointEncSliceLP
VAProfileAV1Profile0 : VAEntrypointVLD
VAProfileAV1Profile0 : VAEntrypointEncSliceLP
VAProfileHEVCSccMain444_10 : VAEntrypointVLD
VAProfileHEVCSccMain444_10 : VAEntrypointEncSliceLP
Dev/dri also shows the device:
Code: root@jellyfin-57cb486b5f-swgzk:/dev/dri# ls -l
total 0
crwxrwxrwx 1 root root 226, 0 Mar 12 16:54 card0
crwxrwxrwx 1 root root 226, 128 Mar 12 16:54 renderD128
Any Ideas?
Best
Pat
RE: HW Encoding, Docker, Arc380 - TheDreadPirate - 2025-03-13
You will need to check box low power encoding boxes. It is required for Intel Arc when encoding to H264 or HEVC. Note that low power encoding requires additional setup in some Linux distros.
https://jellyfin.org/docs/general/administration/hardware-acceleration/intel/#low-power-encoding
Also, use this table to check the codec boxes that Arc supports.
https://en.wikipedia.org/wiki/Intel_Quick_Sync_Video#Hardware_decoding_and_encoding
RE: HW Encoding, Docker, Arc380 - User 16333 - 2025-03-13
Thank you very much. That brought me on the right track 
Talosvm needs the "siderolabs/mei" extension to use intel discrete GPU and low power mode. Thats why it worked with the igpu.
10.1.9.161 runtime ExtensionStatus 0 1 i915 20241210-v1.9.2
10.1.9.161 runtime ExtensionStatus 1 1 intel-ice-firmware 20241210
10.1.9.161 runtime ExtensionStatus 2 1 intel-ucode 20241112
=> This one | 10.1.9.161 runtime ExtensionStatus 3 1 mei v1.9.2
10.1.9.161 runtime ExtensionStatus 4 1 schematic bf2113e1bea48d566f7d1e08eb780f832ccb56bbd7cf2f95769f7a04f9f2b184
10.1.9.161 runtime ExtensionStatus modules.dep 1 modules.dep 6.12.9-talos
After enabling it everything worked
|