Skip to content

[Issue]: Live TV Recordings No Longer Scheduled #11579

Closed
@michaelcresswell

Description

Please describe your bug

Live TV episodes are no longer scheduled for recording. Scheduling a recording for either a single episode or a series results in a loading spinner, an error in the server log, and no recording being created.

This has been seen on an instance migrated from 10.8.13 and a fresh 10.9.0 instance with only the HDHomeRun and XMLTV guide data file setup.

I tried giving the directory mentioned in the error log and its underlying files 777 as well as not mounting a directory so the files would be used directly from the jellyfin image.

This worked in 10.8.13.

Reproduction Steps

With an HDHomeRun setup and XMLTV data imported,

  1. Navigate to the Live TV Guide
  2. Choose an episode and select Record

Jellyfin Version

10.9.0
10.9.1

if other:

No response

Environment

- OS: Arch
- Linux Kernel: 6.8.9-arch1-2
- Virtualization: Docker
- Clients: Web, Expo
- Browser: Firefox
- FFmpeg Version: 6.0.1-Jellyfin
- Playback Method: N/A
- Hardware Acceleration: QuickSync normally, tried with None as well
- GPU Model: Intel UHD Graphics
- Plugins: None / Defaults Only
- Reverse Proxy: Traefik
- Base URL: /jellyfin/ normally, tried None as well
- Networking: Bridge
- Storage: Local

Jellyfin logs

[2024-05-12 19:27:54.997 +00:00] [ERR] [58] Jellyfin.Api.Middleware.ExceptionMiddleware: Error processing request. URL "POST" "/LiveTv/SeriesTimers/20c71047f7bf2178ddb423513b34f653".
System.UnauthorizedAccessException: Access to the path '/config/data/livetv' is denied.
 ---> System.IO.IOException: Permission denied
   --- End of inner exception stack trace ---
   at Interop.ThrowExceptionForIoErrno(ErrorInfo errorInfo, String path, Boolean isDirError)
   at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, UnixFileMode openPermissions, Int64& fileLength, UnixFileMode& filePermissions, Boolean failForSymlink, Boolean& wasSymlink, Func`4 createOpenException)
   at System.IO.File.OpenHandle(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize)
   at System.IO.File.WriteToFile(String path, FileMode mode, String contents, Encoding encoding)
   at Jellyfin.LiveTv.Timers.ItemDataProvider`1.SaveList()
   at Jellyfin.LiveTv.Timers.ItemDataProvider`1.Update(T item)
   at Jellyfin.LiveTv.Timers.TimerManager.Update(TimerInfo item)
   at Jellyfin.LiveTv.DefaultLiveTvService.UpdateTimersForSeriesTimer(SeriesTimerInfo seriesTimer, Boolean updateTimerSettings, Boolean deleteInvalidTimers)
   at Jellyfin.LiveTv.DefaultLiveTvService.UpdateSeriesTimerAsync(SeriesTimerInfo info, CancellationToken cancellationToken)
   at Jellyfin.LiveTv.LiveTvManager.UpdateSeriesTimer(SeriesTimerInfoDto timer, CancellationToken cancellationToken)
   at Jellyfin.Api.Controllers.LiveTvController.UpdateSeriesTimer(String timerId, SeriesTimerInfoDto seriesTimerInfo)
   at lambda_method1835(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)

FFmpeg logs

N/A

Please attach any browser or client logs here

N/A

Please attach any screenshots here

IMG_0513
Spinner seen after attempting to schedule a recording.

IMG_0516
All options that could prevent recording are as permissive as possible.

IMG_0514
One episode claims to be recording and another scheduled. Neither were actually recorded.

Code of Conduct

  • I agree to follow this project's Code of Conduct

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingconfirmedThis issue has been reviewed and confirmed

    Type

    No type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions