Git Product home page Git Product logo

jellyfin-plugin-tvheadend's Introduction

Jellyfin TVHeadend Plugin

Part of the Jellyfin Project

Plugin Banner

GitHub Workflow Status MIT License Current Release

About

This is a plugin allows you to manage TVHeadend from Jellyfin.

Installation

See the official documentation for install instructions.

Build

  1. To build this plugin you will need .Net 8.x.

  2. Build plugin with following command

dotnet publish --configuration Release --output bin
  1. Place the dll-file in the plugins/tvheadend folder (you might need to create the folders) of your JF install

Releasing

To release the plugin we recommend JPRM that will build and package the plugin. For additional context and for how to add the packaged plugin zip to a plugin manifest see the JPRM documentation for more info.

Contributing

We welcome all contributions and pull requests! If you have a larger feature in mind please open an issue so we can discuss the implementation before you start. In general refer to our contributing guidelines for further information.

Licence

This plugins code and packages are distributed under the MIT License. See LICENSE for more information.

jellyfin-plugin-tvheadend's People

Contributors

adgoncal avatar anthonylavado avatar charlese2 avatar citronalco avatar crobibero avatar cvium avatar dependabot[bot] avatar dkanada avatar ggogel avatar grafixeyehero avatar h1dden-da3m0n avatar hawken93 avatar jellyfin-bot avatar jkellerer avatar joern-h avatar joshuaboniface avatar lomion0815 avatar lukepulverenti avatar macrule avatar mksdev avatar oddstr13 avatar shadowghost avatar tolotos-rgu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

jellyfin-plugin-tvheadend's Issues

Ability to use HTTPS for Tvheadend

There is no option to use HTTPS to connect to the Tvheadend server. Instead it assumes http:// scheme, which is passed to ffmpeg which crashes because my server is reverse proxied and expecting HTTPS traffic.

Connection to LiveTV over 5 seconds

When I select a station, it feels like it takes 5 - 8 seconds until the live image appears. Does it buffer TVHeadend and Jellyfin at the same time? Is it possible to shorten the switching and switching times? I'm used to it happening within 1-2 seconds.

Error processing request: The given key 'path' was not present in the dictionary.

Hello. I have configured the TVHeadend plugin, version 6.0.0.0 and Jellyfin 10.6.3 Debian Buster armhf. The Jellyfin user gets signed in to TVHeadend, and I can see the EPG and channels. But when I click on any stream to watch it, I only get the spinning circle forever, and this error appears in the logs:

[2020-08-28 16:11:52.465 +02:00] [INF] GetPostedPlaybackInfo profile: DeviceProfile { Name: null, Id: null, Identification: null, FriendlyName: null, Manufacturer: null, ManufacturerUrl: null, ModelName: null, ModelDescription: null, ModelNumber: null, ModelUrl: null, SerialNumber: null, EnableAlbumArtInDidl: False, EnableSingleAlbumArtLimit: False, EnableSingleSubtitleLimit: False, SupportedMediaTypes: "Audio,Photo,Video", UserId: null, AlbumArtPn: null, MaxAlbumArtWidth: 0, MaxAlbumArtHeight: 0, MaxIconWidth: null, MaxIconHeight: null, MaxStreamingBitrate: 120000000, MaxStaticBitrate: 100000000, MusicStreamingTranscodingBitrate: 192000, MaxStaticMusicBitrate: null, SonyAggregationFlags: null, ProtocolInfo: null, TimelineOffsetSeconds: 0, RequiresPlainVideoItems: False, RequiresPlainFolders: False, EnableMSMediaReceiverRegistrar: False, IgnoreTranscodeByteRangeRequests: False, XmlRootAttributes: [], DirectPlayProfiles: [DirectPlayProfile { Container: "webm", AudioCodec: "vorbis,opus", VideoCodec: "vp8,vp9", Type: Video }, DirectPlayProfile { Container: "mp4,m4v", AudioCodec: "ac3,eac3,mp3,aac,opus,flac,vorbis", VideoCodec: "h264,vp8,vp9", Type: Video }, DirectPlayProfile { Container: "mkv", AudioCodec: "ac3,eac3,mp3,aac,opus,flac,vorbis", VideoCodec: "h264,vp8,vp9", Type: Video }, DirectPlayProfile { Container: "mov", AudioCodec: "ac3,eac3,mp3,aac,opus,flac,vorbis", VideoCodec: "h264", Type: Video }, DirectPlayProfile { Container: "opus", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "mp3", AudioCodec: "mp3", VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "aac", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "m4a,m4b", AudioCodec: "aac", VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "flac", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "webma,webm", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "wav", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "ogg", AudioCodec: null, VideoCodec: null, Type: Audio }], TranscodingProfiles: [TranscodingProfile { Container: "ts", Type: Audio, VideoCodec: null, AudioCodec: "aac", Protocol: "hls", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 1, SegmentLength: 0, BreakOnNonKeyFrames: True }, TranscodingProfile { Container: "aac", Type: Audio, VideoCodec: null, AudioCodec: "aac", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "mp3", Type: Audio, VideoCodec: null, AudioCodec: "mp3", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "opus", Type: Audio, VideoCodec: null, AudioCodec: "opus", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "wav", Type: Audio, VideoCodec: null, AudioCodec: "wav", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "opus", Type: Audio, VideoCodec: null, AudioCodec: "opus", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Static, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "mp3", Type: Audio, VideoCodec: null, AudioCodec: "mp3", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Static, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "aac", Type: Audio, VideoCodec: null, AudioCodec: "aac", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Static, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "wav", Type: Audio, VideoCodec: null, AudioCodec: "wav", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Static, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "mkv", Type: Video, VideoCodec: "h264,vp8,vp9", AudioCodec: "ac3,eac3,mp3,aac,opus,flac,vorbis", Protocol: null, EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: True, Context: Static, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "ts", Type: Video, VideoCodec: "h264", AudioCodec: "mp3,aac", Protocol: "hls", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 1, SegmentLength: 0, BreakOnNonKeyFrames: True }, TranscodingProfile { Container: "webm", Type: Video, VideoCodec: "vpx", AudioCodec: "vorbis", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "mp4", Type: Video, VideoCodec: "h264", AudioCodec: "ac3,eac3,mp3,aac,opus,flac,vorbis", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Static, EnableSubtitlesInManifest: False, MaxAudioChannels: null, MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }], ContainerProfiles: [], CodecProfiles: [CodecProfile { Type: VideoAudio, Conditions: [ProfileCondition { Condition: Equals, Property: IsSecondaryAudio, Value: "false", IsRequired: False }], ApplyConditions: [], Codec: "aac", Container: null }, CodecProfile { Type: VideoAudio, Conditions: [ProfileCondition { Condition: Equals, Property: IsSecondaryAudio, Value: "false", IsRequired: False }], ApplyConditions: [], Codec: null, Container: null }, CodecProfile { Type: Video, Conditions: [ProfileCondition { Condition: NotEquals, Property: IsAnamorphic, Value: "true", IsRequired: False }, ProfileCondition { Condition: EqualsAny, Property: VideoProfile, Value: "high|main|baseline|constrained baseline|high 10", IsRequired: False }, ProfileCondition { Condition: LessThanEqual, Property: VideoLevel, Value: "51", IsRequired: False }, ProfileCondition { Condition: NotEquals, Property: IsInterlaced, Value: "true", IsRequired: False }], ApplyConditions: [], Codec: "h264", Container: null }], ResponseProfiles: [ResponseProfile { Container: "m4v", AudioCodec: null, VideoCodec: null, Type: Video, OrgPn: null, MimeType: "video/mp4", Conditions: [] }], SubtitleProfiles: [SubtitleProfile { Format: "vtt", Method: External, DidlMode: null, Language: null, Container: null }, SubtitleProfile { Format: "ass", Method: External, DidlMode: null, Language: null, Container: null }, SubtitleProfile { Format: "ssa", Method: External, DidlMode: null, Language: null, Container: null }] }
[2020-08-28 16:11:52.540 +02:00] [INF] User policy for "User1". EnablePlaybackRemuxing: True EnableVideoPlaybackTranscoding: True EnableAudioPlaybackTranscoding: True
[2020-08-28 16:11:52.541 +02:00] [INF] Profile: "Unknown Profile", Path: "Unknown path", isEligibleForDirectPlay: True, isEligibleForDirectStream: True
[2020-08-28 16:11:52.541 +02:00] [INF] Profile: "Unknown Profile", No direct play profiles found for Path: "Unknown path"
[2020-08-28 16:11:52.543 +02:00] [INF] Profile: "Unknown Profile", Path: "Unknown path", isEligibleForDirectPlay: True, isEligibleForDirectStream: True
[2020-08-28 16:11:52.544 +02:00] [INF] Profile: "Unknown Profile", No direct play profiles found for Path: "Unknown path"
[2020-08-28 16:11:52.546 +02:00] [INF] Profile: "Unknown Profile", Path: "Unknown path", isEligibleForDirectPlay: True, isEligibleForDirectStream: True
[2020-08-28 16:11:52.546 +02:00] [INF] Profile: "Unknown Profile", No direct play profiles found for Path: "Unknown path"
[2020-08-28 16:11:52.548 +02:00] [INF] Opening channel stream from "TVHclient LiveTvService", external channel Id: "1143628334"
[2020-08-28 16:11:52.581 +02:00] [ERR] Error processing request. URL: "http://192.168.1.88:8096/Items/a25953898a7e156193ae941870455100/PlaybackInfo?UserId=363c4e35b21f4c0cb522d282ddbb18d8&StartTimeTicks=0&IsPlayback=true&AutoOpenLiveStream=true&MaxStreamingBitrate=140000000"
System.Collections.Generic.KeyNotFoundException: The given key 'path' was not present in the dictionary.
   at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
   at TVHeadEnd.LiveTvService.GetChannelStream(String channelId, String mediaSourceId, CancellationToken cancellationToken)
   at Emby.Server.Implementations.LiveTv.LiveTvManager.GetChannelStream(String id, String mediaSourceId, List`1 currentLiveStreams, CancellationToken cancellationToken)
   at Emby.Server.Implementations.LiveTv.LiveTvMediaSourceProvider.OpenMediaSource(String openToken, List`1 currentLiveStreams, CancellationToken cancellationToken)
   at Emby.Server.Implementations.Library.MediaSourceManager.OpenLiveStreamInternal(LiveStreamRequest request, CancellationToken cancellationToken)
   at Emby.Server.Implementations.Library.MediaSourceManager.OpenLiveStream(LiveStreamRequest request, CancellationToken cancellationToken)
   at MediaBrowser.Api.Playback.MediaInfoService.OpenMediaSource(OpenMediaSource request)
   at MediaBrowser.Api.Playback.MediaInfoService.GetPlaybackInfo(GetPostedPlaybackInfo request)
   at MediaBrowser.Api.Playback.MediaInfoService.Post(GetPostedPlaybackInfo request)
   at Emby.Server.Implementations.Services.ServiceExecGeneral.GetTaskResult(Task task)
   at Emby.Server.Implementations.Services.ServiceHandler.ProcessRequestAsync(HttpListenerHost httpHost, IRequest httpReq, HttpResponse httpRes, ILogger logger, CancellationToken cancellationToken)
   at Emby.Server.Implementations.HttpServer.HttpListenerHost.RequestHandler(IHttpRequest httpReq, String urlString, String host, String localPath, CancellationToken cancellationToken)
[2020-08-28 16:11:58.674 +02:00] [INF] WS "::ffff:127.0.0.1" closed
[2020-08-28 16:11:59.721 +02:00] [INF] WS "::ffff:127.0.0.1" request

I think the relevant portion is [ERR] Error processing request. URL: "http://192.168.1.88:8096/Items/a25953898a7e156193ae941870455100/PlaybackInfo?UserId=363c4e35b21f4c0cb522d282ddbb18d8&StartTimeTicks=0&IsPlayback=true&AutoOpenLiveStream=true&MaxStreamingBitrate=140000000" System.Collections.Generic.KeyNotFoundException: The given key 'path' was not present in the dictionary.

I have no clue what the problem might be, but I have tried several times to uninstall and reinstall the plugin, and change different TVH login and streaming options, to no avail.

Support 4K channels

When configuring Tvheadend so that Jellyfin could collect the information of the channels, I observed a 4K channel does not appear in Jellyfin despite having been configured correctly, for example:

Tvheadend channel number:

  1. HIT TV
  2. EMISION 4K Pruebas
  3. Boing

Jellyfin channel number:

  1. HIT TV
  2. Boing

Choose profile for streaming

Hi,

Is there any way to choose what profile is used for streaming, not just the DVR ?

I have an issue unrelated to this plugin (jellyfin/jellyfin#5248) that makes low def channels not work in jellyfin when hardware transcoding is enabled.
Since I need to keep it enabled for the rest of my library, I'm wondering if I could get tvheadend to do the transcoding instead of jellyfin, and just point it to a profile that does not have hardware enabled.

Thanks

Can play live TV, but not see any previous recordings

Jellyfin 10.8.9 from https://hub.docker.com/r/linuxserver/jellyfin
TVheadend 4.3-2111~ga1cb8cffb (2023-03-28T00:31:18+0000)
Plugin 11.0.0.0

Jellyfin and TVheadend on different hosts in same L2 network.

new account created for the plugin to use

If I login to TVHeadend with the user account created for the jellyfin plugin, I can see other recordings
If I connect in Kodi (using the Kodi TVeadedend plugin) using the account created for the jellyfin plugin I can see and play recordings.

Using the jellyfin plugin I get expected content in all "tabs" apart from Recordings, which is empty.

Suggestion: populate the live tv guide from tvheadend

It seems to me that if tvheadend can display electronic program guide data for over the air TV from a connected hdhomerun, then jellyfin should be able to retrieve and intergrate that into its live TV guide via the jellyfin tvheadend plugin.

Plugin not loading channel icons

Hey!!

I just set up the plugin and i can watch the channels and get the epg infor on guide refresh, but i can't seem to make Channel icons to appear, i get this error on logs:

Jellyfin-TEST  | [13:04:09] [ERR] [28] Jellyfin.Api.Middleware.ExceptionMiddleware: Error processing request. URL GET /Items/294916a531c0c9f30908b3422bb16212/Images/Primary.
Jellyfin-TEST  | System.InvalidOperationException: Unable to convert any images to local
Jellyfin-TEST  |    at Emby.Server.Implementations.Library.LibraryManager.ConvertImageToLocal(BaseItem item, ItemImageInfo image, Int32 imageIndex, Boolean removeOnFailure)
Jellyfin-TEST  |    at Jellyfin.Api.Controllers.ImageController.GetImageInternal(Guid itemId, ImageType imageType, Nullable`1 imageIndex, String tag, Nullable`1 format, Nullable`1 maxWidth, Nullable`1 maxHeight, Nullable`1 percentPlayed, Nullable`1 unplayedCount, Nullable`1 width, Nullable`1 height, Nullable`1 quality, Nullable`1 fillWidth, Nullable`1 fillHeight, Nullable`1 blur, String backgroundColor, String foregroundLayer, BaseItem item, ItemImageInfo imageInfo)
Jellyfin-TEST  |    at Jellyfin.Api.Controllers.ImageController.GetItemImage(Guid itemId, ImageType imageType, Nullable`1 maxWidth, Nullable`1 maxHeight, Nullable`1 width, Nullable`1 height, Nullable`1 quality, Nullable`1 fillWidth, Nullable`1 fillHeight, String tag, Nullable`1 format, Nullable`1 percentPlayed, Nullable`1 unplayedCount, Nullable`1 blur, String backgroundColor, String foregroundLayer, Nullable`1 imageIndex)
Jellyfin-TEST  |    at lambda_method953(Closure, Object)
Jellyfin-TEST  |    at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfActionResultExecutor.Execute(ActionContext actionContext, IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
Jellyfin-TEST  |    at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask`1 actionResultValueTask)
Jellyfin-TEST  |    at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
Jellyfin-TEST  |    at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
Jellyfin-TEST  |    at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
Jellyfin-TEST  |    at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeInnerFilterAsync>g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
Jellyfin-TEST  |    at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
Jellyfin-TEST  |    at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)
Jellyfin-TEST  |    at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
Jellyfin-TEST  |    at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
Jellyfin-TEST  |    at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
Jellyfin-TEST  |    at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
Jellyfin-TEST  |    at Jellyfin.Api.Middleware.ServerStartupMessageMiddleware.Invoke(HttpContext httpContext, IServerApplicationHost serverApplicationHost, ILocalizationManager localizationManager)
Jellyfin-TEST  |    at Jellyfin.Api.Middleware.WebSocketHandlerMiddleware.Invoke(HttpContext httpContext, IWebSocketManager webSocketManager)
Jellyfin-TEST  |    at Jellyfin.Api.Middleware.IPBasedAccessValidationMiddleware.Invoke(HttpContext httpContext, INetworkManager networkManager)
Jellyfin-TEST  |    at Jellyfin.Api.Middleware.LanFilteringMiddleware.Invoke(HttpContext httpContext, INetworkManager networkManager, IServerConfigurationManager serverConfigurationManager)
Jellyfin-TEST  |    at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
Jellyfin-TEST  |    at Jellyfin.Api.Middleware.QueryStringDecodingMiddleware.Invoke(HttpContext httpContext)
Jellyfin-TEST  |    at Swashbuckle.AspNetCore.ReDoc.ReDocMiddleware.Invoke(HttpContext httpContext)
Jellyfin-TEST  |    at Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.Invoke(HttpContext httpContext)
Jellyfin-TEST  |    at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider)
Jellyfin-TEST  |    at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
Jellyfin-TEST  |    at Jellyfin.Api.Middleware.RobotsRedirectionMiddleware.Invoke(HttpContext httpContext)
Jellyfin-TEST  |    at Jellyfin.Api.Middleware.LegacyEmbyRouteRewriteMiddleware.Invoke(HttpContext httpContext)
Jellyfin-TEST  |    at Microsoft.AspNetCore.ResponseCompression.ResponseCompressionMiddleware.InvokeCore(HttpContext context)
Jellyfin-TEST  |    at Jellyfin.Api.Middleware.ResponseTimeMiddleware.Invoke(HttpContext context, IServerConfigurationManager serverConfigurationManager)
Jellyfin-TEST  |    at Jellyfin.Api.Middleware.ExceptionMiddleware.Invoke(HttpContext context)

Thanks in advance!

Cannot choose to "Record Series"

If I use the guide and select to Record a show that has multiple episodes I am not offered the option to "Record Series".

If I select the "auto record" option in the tvheadend website then the show appears in the "Series" section of the Jellyfin GUI and I can edit settings.

This feature is available if I use the "NextPVR" plugin.

Would be great if it could be enabled.

DVB-T2 channels not visible in LiveTV through TVHeadend

Hi, I have exactly same problem like user on Emby here:

https://emby.media/community/index.php?/topic/69519-dvb-t2-channels-not-visible-in-livetv-through-tvheadend/

In Jellyfin/LiveTV/Channels are visible only DVB-T channels. The problem is with unkown service tag 'uhdtv'.
Here is my Jellyfin log:

services :
HTSMessage:

name : DVB-T Network/554MHz/Prima LOVE | T2
type : UHDTV
content : 1

,
tags : 1, 6, 11, 3,
method : channelUpdate

[20:54:25] [INF] [TVHclient] ChannelDataHelper: unkown service tag 'uhdtv' - will be ignored.
[20:54:25] [INF] [TVHclient] ChannelDataHelper: unable to detect service-type (tvheadend tag!!!) from service list:
HTSMessage:

channelId : 1386361249
channelNumber : 5
channelName : CT :D/art HD T2
channelIcon : imagecache/84
eventId : 17257
nextEventId : 21066
services :
HTSMessage:

name : DVB-T Network/514MHz/CT :D/art HD T2
type : UHDTV
content : 1

,
tags : 1, 6, 10, 3,
method : channelUpdate

[20:54:25] [INF] [TVHclient] ChannelDataHelper: unkown service tag 'uhdtv' - will be ignored.
[20:54:25] [INF] [TVHclient] ChannelDataHelper: unable to detect service-type (tvheadend tag!!!) from service list:
HTSMessage:

channelId : 1391922109
channelNumber : 36
channelName : ABC TV | T2
channelIcon : imagecache/51
eventId : 35512
nextEventId : 35591
services :
HTSMessage:

name : DVB-T Network/498MHz/ABC TV | T2
type : UHDTV
content : 1

,
tags : 1, 6, 7, 3,
method : channelUpdate

[20:54:25] [INF] [TVHclient] ChannelDataHelper: unkown service tag 'uhdtv' - will be ignored.
[20:54:25] [INF] [TVHclient] ChannelDataHelper: unable to detect service-type (tvheadend tag!!!) from service list:
HTSMessage:

channelId : 1460749273
channelNumber : 7
channelName : CT sport HD T2
channelIcon : imagecache/82
eventId : 37629
nextEventId : 20939
services :
HTSMessage:

name : DVB-T Network/514MHz/CT sport HD T2
type : UHDTV
content : 1

,
tags : 1, 6, 10, 3,
method : channelUpdate

[20:54:25] [INF] [TVHclient] ChannelDataHelper: unkown service tag 'uhdtv' - will be ignored.
[20:54:25] [INF] [TVHclient] ChannelDataHelper: unable to detect service-type (tvheadend tag!!!) from service list:
HTSMessage:

channelId : 1518411011
channelNumber : 31
channelName : V1 | T2
channelIcon : imagecache/64
eventId : 3699
nextEventId : 3713
services :
HTSMessage:

name : DVB-T Network/498MHz/V1 | T2
type : UHDTV
content : 1

,
tags : 1, 6, 7, 3,
method : channelAdd

[20:54:25] [INF] [TVHclient] ChannelDataHelper: unkown service tag 'uhdtv' - will be ignored.
[20:54:25] [INF] [TVHclient] ChannelDataHelper: unable to detect service-type (tvheadend tag!!!) from service list:
HTSMessage:

channelId : 1549724642
channelNumber : 6
channelName : CT 24 HD T2
channelIcon : imagecache/92
eventId : 21985
nextEventId : 22055
services :
HTSMessage:

name : DVB-T Network/514MHz/CT 24 HD T2
type : UHDTV
content : 1

,
tags : 1, 6, 10, 3,
method : channelAdd

[20:54:25] [INF] [TVHclient] ChannelDataHelper: unkown service tag 'uhdtv' - will be ignored.
[20:54:25] [INF] [TVHclient] ChannelDataHelper: unable to detect service-type (tvheadend tag!!!) from service list:
HTSMessage:

channelId : 1608514733
channelNumber : 37
channelName : CS Mystery | T2
channelIcon : imagecache/102
eventId : 0
nextEventId : 0
services :
HTSMessage:

name : DVB-T Network/498MHz/CS Mystery | T2
type : UHDTV
content : 1

,
tags : 1, 6, 7, 3,
method : channelAdd

[20:54:25] [INF] [TVHclient] ChannelDataHelper: unkown service tag 'uhdtv' - will be ignored.
[20:54:25] [INF] [TVHclient] ChannelDataHelper: unable to detect service-type (tvheadend tag!!!) from service list:
HTSMessage:

channelId : 1699347477
channelNumber : 9
channelName : Nova Action | T2
channelIcon : imagecache/59
eventId : 2886
nextEventId : 3030
services :
HTSMessage:

name : DVB-T Network/498MHz/Nova Action | T2
type : UHDTV
content : 1

,
tags : 1, 6, 7, 3,
method : channelAdd

[20:54:25] [INF] [TVHclient] ChannelDataHelper: unkown service tag 'uhdtv' - will be ignored.
[20:54:25] [INF] [TVHclient] ChannelDataHelper: unable to detect service-type (tvheadend tag!!!) from service list:
HTSMessage:

channelId : 1843284748
channelNumber : 26
channelName : TV RELAX | T2
channelIcon : imagecache/55
eventId : 34860
nextEventId : 34886
services :
HTSMessage:

name : DVB-T Network/498MHz/TV RELAX | T2
type : UHDTV
content : 1

,
tags : 1, 6, 7, 3,
method : channelAdd

[20:54:25] [INF] [TVHclient] ChannelDataHelper: unkown service tag 'uhdtv' - will be ignored.
[20:54:25] [INF] [TVHclient] ChannelDataHelper: unable to detect service-type (tvheadend tag!!!) from service list:
HTSMessage:

channelId : 1922952242
channelNumber : 30
channelName : TV ZAK | T2
channelIcon : imagecache/101
eventId : 0
nextEventId : 0
services :
HTSMessage:

name : DVB-T Network/498MHz/TV ZAK | T2
type : UHDTV
content : 1

,
tags : 1, 6, 7, 3,
method : channelAdd

[20:54:25] [INF] [TVHclient] ChannelDataHelper: unkown service tag 'uhdtv' - will be ignored.
[20:54:25] [INF] [TVHclient] ChannelDataHelper: unable to detect service-type (tvheadend tag!!!) from service list:
HTSMessage:

channelId : 1996068409
channelNumber : 12
channelName : Prima COOL | T2
channelIcon : imagecache/80
eventId : 27354
nextEventId : 27355
services :
HTSMessage:

name : DVB-T Network/554MHz/Prima COOL | T2
type : UHDTV
content : 1

,
tags : 1, 6, 11, 3,
method : channelUpdate

[20:54:25] [INF] [TVHclient] ChannelDataHelper: unkown service tag 'uhdtv' - will be ignored.
[20:54:25] [INF] [TVHclient] ChannelDataHelper: unable to detect service-type (tvheadend tag!!!) from service list:
HTSMessage:

channelId : 2086536880
channelNumber : 1
channelName : CT 1 HD T2
channelIcon : imagecache/87
eventId : 21980
nextEventId : 22049
services :
HTSMessage:

name : DVB-T Network/514MHz/CT 1 HD T2
type : UHDTV
content : 1

,
tags : 1, 6, 10, 3,
method : channelAdd

[20:54:25] [INF] [TVHclient] ChannelDataHelper: unkown service tag 'uhdtv' - will be ignored.
[20:54:25] [INF] [TVHclient] ChannelDataHelper: unable to detect service-type (tvheadend tag!!!) from service list:
HTSMessage:

channelId : 2088021766
channelNumber : 4
channelName : Prima | T2
channelIcon : imagecache/81
eventId : 27337
nextEventId : 27419
services :
HTSMessage:

name : DVB-T Network/554MHz/Prima | T2
type : UHDTV
content : 1

,
tags : 1, 6, 11, 3,
method : channelUpdate

[20:54:25] [INF] [TVHclient] ChannelDataHelper: unkown service tag 'uhdtv' - will be ignored.
[20:54:25] [INF] [TVHclient] ChannelDataHelper: unable to detect service-type (tvheadend tag!!!) from service list:
HTSMessage:

channelId : 2121161224
channelNumber : 3
channelName : NOVA | T2
channelIcon : imagecache/78
eventId : 27395
nextEventId : 27396
services :
HTSMessage:

name : DVB-T Network/554MHz/NOVA | T2
type : UHDTV
content : 1

,
tags : 1, 6, 11, 3,
method : channelUpdate

[20:54:25] [INF] [TVHclient] HTSConnectionHandler.GetChannelImage() channelId: 158901335
[20:54:25] [INF] [TVHclient] HTSConnectionHandler.GetChannelImage() channelId: 1254735769
[20:54:25] [INF] Refreshing guide with 7 days of guide data
[20:54:25] [INF] [TVHclient] GetProgramsAsync, ask TVH for events of channel '158901335'.
[20:54:25] [INF] [TVHclient] GetEventsResponseHandler.handleResponse: received answer from TVH server:
HTSMessage:

events :
seq : 33

[20:54:25] [INF] [TVHclient] GetProgramsAsync, ask TVH for events of channel '1254735769'.
[20:54:25] [INF] [TVHclient] GetEventsResponseHandler.handleResponse: received answer from TVH server:
HTSMessage:

events :
seq : 34

[20:54:25] [INF] Refreshing guide with 7 days of guide data
[20:54:25] [INF] Refresh Guide Completed after 0 minute(s) and 3 seconds
[20:54:25] [INF] ExecuteQueuedTasks

Suggestion: Remove "TVHeadEnd Recordings" library

The library item "TVHeadEnd Recordings" is automatically created when the plugin is installed. However all recordings can already be accessed through the "Live TV" menu item under "Recordings".

Since there are now two different ways to get to the same content I suggest the library item be removed.

Any thoughts on this?

No channel logos and picons

I have a working tvheadend server which provides picons and channel logos (works fine over it's webUI and on Kodi) but Jellyfin doesn't show any of them on the webUI - episode images are displayed properly (should movie posters be scraped from an external source and be displayed?). I only tested on current nightly since I don't want to mess up my setup right now by downgrading.
Tell me what logs you need and I'll gladly provide them :)

System.FormatException: Guid should contain 32 digits with 4 dashes

Describe the issue you are experiencing
Stream not starting with error in log
System.FormatException: Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)

Describe the behavior you expected
Stream starts

Steps to reproduce the issue
I was not able to determine this

What version of Jellyfin are you running?
10.6.4 and 10.7.0

What version of Tvheadend are you running?
4.2.8-dmo1

What version of the plugin has the issue?
7.0.0.0

jellyfin.log

[18:24:36] [INF] GetPostedPlaybackInfo profile: {"Name": "Jellyfin MPV Shim", "Id": null, "Identification": null, "FriendlyName": null, "Manufacturer": null, "ManufacturerUrl": null, "ModelName": null, "ModelDescription": null, "ModelNumber": null, "ModelUrl": null, "SerialNumber": null, "EnableAlbumArtInDidl": false, "EnableSingleAlbumArtLimit": false, "EnableSingleSubtitleLimit": false, "SupportedMediaTypes": "Audio,Photo,Video", "UserId": null, "AlbumArtPn": null, "MaxAlbumArtWidth": 0, "MaxAlbumArtHeight": 0, "MaxIconWidth": null, "MaxIconHeight": null, "MaxStreamingBitrate": 10000000, "MaxStaticBitrate": 8000000, "MusicStreamingTranscodingBitrate": 1280000, "MaxStaticMusicBitrate": null, "SonyAggregationFlags": null, "ProtocolInfo": null, "TimelineOffsetSeconds": 5, "RequiresPlainVideoItems": false, "RequiresPlainFolders": false, "EnableMSMediaReceiverRegistrar": false, "IgnoreTranscodeByteRangeRequests": false, "XmlRootAttributes": [], "DirectPlayProfiles": [{"Container": null, "AudioCodec": null, "VideoCodec": null, "Type": "Video", "$type": "DirectPlayProfile"}, {"Container": null, "AudioCodec": null, "VideoCodec": null, "Type": "Audio", "$type": "DirectPlayProfile"}, {"Container": null, "AudioCodec": null, "VideoCodec": null, "Type": "Photo", "$type": "DirectPlayProfile"}], "TranscodingProfiles": [{"Container": null, "Type": "Audio", "VideoCodec": null, "AudioCodec": null, "Protocol": null, "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Streaming", "EnableSubtitlesInManifest": false, "MaxAudioChannels": null, "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "$type": "TranscodingProfile"}, {"Container": "ts", "Type": "Video", "VideoCodec": "h264,h265,hevc,mpeg4,mpeg2video", "AudioCodec": "aac,mp3,ac3,opus,flac,vorbis", "Protocol": "hls", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Streaming", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "6", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "$type": "TranscodingProfile"}, {"Container": "jpeg", "Type": "Photo", "VideoCodec": null, "AudioCodec": null, "Protocol": null, "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Streaming", "EnableSubtitlesInManifest": false, "MaxAudioChannels": null, "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "$type": "TranscodingProfile"}], "ContainerProfiles": [], "CodecProfiles": [], "ResponseProfiles": [], "SubtitleProfiles": [{"Format": "srt", "Method": "External", "DidlMode": null, "Language": null, "Container": null, "$type": "SubtitleProfile"}, {"Format": "srt", "Method": "Embed", "DidlMode": null, "Language": null, "Container": null, "$type": "SubtitleProfile"}, {"Format": "ass", "Method": "External", "DidlMode": null, "Language": null, "Container": null, "$type": "SubtitleProfile"}, {"Format": "ass", "Method": "Embed", "DidlMode": null, "Language": null, "Container": null, "$type": "SubtitleProfile"}, {"Format": "sub", "Method": "Embed", "DidlMode": null, "Language": null, "Container": null, "$type": "SubtitleProfile"}, {"Format": "sub", "Method": "External", "DidlMode": null, "Language": null, "Container": null, "$type": "SubtitleProfile"}, {"Format": "ssa", "Method": "Embed", "DidlMode": null, "Language": null, "Container": null, "$type": "SubtitleProfile"}, {"Format": "ssa", "Method": "External", "DidlMode": null, "Language": null, "Container": null, "$type": "SubtitleProfile"}, {"Format": "smi", "Method": "Embed", "DidlMode": null, "Language": null, "Container": null, "$type": "SubtitleProfile"}, {"Format": "smi", "Method": "External", "DidlMode": null, "Language": null, "Container": null, "$type": "SubtitleProfile"}, {"Format": "pgssub", "Method": "Embed", "DidlMode": null, "Language": null, "Container": null, "$type": "SubtitleProfile"}, {"Format": "dvdsub", "Method": "Embed", "DidlMode": null, "Language": null, "Container": null, "$type": "SubtitleProfile"}, {"Format": "pgs", "Method": "Embed", "DidlMode": null, "Language": null, "Container": null, "$type": "SubtitleProfile"}], "$type": "DeviceProfile"}
[18:24:36] [INF] User policy for marc. EnablePlaybackRemuxing: True EnableVideoPlaybackTranscoding: True EnableAudioPlaybackTranscoding: True
[18:24:36] [INF] Bitrate exceeds DirectPlay limit: media bitrate: 40000000, max bitrate: 8000000
[18:24:36] [INF] Bitrate exceeds DirectStream limit: media bitrate: 40000000, max bitrate: 10000000
[18:24:36] [INF] Profile: Jellyfin MPV Shim, Path: Unknown path, isEligibleForDirectPlay: False, isEligibleForDirectStream: False
[18:24:36] [INF] RemoteClientBitrateLimit: 12000000, RemoteIp: 88.130.75.118, IsInLocalNetwork: False
[18:24:36] [INF] Bitrate exceeds DirectPlay limit: media bitrate: 40000000, max bitrate: 8000000
[18:24:36] [INF] Bitrate exceeds DirectStream limit: media bitrate: 40000000, max bitrate: 10000000
[18:24:36] [INF] Profile: Jellyfin MPV Shim, Path: Unknown path, isEligibleForDirectPlay: False, isEligibleForDirectStream: False
[18:24:36] [INF] RemoteClientBitrateLimit: 12000000, RemoteIp: 88.130.75.118, IsInLocalNetwork: False
[18:24:36] [INF] Bitrate exceeds DirectPlay limit: media bitrate: 40000000, max bitrate: 8000000
[18:24:36] [INF] Bitrate exceeds DirectStream limit: media bitrate: 40000000, max bitrate: 10000000
[18:24:36] [INF] Profile: Jellyfin MPV Shim, Path: Unknown path, isEligibleForDirectPlay: False, isEligibleForDirectStream: False
[18:24:36] [INF] Opening channel stream from TVHclient LiveTvService, external channel Id: 1505957949
[18:24:36] [INF] Live stream opened after 0.0003ms
[18:24:36] [INF] Live tv media info probe took 0.0002106 seconds
[18:24:36] [INF] Live stream opened: {"Protocol":"Http","Id":"21","Path":"http://127.0.0.1:9981/stream/channelid/1505957949?ticket=1BCE93485BC52E3C902E21A03C1B99C1CB72EF56","Type":"Default","Container":"mpegts","IsRemote":false,"ReadAtNativeFramerate":false,"IgnoreDts":false,"IgnoreIndex":false,"GenPtsInput":false,"SupportsTranscoding":true,"SupportsDirectStream":true,"SupportsDirectPlay":true,"IsInfiniteStream":true,"RequiresOpening":false,"RequiresClosing":true,"LiveStreamId":"a17c75760a04e99b68cf766e11316e1c_41c95b6de5174f82acbc56fe82d0a2f8_21","RequiresLooping":false,"SupportsProbing":true,"MediaStreams":[{"Codec":"h264","TimeBase":"1/90000","CodecTimeBase":"1/100","VideoRange":"SDR","DisplayTitle":"720p H264 SDR","NalLengthSize":"0","IsInterlaced":false,"BitRate":8000000,"BitDepth":8,"RefFrames":1,"IsDefault":false,"IsForced":false,"Height":720,"Width":1280,"AverageFrameRate":50,"RealFrameRate":50,"Profile":"High","Type":"Video","AspectRatio":"16:9","Index":-1,"IsExternal":false,"IsTextSubtitleStream":false,"SupportsExternalStream":false,"PixelFormat":"yuv420p","Level":40,"IsAnamorphic":false},{"Codec":"mp2","TimeBase":"1/90000","CodecTimeBase":"1/48000","DisplayTitle":"MP2 - Stereo","IsInterlaced":false,"ChannelLayout":"stereo","BitRate":256000,"Channels":2,"SampleRate":48000,"IsDefault":false,"IsForced":false,"Type":"Audio","Index":-1,"IsExternal":false,"IsTextSubtitleStream":false,"SupportsExternalStream":false,"Level":0}],"MediaAttachments":[],"Formats":[],"Bitrate":8256000,"RequiredHttpHeaders":{},"AnalyzeDurationMs":3000}
[18:24:36] [INF] User policy for marc. EnablePlaybackRemuxing: True EnableVideoPlaybackTranscoding: True EnableAudioPlaybackTranscoding: True
[18:24:36] [INF] Profile: Jellyfin MPV Shim, Path: http://127.0.0.1:9981/stream/channelid/1505957949?ticket=1BCE93485BC52E3C902E21A03C1B99C1CB72EF56, isEligibleForDirectPlay: True, isEligibleForDirectStream: True
[18:24:36] [INF] RemoteClientBitrateLimit: 12000000, RemoteIp: 88.130.75.118, IsInLocalNetwork: False
[18:24:36] [INF] Profile: Jellyfin MPV Shim, Path: http://127.0.0.1:9981/stream/channelid/1505957949?ticket=1BCE93485BC52E3C902E21A03C1B99C1CB72EF56, isEligibleForDirectPlay: True, isEligibleForDirectStream: True
[18:24:36] [INF] RemoteClientBitrateLimit: 12000000, RemoteIp: 88.130.75.118, IsInLocalNetwork: False
[18:24:36] [INF] Profile: Jellyfin MPV Shim, Path: http://127.0.0.1:9981/stream/channelid/1505957949?ticket=1BCE93485BC52E3C902E21A03C1B99C1CB72EF56, isEligibleForDirectPlay: True, isEligibleForDirectStream: True
[18:24:36] [ERR] Error processing request. URL GET /Videos/0172d7a894c21379a884b3345b379945/stream.
System.FormatException: Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).
   at System.Guid.GuidResult.SetFailure(Boolean overflow, String failureMessageID)
   at System.Guid.TryParseExactN(ReadOnlySpan`1 guidString, GuidResult& result)
   at System.Guid.TryParseGuid(ReadOnlySpan`1 guidString, GuidResult& result)
   at System.Guid.Parse(String input)
   at Jellyfin.Api.Helpers.StreamingHelpers.GetStreamingState(StreamingRequestDto streamingRequest, HttpRequest httpRequest, IAuthorizationContext authorizationContext, IMediaSourceManager mediaSourceManager, IUserManager userManager, ILibraryManager libraryManager, IServerConfigurationManager serverConfigurationManager, IMediaEncoder mediaEncoder, IFileSystem fileSystem, ISubtitleEncoder subtitleEncoder, IConfiguration configuration, IDlnaManager dlnaManager, IDeviceManager deviceManager, TranscodingJobHelper transcodingJobHelper, TranscodingJobType transcodingJobType, CancellationToken cancellationToken)
   at Jellyfin.Api.Controllers.VideosController.GetVideoStream(Guid itemId, String container, Nullable`1 static, String params, String tag, String deviceProfileId, String playSessionId, String segmentContainer, Nullable`1 segmentLength, Nullable`1 minSegments, String mediaSourceId, String deviceId, String audioCodec, Nullable`1 enableAutoStreamCopy, Nullable`1 allowVideoStreamCopy, Nullable`1 allowAudioStreamCopy, Nullable`1 breakOnNonKeyFrames, Nullable`1 audioSampleRate, Nullable`1 maxAudioBitDepth, Nullable`1 audioBitRate, Nullable`1 audioChannels, Nullable`1 maxAudioChannels, String profile, String level, Nullable`1 framerate, Nullable`1 maxFramerate, Nullable`1 copyTimestamps, Nullable`1 startTimeTicks, Nullable`1 width, Nullable`1 height, Nullable`1 videoBitRate, Nullable`1 subtitleStreamIndex, SubtitleDeliveryMethod subtitleMethod, Nullable`1 maxRefFrames, Nullable`1 maxVideoBitDepth, Nullable`1 requireAvc, Nullable`1 deInterlace, Nullable`1 requireNonAnamorphic, Nullable`1 transcodingMaxAudioChannels, Nullable`1 cpuCoreLimit, String liveStreamId, Nullable`1 enableMpegtsM2TsMode, String videoCodec, String subtitleCodec, String transcodeReasons, Nullable`1 audioStreamIndex, Nullable`1 videoStreamIndex, EncodingContext context, Dictionary`2 streamOptions)
   at lambda_method996(Closure , Object )
   at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfActionResultExecutor.Execute(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()
--- End of stack trace from previous location ---
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|24_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.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
   at Jellyfin.Server.Middleware.ServerStartupMessageMiddleware.Invoke(HttpContext httpContext, IServerApplicationHost serverApplicationHost, ILocalizationManager localizationManager)
   at Jellyfin.Server.Middleware.WebSocketHandlerMiddleware.Invoke(HttpContext httpContext, IWebSocketManager webSocketManager)
   at Jellyfin.Server.Middleware.IpBasedAccessValidationMiddleware.Invoke(HttpContext httpContext, INetworkManager networkManager, IServerConfigurationManager serverConfigurationManager)
   at Jellyfin.Server.Middleware.LanFilteringMiddleware.Invoke(HttpContext httpContext, INetworkManager networkManager, IServerConfigurationManager serverConfigurationManager)
   at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
   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.Server.Middleware.RobotsRedirectionMiddleware.Invoke(HttpContext httpContext)
   at Jellyfin.Server.Middleware.LegacyEmbyRouteRewriteMiddleware.Invoke(HttpContext httpContext)
   at Microsoft.AspNetCore.ResponseCompression.ResponseCompressionMiddleware.Invoke(HttpContext context)
   at Jellyfin.Server.Middleware.ResponseTimeMiddleware.Invoke(HttpContext context)
   at Jellyfin.Server.Middleware.ExceptionMiddleware.Invoke(HttpContext context)

tvheadend.log

Feb 20 18:26:55 MAKserver08 tvheadend[877]: mpegts: 10743.75H in Astra - tuning on STB0899 Multistandard #0 : DVB-S #0
Feb 20 18:26:55 MAKserver08 tvheadend[877]: subscription: 03E7: "epggrab" subscribing to mux "10743.75H", weight: 4, adapter: "STB0899 Multistandard #0 : DVB-S #0", network: "Astra", service: "Raw PID Subscription"

Guide data missing information.

This is how the xml i'm using in tvheadend looks.

<programme channel="247" start="20231227183000" stop="20231227190000">
	<title lang="en">Friends</title>
	<sub-title lang="en">The One Where Rachel Tells ...</sub-title>
	<desc lang="en">The real father of Rachel&apos;s baby is revealed; Monica and Chandler struggle to make their honeymoon flight.</desc>
	<date>2001</date>
	<rating>
		<value>TV-14</value>
	</rating>
	<category>Sitcom</category>
	<previously-shown />
	<episode-num system="xmltv_ns">7.2.</episode-num>
	<icon src="hidden"></icon>
</programme>

This is how it shows up in tvheadend epg.

Screenshot 2023-12-27 133803

This is how it looks in jellyfin.

Screenshot 2023-12-27 134009

This is how its supposed to look in jellyfin.

Screenshot 2023-12-27 134419

That last example is using the xml directly in jellyfin and using tvheadend url instead off the plugin.
I would like to use the plugin instead because live tv works so much better with the plugin.

A possible fix could be to allow tvheadend to be used as a tuner similar to how emby does it.

Set a limit of connection attempts

When Jellyfin tries to connect to the server Tvheadend and the server Tvheadend is not available, as seen in the log, every two seconds tries to establish a connection for an infinite time, which generates records in the log all the time and it does not end until the connection with the Tvheadend server is established.

It would be a good option to set a limit of connection attempts to avoid creating very large log records with this type of error.

This is an example:

[2019-05-02 13:13:41.667 +02:00] [INF] [TVHclient] HTSConnectionAsync.open: IPEndPoint = '"192.168.1.10:9982"'; AddressFamily = 'InterNetwork'
[2019-05-02 13:13:41.668 +02:00] [ERR] [TVHclient] HTSConnectionAsync.open: caught exception
System.Net.Internals.SocketExceptionFactory+ExtendedSocketException (111): Connection refused 192.168.1.10:9982
   at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
   at System.Net.Sockets.Socket.Connect(EndPoint remoteEP)
   at TVHeadEnd.HTSP.HTSConnectionAsync.open(String hostname, Int32 port)
[2019-05-02 13:13:43.668 +02:00] [INF] [TVHclient] HTSConnectionAsync.open: IPEndPoint = '"192.168.1.10:9982"'; AddressFamily = 'InterNetwork'
[2019-05-02 13:13:43.668 +02:00] [ERR] [TVHclient] HTSConnectionAsync.open: caught exception
System.Net.Internals.SocketExceptionFactory+ExtendedSocketException (111): Connection refused 192.168.1.10:9982
   at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
   at System.Net.Sockets.Socket.Connect(EndPoint remoteEP)
   at TVHeadEnd.HTSP.HTSConnectionAsync.open(String hostname, Int32 port)
[2019-05-02 13:13:45.669 +02:00] [INF] [TVHclient] HTSConnectionAsync.open: IPEndPoint = '"192.168.1.10:9982"'; AddressFamily = 'InterNetwork'
[2019-05-02 13:13:45.669 +02:00] [ERR] [TVHclient] HTSConnectionAsync.open: caught exception
System.Net.Internals.SocketExceptionFactory+ExtendedSocketException (111): Connection refused 192.168.1.10:9982
   at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
   at System.Net.Sockets.Socket.Connect(EndPoint remoteEP)
   at TVHeadEnd.HTSP.HTSConnectionAsync.open(String hostname, Int32 port)
[2019-05-02 13:13:47.670 +02:00] [INF] [TVHclient] HTSConnectionAsync.open: IPEndPoint = '"192.168.1.10:9982"'; AddressFamily = 'InterNetwork'
[2019-05-02 13:13:47.670 +02:00] [ERR] [TVHclient] HTSConnectionAsync.open: caught exception
System.Net.Internals.SocketExceptionFactory+ExtendedSocketException (111): Connection refused 192.168.1.10:9982
   at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
   at System.Net.Sockets.Socket.Connect(EndPoint remoteEP)
   at TVHeadEnd.HTSP.HTSConnectionAsync.open(String hostname, Int32 port)
[2019-05-02 13:13:49.670 +02:00] [INF] [TVHclient] HTSConnectionAsync.open: IPEndPoint = '"192.168.1.10:9982"'; AddressFamily = 'InterNetwork'
[2019-05-02 13:13:49.671 +02:00] [ERR] [TVHclient] HTSConnectionAsync.open: caught exception
System.Net.Internals.SocketExceptionFactory+ExtendedSocketException (111): Connection refused 192.168.1.10:9982
   at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
   at System.Net.Sockets.Socket.Connect(EndPoint remoteEP)
   at TVHeadEnd.HTSP.HTSConnectionAsync.open(String hostname, Int32 port)
[2019-05-02 13:13:51.671 +02:00] [INF] [TVHclient] HTSConnectionAsync.open: IPEndPoint = '"192.168.1.10:9982"'; AddressFamily = 'InterNetwork'
[2019-05-02 13:13:51.671 +02:00] [ERR] [TVHclient] HTSConnectionAsync.open: caught exception
System.Net.Internals.SocketExceptionFactory+ExtendedSocketException (111): Connection refused 192.168.1.10:9982

Recordings are not listed

While creating a recording works (tvheadend creates the file), it does not get listed in Jellyfin's web interface.

(Jellyfin 10.9.6, Plugin 12)

[Bug] Tvheadend timeout not loading jellyfin

If there is a tvheadend timeout, jellyfin is not loading on android TV

How to reproduce:

  • Shut down your tvheadend instance but keep the tvheadend plugin active
  • Open Jellyfin in Firefox: There will be a endless loading circle hovering over the library overview
  • Open Jellyfin in Android TV: Empty page and sometimes even crashes.

MissingMethodException Since Upgrading to Jellyfin 10.8.0

Jellyfin Version: 10.8.0 (Latest)
Plugin Version: 10.0.0 (Latest)
Environment: Docker

The following exception is thrown when attempting to start a stream from TV Headend

[20:48:29] [INF] [27] Jellyfin.Api.Helpers.MediaInfoHelper: StreamBuilder.BuildVideoItem( Profile=Anonymous Profile, Path=Unknown path, AudioStreamIndex=null, SubtitleStreamIndex=null ) => ( PlayMethod=Transcode, TranscodeReason=VideoCodecNotSupported ) media:/videos/b030e4fb-6b00-e59a-4c1c-5b5a7c65d4aa/master.m3u8?MediaSourceId=b030e4fb6b00e59a4c1c5b5a7c65d4aa&VideoCodec=h264&AudioCodec=aac,mp3&VideoBitrate=1527080727&AudioBitrate=192000&MaxWidth=2560&api_key=<token>&TranscodingMaxAudioChannels=2&RequireAvc=false&SegmentContainer=ts&MinSegments=1&BreakOnNonKeyFrames=True&h264-profile=high,main,baseline,constrainedbaseline,high10&h264-level=52&h264-deinterlace=true&TranscodeReasons=VideoCodecNotSupported
[20:48:29] [INF] [27] Emby.Server.Implementations.LiveTv.LiveTvManager: Opening channel stream from TVHclient LiveTvService, external channel Id: 38001602
[20:48:29] [ERR] [27] Jellyfin.Server.Middleware.ExceptionMiddleware: Error processing request. URL POST /Items/b030e4fb6b00e59a4c1c5b5a7c65d4aa/PlaybackInfo.
System.MissingMethodException: Method not found: 'Void MediaBrowser.Model.Dto.MediaSourceInfo.set_MediaStreams(System.Collections.Generic.List`1<MediaBrowser.Model.Entities.MediaStream>)'.
   at TVHeadEnd.LiveTvService.GetChannelStream(String channelId, String mediaSourceId, CancellationToken cancellationToken)
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
   at TVHeadEnd.LiveTvService.GetChannelStream(String channelId, String mediaSourceId, CancellationToken cancellationToken)
   at Emby.Server.Implementations.LiveTv.LiveTvManager.GetChannelStream(String id, String mediaSourceId, List`1 currentLiveStreams, CancellationToken cancellationToken)
   at Emby.Server.Implementations.LiveTv.LiveTvMediaSourceProvider.OpenMediaSource(String openToken, List`1 currentLiveStreams, CancellationToken cancellationToken)
   at Emby.Server.Implementations.Library.MediaSourceManager.OpenLiveStreamInternal(LiveStreamRequest request, CancellationToken cancellationToken)
   at Emby.Server.Implementations.Library.MediaSourceManager.OpenLiveStream(LiveStreamRequest request, CancellationToken cancellationToken)
   at Jellyfin.Api.Helpers.MediaInfoHelper.OpenMediaSource(HttpRequest httpRequest, LiveStreamRequest request)
   at Jellyfin.Api.Controllers.MediaInfoController.GetPostedPlaybackInfo(Guid itemId, Nullable`1 userId, Nullable`1 maxStreamingBitrate, Nullable`1 startTimeTicks, Nullable`1 audioStreamIndex, Nullable`1 subtitleStreamIndex, Nullable`1 maxAudioChannels, String mediaSourceId, String liveStreamId, Nullable`1 autoOpenLiveStream, Nullable`1 enableDirectPlay, Nullable`1 enableDirectStream, Nullable`1 enableTranscoding, Nullable`1 allowVideoStreamCopy, Nullable`1 allowAudioStreamCopy, PlaybackInfoDto playbackInfoDto)
   at lambda_method960(Closure , Object )
   at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.AwaitableObjectResultExecutor.Execute(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()
--- 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.Server.Middleware.ServerStartupMessageMiddleware.Invoke(HttpContext httpContext, IServerApplicationHost serverApplicationHost, ILocalizationManager localizationManager)
   at Jellyfin.Server.Middleware.WebSocketHandlerMiddleware.Invoke(HttpContext httpContext, IWebSocketManager webSocketManager)
   at Jellyfin.Server.Middleware.IpBasedAccessValidationMiddleware.Invoke(HttpContext httpContext, INetworkManager networkManager)
   at Jellyfin.Server.Middleware.LanFilteringMiddleware.Invoke(HttpContext httpContext, INetworkManager networkManager, IServerConfigurationManager serverConfigurationManager)
   at Microsoft.AspNetCore.Authorization.Policy.AuthorizationMiddlewareResultHandler.HandleAsync(RequestDelegate next, HttpContext context, AuthorizationPolicy policy, PolicyAuthorizationResult authorizeResult)
   at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
   at Jellyfin.Server.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.Server.Middleware.RobotsRedirectionMiddleware.Invoke(HttpContext httpContext)
   at Jellyfin.Server.Middleware.LegacyEmbyRouteRewriteMiddleware.Invoke(HttpContext httpContext)
   at Microsoft.AspNetCore.ResponseCompression.ResponseCompressionMiddleware.InvokeCore(HttpContext context)
   at Jellyfin.Server.Middleware.ResponseTimeMiddleware.Invoke(HttpContext context)
   at Jellyfin.Server.Middleware.ExceptionMiddleware.Invoke(HttpContext context)```

The exception is not thrown when loading other content from Jellyfin. Nothing else of interest appears in the logs.

I'm happy to provide whatever additional information I can on this one, so please let me know.

feature request: display the date for recurring recordings

I'm recording a daily show using tvhedhend but every recording has the same name so there is no way to distinguish them in any way in the jellyfin UI.

I've hacked my way out of this by editing this plugin so it adds the date before the title every time jellyfin scrapes the content to feed it's library but it's very ugly what I did so I wouldn't make a PR.

So if someone with more understanding of this integration can find a way to make the date actually readable by jellyfin (I believe it passes the wrong date or the wrong field as many of my first attempts failed) and probably even propose some UI changes for tv recordings in the jellyfin UI it would be great!

To be precise on tvhedhend side I have a regexp that automatically plans and performs recordings when the regexp matches which happens every day ;)

TVHeadend_7.0.0.0 missing in plugin repo

The latest version TVHeadend_7.0.0.0 for Jellyfin 10.7 is missing in the plugin repo. The version 6.0.0.0 didn't even start for me on a fresh 10.7RC2. I've now built it myself and it works. Please add it to the repo.

Can't play any Live TV stream but recordings are playing fine

When opening a TV channel, I always get an error 500 - "Internal Server Error". Logfile always shows the same error: "Object reference not set to an instance of an object". For instance:

[2020-12-30 14:03:04.705 +01:00] [ERR] Error processing request. URL "POST" "/Items/afc050d9852b7308dce063fd3e0c3a16/PlaybackInfo".
System.NullReferenceException: Object reference not set to an instance of an object.
   at MediaBrowser.Model.Dlna.StreamBuilder.GetVideoDirectPlayProfile(VideoOptions options, MediaSourceInfo mediaSource, MediaStream videoStream, MediaStream audioStream, Boolean isEligibleForDirectPlay, Boolean isEligibleForDirectStream)
   at MediaBrowser.Model.Dlna.StreamBuilder.BuildVideoItem(MediaSourceInfo item, VideoOptions options)
   at MediaBrowser.Model.Dlna.StreamBuilder.BuildVideoItem(VideoOptions options)
   at Jellyfin.Api.Helpers.MediaInfoHelper.SetDeviceSpecificData(BaseItem item, MediaSourceInfo mediaSource, DeviceProfile profile, AuthorizationInfo auth, Nullable`1 maxBitrate, Int64 startTimeTicks, String mediaSourceId, Nullable`1 audioStreamIndex, Nullable`1 subtitleStreamIndex, Nullable`1 maxAudioChannels, String playSessionId, Guid userId, Boolean enableDirectPlay, Boolean enableDirectStream, Boolean enableTranscoding, Boolean allowVideoStreamCopy, Boolean allowAudioStreamCopy, String ipAddress)
   at Jellyfin.Api.Controllers.MediaInfoController.GetPostedPlaybackInfo(Guid itemId, Nullable`1 userId, Nullable`1 maxStreamingBitrate, Nullable`1 startTimeTicks, Nullable`1 audioStreamIndex, Nullable`1 subtitleStreamIndex, Nullable`1 maxAudioChannels, String mediaSourceId, String liveStreamId, Nullable`1 autoOpenLiveStream, Nullable`1 enableDirectPlay, Nullable`1 enableDirectStream, Nullable`1 enableTranscoding, Nullable`1 allowVideoStreamCopy, Nullable`1 allowAudioStreamCopy, PlaybackInfoDto playbackInfoDto)
   at lambda_method892(Closure , Object )
   at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.AwaitableObjectResultExecutor.Execute(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()
--- End of stack trace from previous location ---
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|24_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.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
   at Jellyfin.Server.Middleware.ServerStartupMessageMiddleware.Invoke(HttpContext httpContext, IServerApplicationHost serverApplicationHost, ILocalizationManager localizationManager)
   at Jellyfin.Server.Middleware.WebSocketHandlerMiddleware.Invoke(HttpContext httpContext, IWebSocketManager webSocketManager)
   at Jellyfin.Server.Middleware.IpBasedAccessValidationMiddleware.Invoke(HttpContext httpContext, INetworkManager networkManager, IServerConfigurationManager serverConfigurationManager)
   at Jellyfin.Server.Middleware.LanFilteringMiddleware.Invoke(HttpContext httpContext, INetworkManager networkManager, IServerConfigurationManager serverConfigurationManager)
   at Microsoft.AspNetCore.Authorization.Policy.AuthorizationMiddlewareResultHandler.HandleAsync(RequestDelegate next, HttpContext context, AuthorizationPolicy policy, PolicyAuthorizationResult authorizeResult)
   at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
   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.Server.Middleware.RobotsRedirectionMiddleware.Invoke(HttpContext httpContext)
   at Jellyfin.Server.Middleware.LegacyEmbyRouteRewriteMiddleware.Invoke(HttpContext httpContext)
   at Microsoft.AspNetCore.ResponseCompression.ResponseCompressionMiddleware.Invoke(HttpContext context)
   at Jellyfin.Server.Middleware.ResponseTimeMiddleware.Invoke(HttpContext context)
   at Jellyfin.Server.Middleware.ExceptionMiddleware.Invoke(HttpContext context)
[2020-12-30 14:03:18.128 +01:00] [INF] WS "192.168.0.24" closed

This happens with any browser as well as the Android app. Finished recordings play correctly though. It does not make any difference if I use a user/password to connect to TVHeadend or leave it empty (anonymous access has been configured correctly in TVHeadend). Playing Live TV through TVHeadend's web interface works flawlessly.

Using jellyfin-web 20201225.5-unstable and jellyfin-server 20201223.3-unstable on Ubuntu 20.04.1 with TVHeadend Jellyfin plugin 6.0.0.0 and TVHeadend 4.3-1896~gce0907705.

Any thoughts?

Playback error - Recordings

Hi

I have the plugin linked to my tvheadend server - Both through docker.

I have the live TV working (Takes a while to switch) But recordings do not play. I get the following error

image

I have tried the uninstall and reinstall etc mentioned in another ticket without any positive results - issue #24

Here is the log:

`/videos/2abcb83c-bbb3-f21c-c393-406591f3006a/live.m3u8

{"Protocol":1,"Id":"2abcb83cbbb3f21cc393406591f3006a","Path":"http://MYUSERNAME:[email protected]:9981/dvrfile/1117961888","EncoderPath":null,"EncoderProtocol":null,"Type":0,"Container":null,"Size":null,"Name":"Kindergarten Cop","IsRemote":false,"ETag":null,"RunTimeTicks":null,"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":0,"IsoType":null,"Video3DFormat":null,"MediaStreams":[],"MediaAttachments":[],"Formats":[],"Bitrate":null,"Timestamp":null,"RequiredHttpHeaders":{},"TranscodingUrl":null,"TranscodingSubProtocol":null,"TranscodingContainer":null,"AnalyzeDurationMs":null,"DefaultAudioStreamIndex":null,"DefaultSubtitleStreamIndex":null}

/usr/lib/jellyfin-ffmpeg/ffmpeg -analyzeduration 200M -autorotate 0 -i "http://MYUSERNAME:[email protected]:9981/dvrfile/1117961888" -map_metadata -1 -map_chapters -1 -threads 8 -sn -copyts -avoid_negative_ts disabled -max_muxing_queue_size 2048 -f hls -max_delay 5000000 -hls_time 3 -hls_segment_type mpegts -start_number 0 -hls_base_url "hls/8909c0aeac6ac51c35d9d291810693f2/" -hls_segment_filename "/media/Temp/8909c0aeac6ac51c35d9d291810693f2%d.ts" -hls_playlist_type event -hls_list_size 0 -y "/media/Temp/8909c0aeac6ac51c35d9d291810693f2.m3u8"

ffmpeg version 5.1.2-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-libsvtav1 --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
[tcp @ 0x5586ae010dc0] Failed to resolve hostname MYUSERNAME: Name or service not known
http://MYUSERNAME:[email protected]:9981/dvrfile/1117961888: Input/output error`

Cannot stream live TV with TVHeadend plugin, when authentication is active.

Describe the bug
Cannot stream live TV with TVHeadend plugin, when authentication is active.
When I disable authentication in TVHeadend, playing is OK.
When I play recordings, even with authentication, playing is OK.

To Reproduce

  1. Have a jellyfin server connected to TVHeadend with mandatory login/password authentication
  2. Try to play a live TV channel
  3. Does not play

Expected behavior
Live TV channels should play fine, as recordings do.

Logs
When I try to play Live TV, in the log I see the ffmpeg command launched :
/usr/lib/jellyfin-ffmpeg/ffmpeg -analyzeduration 3000000 -i "http://192.168.0.1:9981/stream/channelid/1156837874?ticket=D430E774C45AF2D0A141D1A62C59FB022A1309CF" -map_metadata -1 -map_cha [....]
---> There is no login password in the command line

FYI, here is the ffmpeg command launched when I play a recording :
/usr/lib/jellyfin-ffmpeg/ffmpeg -f mpegts -i "http://login:[email protected]:9981/dvrfile/788633301" -map_metadata -1 -map_chapters -1 -threads 0 -map 0:0 [...]
--> You could notice the login / password field is there this time.

System (please complete the following information):

  • OS: Debian
  • Browser: Firefox
  • Jellyfin Version: [e.g. 10.3.2]
  • Reverse proxy: nginx

Additional context
Many, many thanks for the great work !

NotSupported on Jellyfin 10.9.0

I imagine work needs to be done to get this working with 10.9.0, but of course now that it is released/stable, this plugin no longer works. :(

Wrong category

Should the plugin not be listed under the category "Live-TV"?
image

Having issues with plugin showing up as malfunctioned

I keep on having this issue and its really annoying me now because ive tried all sorts and this is what I keep o getting when installing the tvheadend plugin to my jellyfin server. I am currently running on windows

Screenshot 2021-10-27 at 14 26 07

Plugin broken since update to version 8

After updating to version 8 (or rather Jellyfin automatically updating) the plugin is completely nonfunctional, showing up as "Malfunctioned" in the server dashboard, the log doesn't give much more information (see below).

Jellyfin itself is running on a Debian 10 LXC container and installed from the normal repository, downgrading to version 7 and it works perfectly.

[2021-04-16 12:47:19.466 +00:00] [INF] Jellyfin version: "10.7.1"
[2021-04-16 12:47:19.504 +00:00] [INF] Environment Variables: ["[JELLYFIN_CACHE_DIR, /var/cache/jellyfin]", "[JELLYFIN_CONFIG_DIR, /etc/jellyfin]", "[JELLYFIN_RESTART_OPT, --restartpath=/usr/lib/jellyfin/restart.sh]", "[JELLYFIN_WEB_OPT, --webdir=/usr/share/jellyfin/web]", "[JELLYFIN_FFMPEG_OPT, --ffmpeg=/usr/lib/jellyfin-ffmpeg/ffmpeg]", "[JELLYFIN_USER, jellyfin]", "[JELLYFIN_DATA_DIR, /var/lib/jellyfin]", "[JELLYFIN_ARGS, $JELLYFIN_WEB_OPT $JELLYFIN_RESTART_OPT $JELLYFIN_FFMPEG_OPT $JELLYFIN_SERVICE_OPT $JELLYFIN_NOWEBAPP_OPT]", "[JELLYFIN_LOG_DIR, /var/log/jellyfin]"]
[2021-04-16 12:47:19.509 +00:00] [INF] Arguments: ["/usr/lib/jellyfin/bin/jellyfin.dll", "--webdir=/usr/share/jellyfin/web", "--restartpath=/usr/lib/jellyfin/restart.sh", "--ffmpeg=/usr/lib/jellyfin-ffmpeg/ffmpeg", ""]
[2021-04-16 12:47:19.510 +00:00] [INF] Operating system: "Linux"
[2021-04-16 12:47:19.510 +00:00] [INF] Architecture: X64
[2021-04-16 12:47:19.511 +00:00] [INF] 64-Bit Process: True
[2021-04-16 12:47:19.511 +00:00] [INF] User Interactive: True
[2021-04-16 12:47:19.511 +00:00] [INF] Processor count: 4
[2021-04-16 12:47:19.511 +00:00] [INF] Program data path: "/var/lib/jellyfin"
[2021-04-16 12:47:19.511 +00:00] [INF] Web resources path: "/usr/share/jellyfin/web"
[2021-04-16 12:47:19.511 +00:00] [INF] Application directory: "/usr/lib/jellyfin/bin/"
[2021-04-16 12:47:19.905 +00:00] [INF] Setting cache path: "/var/cache/jellyfin"
[2021-04-16 12:47:19.982 +00:00] [INF] Defined LAN addresses : "[127.0.0.1/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16]"
[2021-04-16 12:47:19.982 +00:00] [INF] Defined LAN exclusions : "[]"
[2021-04-16 12:47:19.983 +00:00] [INF] Using LAN addresses: "[127.0.0.1/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16]"
[2021-04-16 12:47:19.991 +00:00] [INF] Using bind addresses: "[]"
[2021-04-16 12:47:19.991 +00:00] [INF] Using bind exclusions: "[]"
[2021-04-16 12:47:20.064 +00:00] [INF] Loading assemblies
[2021-04-16 12:47:20.081 +00:00] [ERR] Failed to load assembly "/var/lib/jellyfin/plugins/TVHeadend_8.0.0.0/TVHeadEnd.dll". Unknown exception was thrown. Disabling plugin.
System.IO.FileNotFoundException: Could not load file or assembly 'MediaBrowser.Controller, Version=10.7.2.0, Culture=neutral, PublicKeyToken=null'. The system cannot find the file specified.

File name: 'MediaBrowser.Controller, Version=10.7.2.0, Culture=neutral, PublicKeyToken=null'
   at System.Reflection.RuntimeAssembly.GetExportedTypes()
   at Emby.Server.Implementations.Plugins.PluginManager.LoadAssemblies()+MoveNext()
[2021-04-16 12:47:24.541 +00:00] [INF] Loaded plugin: "OMDb" "10.7.1.0"
[2021-04-16 12:47:24.542 +00:00] [INF] Loaded plugin: "MusicBrainz" "10.7.1.0"
[2021-04-16 12:47:24.543 +00:00] [INF] Loaded plugin: "AudioDB" "10.7.1.0"
[2021-04-16 12:47:24.674 +00:00] [INF] Kestrel listening on "Any IP4 Address"
[2021-04-16 12:47:25.384 +00:00] [INF] Running startup tasks
[2021-04-16 12:47:25.510 +00:00] [INF] Daily trigger for "Extract Chapter Images" set to fire at 04/17/2021 02:00, which is 13:12:34.4894027 from now.
[2021-04-16 12:47:25.719 +00:00] [INF] Found ffmpeg version "4.3.1"
[2021-04-16 12:47:25.769 +00:00] [INF] Available "decoders": ["h264", "h264_qsv", "h264_cuvid", "hevc", "hevc_qsv", "hevc_cuvid", "mpeg2video", "mpeg2_qsv", "mpeg2_cuvid", "mpeg4", "mpeg4_cuvid", "msmpeg4", "vc1_qsv", "vc1_cuvid", "vp8_cuvid", "vp8_qsv", "vp9_cuvid", "vp9_qsv", "aac", "ac3", "flac", "mp3"]
[2021-04-16 12:47:25.793 +00:00] [INF] Available "encoders": ["libx264", "h264_amf", "h264_nvenc", "h264_qsv", "h264_v4l2m2m", "h264_vaapi", "libx265", "hevc_amf", "hevc_nvenc", "hevc_qsv", "hevc_vaapi", "mpeg4", "msmpeg4", "libvpx", "libvpx-vp9", "aac", "ac3", "flac", "libmp3lame", "libopus", "libvorbis", "srt"]
[2021-04-16 12:47:25.813 +00:00] [INF] Available hwaccel types: ["vdpau", "cuda", "vaapi", "qsv", "drm", "opencl"]
[2021-04-16 12:47:25.814 +00:00] [INF] FFmpeg: Custom: "/usr/lib/jellyfin-ffmpeg/ffmpeg"

[Live TV] "FFmpeg exited with code 1" due to "Error submitting video frame to the encoder"

When starting a live TV channel I get an error after a few seconds.

In the GUI it says (sorry German):

Wiedergabefehler

Dieser Client ist nicht mit den Medien kompatibel und der Server sendet kein kompatibles Medienformat.

Logs:

[2023-04-29 18:34:09.097 +00:00] [ERR] [56] Jellyfin.Api.Helpers.TranscodingJobHelper: FFmpeg exited with code 1
[2023-04-29 18:34:09.165 +00:00] [ERR] [56] Jellyfin.Server.Middleware.ExceptionMiddleware: Error processing request. URL "GET" "/videos/8a008220-c3e6-926e-8f8f-e8dc78960d80/live.m3u8".
MediaBrowser.Common.FfmpegException: FFmpeg exited with code 1
   at Jellyfin.Api.Helpers.TranscodingJobHelper.StartFfMpeg(StreamState state, String outputPath, String commandLineArguments, HttpRequest request, TranscodingJobType transcodingJobType, CancellationTokenSource cancellationTokenSource, String workingDirectory)
   at Jellyfin.Api.Controllers.DynamicHlsController.GetLiveHlsStream(Guid itemId, String container, Nullable`1 static, String params, String tag, String deviceProfileId, String playSessionId, String segmentContainer, Nullable`1 segmentLength, Nullable`1 minSegments, String mediaSourceId, String deviceId, String audioCodec, Nullable`1 enableAutoStreamCopy, Nullable`1 allowVideoStreamCopy, Nullable`1 allowAudioStreamCopy, Nullable`1 breakOnNonKeyFrames, Nullable`1 audioSampleRate, Nullable`1 maxAudioBitDepth, Nullable`1 audioBitRate, Nullable`1 audioChannels, Nullable`1 maxAudioChannels, String profile, String level, Nullable`1 framerate, Nullable`1 maxFramerate, Nullable`1 copyTimestamps, Nullable`1 startTimeTicks, Nullable`1 width, Nullable`1 height, Nullable`1 videoBitRate, Nullable`1 subtitleStreamIndex, Nullable`1 subtitleMethod, Nullable`1 maxRefFrames, Nullable`1 maxVideoBitDepth, Nullable`1 requireAvc, Nullable`1 deInterlace, Nullable`1 requireNonAnamorphic, Nullable`1 transcodingMaxAudioChannels, Nullable`1 cpuCoreLimit, String liveStreamId, Nullable`1 enableMpegtsM2TsMode, String videoCodec, String subtitleCodec, String transcodeReasons, Nullable`1 audioStreamIndex, Nullable`1 videoStreamIndex, Nullable`1 context, Dictionary`2 streamOptions, Nullable`1 maxWidth, Nullable`1 maxHeight, Nullable`1 enableSubtitlesInManifest)
   at lambda_method1059(Closure , Object )
   at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfActionResultExecutor.Execute(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 Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
   at Prometheus.HttpMetrics.HttpRequestDurationMiddleware.Invoke(HttpContext context)
   at Prometheus.HttpMetrics.HttpRequestCountMiddleware.Invoke(HttpContext context)
   at Prometheus.HttpMetrics.HttpInProgressMiddleware.Invoke(HttpContext context)
   at Jellyfin.Server.Middleware.ServerStartupMessageMiddleware.Invoke(HttpContext httpContext, IServerApplicationHost serverApplicationHost, ILocalizationManager localizationManager)
   at Jellyfin.Server.Middleware.WebSocketHandlerMiddleware.Invoke(HttpContext httpContext, IWebSocketManager webSocketManager)
   at Jellyfin.Server.Middleware.IpBasedAccessValidationMiddleware.Invoke(HttpContext httpContext, INetworkManager networkManager)
   at Jellyfin.Server.Middleware.LanFilteringMiddleware.Invoke(HttpContext httpContext, INetworkManager networkManager, IServerConfigurationManager serverConfigurationManager)
   at Microsoft.AspNetCore.Authorization.Policy.AuthorizationMiddlewareResultHandler.HandleAsync(RequestDelegate next, HttpContext context, AuthorizationPolicy policy, PolicyAuthorizationResult authorizeResult)
   at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
   at Jellyfin.Server.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.Server.Middleware.RobotsRedirectionMiddleware.Invoke(HttpContext httpContext)
   at Jellyfin.Server.Middleware.LegacyEmbyRouteRewriteMiddleware.Invoke(HttpContext httpContext)
   at Microsoft.AspNetCore.ResponseCompression.ResponseCompressionMiddleware.InvokeCore(HttpContext context)
   at Jellyfin.Server.Middleware.ResponseTimeMiddleware.Invoke(HttpContext context, IServerConfigurationManager serverConfigurationManager)
   at Jellyfin.Server.Middleware.ExceptionMiddleware.Invoke(HttpContext context)

Here is the corresponding FFmpeg log.

/videos/8a008220-c3e6-926e-8f8f-e8dc78960d80/live.m3u8

{"Protocol":1,"Id":"860451279","Path":"http://tvheadend:9981/stream/channelid/860451279?ticket=7e07bafc2a46c14c64d275c79b5eb0a0f3dcc621","EncoderPath":null,"EncoderProtocol":null,"Type":0,"Container":null,"Size":null,"Name":null,"IsRemote":false,"ETag":null,"RunTimeTicks":null,"ReadAtNativeFramerate":false,"IgnoreDts":false,"IgnoreIndex":false,"GenPtsInput":false,"SupportsTranscoding":true,"SupportsDirectStream":true,"SupportsDirectPlay":true,"IsInfiniteStream":true,"RequiresOpening":false,"OpenToken":null,"RequiresClosing":false,"LiveStreamId":null,"BufferMs":1500,"RequiresLooping":false,"SupportsProbing":true,"VideoType":null,"IsoType":null,"Video3DFormat":null,"MediaStreams":[{"Codec":null,"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":null,"CodecTimeBase":null,"Title":null,"VideoRange":"SDR","VideoRangeType":"SDR","VideoDoViTitle":null,"LocalizedUndefined":null,"LocalizedDefault":null,"LocalizedForced":null,"LocalizedExternal":null,"DisplayTitle":"SDR","NalLengthSize":"0","IsInterlaced":true,"IsAVC":null,"ChannelLayout":null,"BitRate":null,"BitDepth":null,"RefFrames":null,"PacketLength":null,"Channels":null,"SampleRate":null,"IsDefault":false,"IsForced":false,"Height":null,"Width":null,"AverageFrameRate":null,"RealFrameRate":null,"Profile":null,"Type":1,"AspectRatio":null,"Index":-1,"Score":null,"IsExternal":false,"DeliveryMethod":null,"DeliveryUrl":null,"IsExternalUrl":null,"IsTextSubtitleStream":false,"SupportsExternalStream":false,"Path":null,"PixelFormat":null,"Level":null,"IsAnamorphic":null},{"Codec":null,"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":null,"CodecTimeBase":null,"Title":null,"VideoRange":null,"VideoRangeType":null,"VideoDoViTitle":null,"LocalizedUndefined":null,"LocalizedDefault":null,"LocalizedForced":null,"LocalizedExternal":null,"DisplayTitle":"","NalLengthSize":null,"IsInterlaced":false,"IsAVC":null,"ChannelLayout":null,"BitRate":null,"BitDepth":null,"RefFrames":null,"PacketLength":null,"Channels":null,"SampleRate":null,"IsDefault":false,"IsForced":false,"Height":null,"Width":null,"AverageFrameRate":null,"RealFrameRate":null,"Profile":null,"Type":0,"AspectRatio":null,"Index":-1,"Score":null,"IsExternal":false,"DeliveryMethod":null,"DeliveryUrl":null,"IsExternalUrl":null,"IsTextSubtitleStream":false,"SupportsExternalStream":false,"Path":null,"PixelFormat":null,"Level":null,"IsAnamorphic":null}],"MediaAttachments":[],"Formats":[],"Bitrate":null,"Timestamp":null,"RequiredHttpHeaders":{},"TranscodingUrl":null,"TranscodingSubProtocol":null,"TranscodingContainer":null,"AnalyzeDurationMs":null,"DefaultAudioStreamIndex":null,"DefaultSubtitleStreamIndex":null}

/usr/lib/jellyfin-ffmpeg/ffmpeg -analyzeduration 200M -init_hw_device vaapi=va:,driver=iHD -filter_hw_device va -autorotate 0 -i "http://tvheadend:9981/stream/channelid/860451279?ticket=7e07bafc2a46c14c64d275c79b5eb0a0f3dcc621" -map_metadata -1 -map_chapters -1 -threads 0 -sn -codec:v:0 h264_vaapi -rc_mode VBR -b:v 493733647 -maxrate 493733647 -bufsize 987467294 -force_key_frames:0 "expr:gte(t,n_forced*3)" -vf "setparams=color_primaries=bt709:color_trc=bt709:colorspace=bt709,yadif=0:-1:0,format=nv12,hwupload_vaapi" -flags -global_header -codec:a:0 libfdk_aac -ac 2 -ab 384000 -copyts -avoid_negative_ts disabled -max_muxing_queue_size 2048 -f hls -max_delay 5000000 -hls_time 3 -hls_segment_type mpegts -start_number 0 -hls_base_url "hls/9b1ef6775b08ec8d65092a2c642b6bb9/" -hls_segment_filename "/config/transcodes/9b1ef6775b08ec8d65092a2c642b6bb9%d.ts" -hls_playlist_type event -hls_list_size 0 -y "/config/transcodes/9b1ef6775b08ec8d65092a2c642b6bb9.m3u8"


ffmpeg version 5.1.3-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-static --disable-libxcb --disable-sdl2 --disable-xlib --enable-lto --enable-gpl --enable-version3 --enable-shared --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-libopenmpt --enable-libdav1d --enable-libwebp --enable-libvpx --enable-libx264 --enable-libx265 --enable-libzvbi --enable-libzimg --enable-libfdk-aac --arch=amd64 --enable-libsvtav1 --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
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x55f169551a80] decode_slice_header error
[h264 @ 0x55f169551a80] no frame!
[h264 @ 0x55f169551a80] mmco: unref short failure
[h264 @ 0x55f169551a80] number of reference frames (0+5) exceeds max (4; probably corrupt input), discarding one
[h264 @ 0x55f169551a80] Increasing reorder buffer to 2
[h264 @ 0x55f169551a80] Increasing reorder buffer to 3
Input #0, mpegts, from 'http://tvheadend:9981/stream/channelid/860451279?ticket=7e07bafc2a46c14c64d275c79b5eb0a0f3dcc621':
  Duration: N/A, start: 80263.595311, bitrate: N/A
  Program 1 
    Metadata:
      service_name    : Das Erste HD
      service_provider: ARD
  Stream #0:0[0x13ed]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(tv, bt709, progressive), 1280x720 [SAR 1:1 DAR 16:9], 50 fps, 50 tbr, 90k tbn
  Stream #0:1[0x13ee](deu): Audio: ac3 ([6][0][0][0] / 0x0006), 48000 Hz, 5.1(side), fltp, 448 kb/s
  Stream #0:2[0x13ef](deu): Audio: ac3 ([6][0][0][0] / 0x0006), 48000 Hz, stereo, fltp, 192 kb/s (visual impaired) (descriptions)
  Stream #0:3[0x13f0](deu): Subtitle: dvb_teletext ([6][0][0][0] / 0x0006), 492x250
  Stream #0:4[0x13f1](deu): Subtitle: dvb_subtitle ([6][0][0][0] / 0x0006) (hearing impaired)
  Stream #0:5[0x13f3](deu): Audio: ac3 ([6][0][0][0] / 0x0006), 48000 Hz, stereo, fltp, 192 kb/s (hearing impaired)
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> h264 (h264_vaapi))
  Stream #0:1 -> #0:1 (ac3 (native) -> aac (libfdk_aac))
Press [q] to stop, [?] for help
[h264 @ 0x55f169546000] co located POCs unavailable
[h264 @ 0x55f169637800] co located POCs unavailable
[h264 @ 0x55f169bb6780] mmco: unref short failure
Output #0, hls, to '/config/transcodes/9b1ef6775b08ec8d65092a2c642b6bb9.m3u8':
  Metadata:
    encoder         : Lavf59.27.100
  Stream #0:0: Video: h264 (High), vaapi(tv, bt709, progressive), 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 493733 kb/s, 50 fps, 90k tbn
    Metadata:
      encoder         : Lavc59.37.100 h264_vaapi
  Stream #0:1: Audio: aac, 48000 Hz, stereo, s16, 384 kb/s
    Metadata:
      encoder         : Lavc59.37.100 libfdk_aac
frame=    1 fps=0.0 q=0.0 size=N/A time=00:00:00.00 bitrate=N/A speed=   0x    
[h264_vaapi @ 0x55f169547bc0] Failed to end picture encode issue: 24 (internal encoding error).
[h264_vaapi @ 0x55f169547bc0] Encode failed: -5.
Error submitting video frame to the encoder
[libfdk_aac @ 0x55f169570240] 2 frames left in the queue on closing
Conversion failed!

However, TVheadend is working in Kodi for instance.

Already tried reconfiguring everything like #24.

LiveTV playback does not work

With Jellyfin 10.9.6 amd Plugin 12, LiveTV does not work. The web GUI just keeps showing the spinner.
It did work with Jellyfin 10.8 and Plugin 11

tvheadend log:

Jun 15 00:41:16 router tvheadend[235888]: htsp: Got connection from 127.0.0.1
Jun 15 00:41:16 router tvheadend[235888]: htsp: 127.0.0.1: Identified as user 'jellyfin' (unverified)
Jun 15 00:41:16 router tvheadend[235888]: htsp: 127.0.0.1 [ jellyfin ]: Welcomed client software: TVHclient4Emby-10.9.6.0 (HTSPv20)
Jun 15 00:41:16 router tvheadend[235888]: htsp: 127.0.0.1 [ jellyfin | TVHclient4Emby-10.9.6.0 ]: Identified as user 'jellyfin'
Jun 15 00:41:20 router tvheadend[235888]: mpegts: 450MHz in DVB-C Network - tuning on Philips TDA10023 DVB-C #0 : DVB-C #0
Jun 15 00:41:20 router tvheadend[235888]: subscription: 0001: "epggrab" unsubscribing
Jun 15 00:41:20 router tvheadend[235888]: subscription: 0003: "HTTP" subscribing on channel "ZDF HD", weight: 100, adapter: "Philips TDA10023 DVB-C #0 : DVB-C #0", network: "DVB-C Network", mux: "450MHz", provider: "ZDFvision", service: "ZDF HD", profile="pass", hostname="127.0.0.1", client="Lavf/60.3.100"

Jellyfin's log:

[2024-06-15 00:41:19.036 +02:00] [INF] Current HLS implementation doesn't support non-keyframe breaks but one is requested, ignoring that request
[2024-06-15 00:41:20.537 +02:00] [INF] "/usr/lib/jellyfin-ffmpeg/ffmpeg" "-analyzeduration 3000000 -probesize 1G -init_hw_device vaapi=va:,kernel_driver=i915,driver=iHD -init_hw_device qsv=qs@va -filter_hw_device qs -noautorotate -i \"http://i-removed-the-user-here:[email protected]:9981/stream/channelid/1872186106\" -map_metadata -1 -map_chapters -1 -threads 0 -sn -codec:v:0 h264_qsv -preset veryfast -look_ahead 0 -b:v 670704640 -maxrate 670704640 -bufsize 1341409280 -vf \"setparams=color_primaries=bt709:color_trc=bt709:colorspace=bt709,yadif=0:-1:0,scale=trunc(min(max(iw\,ih*a)\,1920)/2)*2:trunc(ow/a/2)*2,format=nv12\" -flags -global_header -codec:a:0 libfdk_aac -ab 384000 -copyts -avoid_negative_ts disabled -max_muxing_queue_size 2048 -f hls -max_delay 5000000 -hls_time 3 -hls_segment_type mpegts -start_number 0 -hls_base_url \"hls/3d2a96e7f2d5a5382111646208baf2b4/\" -hls_segment_filename \"/var/lib/jellyfin/transcodes/3d2a96e7f2d5a5382111646208baf2b4%d.ts\" -hls_playlist_type event -hls_list_size 0 -y \"/var/lib/jellyfin/transcodes/3d2a96e7f2d5a5382111646208baf2b4.m3u8\""

Excerpt of jellyfin's transcoding log:

[hls @ 0x55e5f3d65740] Opening '/var/lib/jellyfin/transcodes/3d2a96e7f2d5a5382111646208baf2b434.ts' for writing
[hls @ 0x55e5f3d65740] Opening '/var/lib/jellyfin/transcodes/3d2a96e7f2d5a5382111646208baf2b4.m3u8.tmp' for writing
frame= 8762 fps= 51 q=44.0 size=N/A time=00:02:55.74 bitrate=N/A dup=2 drop=0 speed=1.01x    
frame= 8795 fps= 51 q=50.0 size=N/A time=00:02:56.25 bitrate=N/A dup=2 drop=0 speed=1.01x    
frame= 8819 fps= 51 q=50.0 size=N/A time=00:02:56.83 bitrate=N/A dup=2 drop=0 speed=1.01x    
frame= 8845 fps= 51 q=41.0 size=N/A time=00:02:57.40 bitrate=N/A dup=2 drop=0 speed=1.02x    
frame= 8866 fps= 51 q=43.0 size=N/A time=00:02:57.89 bitrate=N/A dup=2 drop=0 speed=1.01x    
frame= 8896 fps= 51 q=46.0 size=N/A time=00:02:58.36 bitrate=N/A dup=2 drop=0 speed=1.01x    
frame= 8919 fps= 51 q=50.0 size=N/A time=00:02:58.94 bitrate=N/A dup=2 drop=0 speed=1.02x    
frame= 8947 fps= 51 q=51.0 size=N/A time=00:02:59.32 bitrate=N/A dup=2 drop=0 speed=1.01x    
frame= 8972 fps= 51 q=42.0 size=N/A time=00:02:59.90 bitrate=N/A dup=2 drop=0 speed=1.01x    
frame= 9003 fps= 51 q=42.0 size=N/A time=00:03:00.48 bitrate=N/A dup=2 drop=0 speed=1.01x    
[hls @ 0x55e5f3d65740] Opening '/var/lib/jellyfin/transcodes/3d2a96e7f2d5a5382111646208baf2b435.ts' for writing
[hls @ 0x55e5f3d65740] Opening '/var/lib/jellyfin/transcodes/3d2a96e7f2d5a5382111646208baf2b4.m3u8.tmp' for writing
frame= 9027 fps= 51 q=38.0 size=N/A time=00:03:01.05 bitrate=N/A dup=2 drop=0 speed=1.01x    
frame= 9051 fps= 51 q=46.0 size=N/A time=00:03:01.63 bitrate=N/A dup=2 drop=0 speed=1.01x    
frame= 9084 fps= 51 q=40.0 size=N/A time=00:03:02.01 bitrate=N/A dup=2 drop=0 speed=1.01x    
frame= 9106 fps= 51 q=26.0 size=N/A time=00:03:02.59 bitrate=N/A dup=2 drop=0 speed=1.01x    
frame= 9139 fps= 51 q=26.0 size=N/A time=00:03:03.16 bitrate=N/A dup=2 drop=0 speed=1.01x    
frame= 9162 fps= 51 q=50.0 size=N/A time=00:03:03.61 bitrate=N/A dup=2 drop=0 speed=1.01x    
frame= 9194 fps= 51 q=50.0 size=N/A time=00:03:04.19 bitrate=N/A dup=2 drop=0 speed=1.01x    
frame= 9219 fps= 51 q=32.0 size=N/A time=00:03:04.70 bitrate=N/A dup=2 drop=0 speed=1.01x    
frame= 9243 fps= 51 q=29.0 size=N/A time=00:03:05.32 bitrate=N/A dup=2 drop=0 speed=1.01x    

So technically it seems to work - at least to a certain extent. But it does not display anything, except for the spinner.

no live tv in jellyfin

after configuring the plugin i have new menu items of live-tv, tv-guide and tvheadend-recordings, but only the tvheadend-recordings show any content (the recordings of tv-headend). I can playback these recordings without problems.
However there are no channels, programms, guide, etc. all empty.

jellyfin-version: 10.4.1
tvheadend-version: 4.3-1804
tvheadend-plugin: 3.0.0.0

any idea?

Stream not starting if "No free adapter" / no UI error message

Describe the issue you are experiencing
No error is shown if Live TV stream can not start due to no free adapters.

Describe the behavior you expected
Error message is shown describing the problem (no free adapters in this case)

Steps to reproduce the issue

  1. use up all your tvheadend adapters
  2. start Live TV stream via Jellyfin

What version of Jellyfin are you running?
10.6.4 and 10.7.0

What version of Tvheadend are you running?
4.2.8-dmo1

What version of the plugin has the issue?
7.0.0.0

jellyfin.log

[17:54:21] [INF] GetPostedPlaybackInfo profile: {"Name": "Jellyfin MPV Shim", "Id": null, "Identification": null, "FriendlyName": null, "Manufacturer": null, "ManufacturerUrl": null, "ModelName": null, "ModelDescription": null, "ModelNumber": null, "ModelUrl": null, "SerialNumber": null, "EnableAlbumArtInDidl": false, "EnableSingleAlbumArtLimit": false, "EnableSingleSubtitleLimit": false, "SupportedMediaTypes": "Audio,Photo,Video", "UserId": null, "AlbumArtPn": null, "MaxAlbumArtWidth": 0, "MaxAlbumArtHeight": 0, "MaxIconWidth": null, "MaxIconHeight": null, "MaxStreamingBitrate": 10000000, "MaxStaticBitrate": 8000000, "MusicStreamingTranscodingBitrate": 1280000, "MaxStaticMusicBitrate": null, "SonyAggregationFlags": null, "ProtocolInfo": null, "TimelineOffsetSeconds": 5, "RequiresPlainVideoItems": false, "RequiresPlainFolders": false, "EnableMSMediaReceiverRegistrar": false, "IgnoreTranscodeByteRangeRequests": false, "XmlRootAttributes": [], "DirectPlayProfiles": [{"Container": null, "AudioCodec": null, "VideoCodec": null, "Type": "Video", "$type": "DirectPlayProfile"}, {"Container": null, "AudioCodec": null, "VideoCodec": null, "Type": "Audio", "$type": "DirectPlayProfile"}, {"Container": null, "AudioCodec": null, "VideoCodec": null, "Type": "Photo", "$type": "DirectPlayProfile"}], "TranscodingProfiles": [{"Container": null, "Type": "Audio", "VideoCodec": null, "AudioCodec": null, "Protocol": null, "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Streaming", "EnableSubtitlesInManifest": false, "MaxAudioChannels": null, "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "$type": "TranscodingProfile"}, {"Container": "ts", "Type": "Video", "VideoCodec": "h264,h265,hevc,mpeg4,mpeg2video", "AudioCodec": "aac,mp3,ac3,opus,flac,vorbis", "Protocol": "hls", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Streaming", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "6", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "$type": "TranscodingProfile"}, {"Container": "jpeg", "Type": "Photo", "VideoCodec": null, "AudioCodec": null, "Protocol": null, "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Streaming", "EnableSubtitlesInManifest": false, "MaxAudioChannels": null, "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "$type": "TranscodingProfile"}], "ContainerProfiles": [], "CodecProfiles": [], "ResponseProfiles": [], "SubtitleProfiles": [{"Format": "srt", "Method": "External", "DidlMode": null, "Language": null, "Container": null, "$type": "SubtitleProfile"}, {"Format": "srt", "Method": "Embed", "DidlMode": null, "Language": null, "Container": null, "$type": "SubtitleProfile"}, {"Format": "ass", "Method": "External", "DidlMode": null, "Language": null, "Container": null, "$type": "SubtitleProfile"}, {"Format": "ass", "Method": "Embed", "DidlMode": null, "Language": null, "Container": null, "$type": "SubtitleProfile"}, {"Format": "sub", "Method": "Embed", "DidlMode": null, "Language": null, "Container": null, "$type": "SubtitleProfile"}, {"Format": "sub", "Method": "External", "DidlMode": null, "Language": null, "Container": null, "$type": "SubtitleProfile"}, {"Format": "ssa", "Method": "Embed", "DidlMode": null, "Language": null, "Container": null, "$type": "SubtitleProfile"}, {"Format": "ssa", "Method": "External", "DidlMode": null, "Language": null, "Container": null, "$type": "SubtitleProfile"}, {"Format": "smi", "Method": "Embed", "DidlMode": null, "Language": null, "Container": null, "$type": "SubtitleProfile"}, {"Format": "smi", "Method": "External", "DidlMode": null, "Language": null, "Container": null, "$type": "SubtitleProfile"}, {"Format": "pgssub", "Method": "Embed", "DidlMode": null, "Language": null, "Container": null, "$type": "SubtitleProfile"}, {"Format": "dvdsub", "Method": "Embed", "DidlMode": null, "Language": null, "Container": null, "$type": "SubtitleProfile"}, {"Format": "pgs", "Method": "Embed", "DidlMode": null, "Language": null, "Container": null, "$type": "SubtitleProfile"}], "$type": "DeviceProfile"}
[17:54:21] [INF] User policy for marc. EnablePlaybackRemuxing: True EnableVideoPlaybackTranscoding: True EnableAudioPlaybackTranscoding: True
[17:54:21] [INF] Bitrate exceeds DirectPlay limit: media bitrate: 40000000, max bitrate: 8000000
[17:54:21] [INF] Bitrate exceeds DirectStream limit: media bitrate: 40000000, max bitrate: 10000000
[17:54:21] [INF] Profile: Jellyfin MPV Shim, Path: Unknown path, isEligibleForDirectPlay: False, isEligibleForDirectStream: False
[17:54:21] [INF] RemoteClientBitrateLimit: 12000000, RemoteIp: 88.130.75.118, IsInLocalNetwork: False
[17:54:21] [INF] Bitrate exceeds DirectPlay limit: media bitrate: 40000000, max bitrate: 8000000
[17:54:21] [INF] Bitrate exceeds DirectStream limit: media bitrate: 40000000, max bitrate: 10000000
[17:54:21] [INF] Profile: Jellyfin MPV Shim, Path: Unknown path, isEligibleForDirectPlay: False, isEligibleForDirectStream: False
[17:54:21] [INF] RemoteClientBitrateLimit: 12000000, RemoteIp: 88.130.75.118, IsInLocalNetwork: False
[17:54:21] [INF] Bitrate exceeds DirectPlay limit: media bitrate: 40000000, max bitrate: 8000000
[17:54:21] [INF] Bitrate exceeds DirectStream limit: media bitrate: 40000000, max bitrate: 10000000
[17:54:21] [INF] Profile: Jellyfin MPV Shim, Path: Unknown path, isEligibleForDirectPlay: False, isEligibleForDirectStream: False
[17:54:21] [INF] Opening channel stream from TVHclient LiveTvService, external channel Id: 1505957949
[17:54:21] [INF] Live stream opened after 0.0007ms
[17:54:21] [INF] Waiting 3000ms before probing the live stream
[17:54:24] [INF] /usr/lib/jellyfin-ffmpeg/ffprobe -analyzeduration 3000000 -i "http://127.0.0.1:9981/stream/channelid/1505957949?ticket=105E63A866E189326B344D9CBD05755FC979644A" -threads 0 -v warning -print_format json -show_streams -show_format
http://127.0.0.1:9981/stream/channelid/1505957949?ticket=105E63A866E189326B344D9CBD05755FC979644A: End of file
[17:54:26] [ERR] Error probing live tv stream
System.Exception: ffprobe failed - streams and format are both null.
   at MediaBrowser.MediaEncoding.Encoder.MediaEncoder.GetMediaInfoInternal(String inputPath, String primaryPath, MediaProtocol protocol, Boolean extractChapters, String probeSizeArgument, Boolean isAudio, Nullable`1 videoType, Boolean forceEnableLogging, CancellationToken cancellationToken)
   at Emby.Server.Implementations.Library.LiveStreamHelper.AddMediaInfoWithProbe(MediaSourceInfo mediaSource, Boolean isAudio, String cacheKey, Boolean addProbeDelay, CancellationToken cancellationToken)
   at Emby.Server.Implementations.Library.MediaSourceManager.OpenLiveStreamInternal(LiveStreamRequest request, CancellationToken cancellationToken)
[17:54:26] [INF] Live stream opened: {"Protocol":"Http","Id":"13","Path":"http://127.0.0.1:9981/stream/channelid/1505957949?ticket=105E63A866E189326B344D9CBD05755FC979644A","Type":"Default","IsRemote":false,"ReadAtNativeFramerate":false,"IgnoreDts":false,"IgnoreIndex":false,"GenPtsInput":false,"SupportsTranscoding":true,"SupportsDirectStream":true,"SupportsDirectPlay":true,"IsInfiniteStream":true,"RequiresOpening":false,"RequiresClosing":true,"LiveStreamId":"a17c75760a04e99b68cf766e11316e1c_41c95b6de5174f82acbc56fe82d0a2f8_13","RequiresLooping":false,"SupportsProbing":true,"MediaStreams":[{"VideoRange":"SDR","DisplayTitle":"SDR","NalLengthSize":"0","IsInterlaced":true,"BitRate":20000000,"IsDefault":false,"IsForced":false,"Type":"Video","Index":-1,"IsExternal":false,"IsTextSubtitleStream":false,"SupportsExternalStream":false},{"DisplayTitle":"","IsInterlaced":false,"IsDefault":false,"IsForced":false,"Type":"Audio","Index":-1,"IsExternal":false,"IsTextSubtitleStream":false,"SupportsExternalStream":false}],"MediaAttachments":[],"Formats":[],"Bitrate":20000000,"RequiredHttpHeaders":{},"AnalyzeDurationMs":3000}
[17:54:26] [INF] User policy for marc. EnablePlaybackRemuxing: True EnableVideoPlaybackTranscoding: True EnableAudioPlaybackTranscoding: True
[17:54:26] [INF] Bitrate exceeds DirectPlay limit: media bitrate: 20000000, max bitrate: 10000000
[17:54:26] [INF] Bitrate exceeds DirectStream limit: media bitrate: 20000000, max bitrate: 10000000
[17:54:26] [INF] Profile: Jellyfin MPV Shim, Path: http://127.0.0.1:9981/stream/channelid/1505957949?ticket=105E63A866E189326B344D9CBD05755FC979644A, isEligibleForDirectPlay: False, isEligibleForDirectStream: False
[17:54:26] [INF] RemoteClientBitrateLimit: 12000000, RemoteIp: 88.130.75.118, IsInLocalNetwork: False
[17:54:26] [INF] Bitrate exceeds DirectPlay limit: media bitrate: 20000000, max bitrate: 12000000
[17:54:26] [INF] Bitrate exceeds DirectStream limit: media bitrate: 20000000, max bitrate: 12000000
[17:54:26] [INF] Profile: Jellyfin MPV Shim, Path: http://127.0.0.1:9981/stream/channelid/1505957949?ticket=105E63A866E189326B344D9CBD05755FC979644A, isEligibleForDirectPlay: False, isEligibleForDirectStream: False
[17:54:26] [INF] RemoteClientBitrateLimit: 12000000, RemoteIp: 88.130.75.118, IsInLocalNetwork: False
[17:54:26] [INF] Bitrate exceeds DirectPlay limit: media bitrate: 20000000, max bitrate: 12000000
[17:54:26] [INF] Bitrate exceeds DirectStream limit: media bitrate: 20000000, max bitrate: 12000000
[17:54:26] [INF] Profile: Jellyfin MPV Shim, Path: http://127.0.0.1:9981/stream/channelid/1505957949?ticket=105E63A866E189326B344D9CBD05755FC979644A, isEligibleForDirectPlay: False, isEligibleForDirectStream: False
[17:54:26] [WRN] Slow HTTP Response from http://media.kolly.eu/Items/0172d7a894c21379a884b3345b379945/PlaybackInfo to 88.130.75.118 in 0:00:05.0249067 with Status Code 200
[17:54:27] [INF] /usr/lib/jellyfin-ffmpeg/ffmpeg -analyzeduration 3000000 -i "http://127.0.0.1:9981/stream/channelid/1505957949?ticket=105E63A866E189326B344D9CBD05755FC979644A" -map_metadata -1 -map_chapters -1 -threads 0 -sn -codec:v:0 h264_nvenc -pix_fmt yuv420p -preset default -b:v 11360000 -maxrate 11360000 -bufsize 22720000 -vf "yadif=0:-1:0,scale=trunc(min(max(iw\,ih*dar)\,1920)/2)*2:trunc(ow/dar/2)*2" -start_at_zero -flags -global_header -vsync -1 -codec:a:0 aac -ac 6 -ab 384000 -copyts -avoid_negative_ts disabled -max_muxing_queue_size 2048 -f hls -max_delay 5000000 -hls_time 3 -hls_segment_type mpegts -start_number 0 -hls_base_url "hls/f644cb641c047138f57a1996d2c78e13/" -hls_playlist_type event -hls_segment_filename "/var/lib/jellyfin/transcodes/f644cb641c047138f57a1996d2c78e13%d.ts" -y "/var/lib/jellyfin/transcodes/f644cb641c047138f57a1996d2c78e13.m3u8"
[17:54:29] [ERR] FFmpeg exited with code 1

tvheadend.log

Feb 20 17:54:29 MAKserver08 tvheadend[877]: subscription: 03BE: No input source available for subscription "HTTP" to channel "Das Erste HD"
Feb 20 17:54:29 MAKserver08 tvheadend[877]: webui: Couldn't start streaming /stream/channelid/1505957949?ticket=105E63A866E189326B344D9CBD05755FC979644A, No free adapter
Feb 20 17:54:29 MAKserver08 tvheadend[877]: subscription: 03BE: "HTTP" unsubscribing from "Das Erste HD", hostname="::ffff:127.0.0.1", client="Lavf/58.45.100"

LiveTV FFmpeg Decode Using Negative Bufsize Configuration

Jellyfin Version: 10.8.0 (Latest)
Plugin Version: 11.0.0 (Latest)
Environment: Docker

I'm running into an issue there FFmpeg bombs out only when attempting to play LiveTV.

The stack is as follows

[22:14:01] [ERR] [93] Jellyfin.Api.Helpers.TranscodingJobHelper: FFmpeg exited with code 1
[22:14:01] [ERR] [93] Jellyfin.Server.Middleware.ExceptionMiddleware: Error processing request. URL GET /videos/ce8fd676-e695-624b-3404-097c33f30f1d/live.m3u8.
MediaBrowser.Common.FfmpegException: FFmpeg exited with code 1
   at Jellyfin.Api.Helpers.TranscodingJobHelper.StartFfMpeg(StreamState state, String outputPath, String commandLineArguments, HttpRequest request, TranscodingJobType transcodingJobType, CancellationTokenSource cancellationTokenSource, String workingDirectory)
   at Jellyfin.Api.Controllers.DynamicHlsController.GetLiveHlsStream(Guid itemId, String container, Nullable`1 static, String params, String tag, String deviceProfileId, String playSessionId, String segmentContainer, Nullable`1 segmentLength, Nullable`1 minSegments, String mediaSourceId, String deviceId, String audioCodec, Nullable`1 enableAutoStreamCopy, Nullable`1 allowVideoStreamCopy, Nullable`1 allowAudioStreamCopy, Nullable`1 breakOnNonKeyFrames, Nullable`1 audioSampleRate, Nullable`1 maxAudioBitDepth, Nullable`1 audioBitRate, Nullable`1 audioChannels, Nullable`1 maxAudioChannels, String profile, String level, Nullable`1 framerate, Nullable`1 maxFramerate, Nullable`1 copyTimestamps, Nullable`1 startTimeTicks, Nullable`1 width, Nullable`1 height, Nullable`1 videoBitRate, Nullable`1 subtitleStreamIndex, Nullable`1 subtitleMethod, Nullable`1 maxRefFrames, Nullable`1 maxVideoBitDepth, Nullable`1 requireAvc, Nullable`1 deInterlace, Nullable`1 requireNonAnamorphic, Nullable`1 transcodingMaxAudioChannels, Nullable`1 cpuCoreLimit, String liveStreamId, Nullable`1 enableMpegtsM2TsMode, String videoCodec, String subtitleCodec, String transcodeReasons, Nullable`1 audioStreamIndex, Nullable`1 videoStreamIndex, Nullable`1 context, Dictionary`2 streamOptions, Nullable`1 maxWidth, Nullable`1 maxHeight, Nullable`1 enableSubtitlesInManifest)
   at lambda_method991(Closure , Object )
   at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfActionResultExecutor.Execute(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 Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
   at Jellyfin.Server.Middleware.ServerStartupMessageMiddleware.Invoke(HttpContext httpContext, IServerApplicationHost serverApplicationHost, ILocalizationManager localizationManager)
   at Jellyfin.Server.Middleware.WebSocketHandlerMiddleware.Invoke(HttpContext httpContext, IWebSocketManager webSocketManager)
   at Jellyfin.Server.Middleware.IpBasedAccessValidationMiddleware.Invoke(HttpContext httpContext, INetworkManager networkManager)
   at Jellyfin.Server.Middleware.LanFilteringMiddleware.Invoke(HttpContext httpContext, INetworkManager networkManager, IServerConfigurationManager serverConfigurationManager)
   at Microsoft.AspNetCore.Authorization.Policy.AuthorizationMiddlewareResultHandler.HandleAsync(RequestDelegate next, HttpContext context, AuthorizationPolicy policy, PolicyAuthorizationResult authorizeResult)
   at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
   at Jellyfin.Server.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.Server.Middleware.RobotsRedirectionMiddleware.Invoke(HttpContext httpContext)
   at Jellyfin.Server.Middleware.LegacyEmbyRouteRewriteMiddleware.Invoke(HttpContext httpContext)
   at Microsoft.AspNetCore.ResponseCompression.ResponseCompressionMiddleware.InvokeCore(HttpContext context)
   at Jellyfin.Server.Middleware.ResponseTimeMiddleware.Invoke(HttpContext context)
   at Jellyfin.Server.Middleware.ExceptionMiddleware.Invoke(HttpContext context)

When I jump into the FFmpeg logs, I get the following

/videos/ce8fd676-e695-624b-3404-097c33f30f1d/live.m3u8

{"Protocol":1,"Id":"787246","Path":"http://10.0.0.21:9981/stream/channelid/787246?ticket=9d27d4be0d7d74570407ed87efdaab8e6eb3c9a8","EncoderPath":null,"EncoderProtocol":null,"Type":0,"Container":null,"Size":null,"Name":null,"IsRemote":false,"ETag":null,"RunTimeTicks":null,"ReadAtNativeFramerate":false,"IgnoreDts":false,"IgnoreIndex":false,"GenPtsInput":false,"SupportsTranscoding":true,"SupportsDirectStream":true,"SupportsDirectPlay":true,"IsInfiniteStream":true,"RequiresOpening":false,"OpenToken":null,"RequiresClosing":false,"LiveStreamId":null,"BufferMs":1500,"RequiresLooping":false,"SupportsProbing":true,"VideoType":null,"IsoType":null,"Video3DFormat":null,"MediaStreams":[{"Codec":null,"CodecTag":null,"Language":null,"ColorRange":null,"ColorSpace":null,"ColorTransfer":null,"ColorPrimaries":null,"Comment":null,"TimeBase":null,"CodecTimeBase":null,"Title":null,"VideoRange":"SDR","LocalizedUndefined":null,"LocalizedDefault":null,"LocalizedForced":null,"LocalizedExternal":null,"DisplayTitle":"SDR","NalLengthSize":"0","IsInterlaced":true,"IsAVC":null,"ChannelLayout":null,"BitRate":null,"BitDepth":null,"RefFrames":null,"PacketLength":null,"Channels":null,"SampleRate":null,"IsDefault":false,"IsForced":false,"Height":null,"Width":null,"AverageFrameRate":null,"RealFrameRate":null,"Profile":null,"Type":1,"AspectRatio":null,"Index":-1,"Score":null,"IsExternal":false,"DeliveryMethod":null,"DeliveryUrl":null,"IsExternalUrl":null,"IsTextSubtitleStream":false,"SupportsExternalStream":false,"Path":null,"PixelFormat":null,"Level":null,"IsAnamorphic":null},{"Codec":null,"CodecTag":null,"Language":null,"ColorRange":null,"ColorSpace":null,"ColorTransfer":null,"ColorPrimaries":null,"Comment":null,"TimeBase":null,"CodecTimeBase":null,"Title":null,"VideoRange":null,"LocalizedUndefined":null,"LocalizedDefault":null,"LocalizedForced":null,"LocalizedExternal":null,"DisplayTitle":"","NalLengthSize":null,"IsInterlaced":false,"IsAVC":null,"ChannelLayout":null,"BitRate":null,"BitDepth":null,"RefFrames":null,"PacketLength":null,"Channels":null,"SampleRate":null,"IsDefault":false,"IsForced":false,"Height":null,"Width":null,"AverageFrameRate":null,"RealFrameRate":null,"Profile":null,"Type":0,"AspectRatio":null,"Index":-1,"Score":null,"IsExternal":false,"DeliveryMethod":null,"DeliveryUrl":null,"IsExternalUrl":null,"IsTextSubtitleStream":false,"SupportsExternalStream":false,"Path":null,"PixelFormat":null,"Level":null,"IsAnamorphic":null}],"MediaAttachments":[],"Formats":[],"Bitrate":null,"Timestamp":null,"RequiredHttpHeaders":{},"TranscodingUrl":null,"TranscodingSubProtocol":null,"TranscodingContainer":null,"AnalyzeDurationMs":null,"DefaultAudioStreamIndex":null,"DefaultSubtitleStreamIndex":null}

/usr/lib/jellyfin-ffmpeg/ffmpeg -analyzeduration 200M -init_hw_device cuda=cu:0 -filter_hw_device cu -autorotate 0 -i "http://10.0.0.21:9981/stream/channelid/787246?ticket=9d27d4be0d7d74570407ed87efdaab8e6eb3c9a8" -map_metadata -1 -map_chapters -1 -threads 8 -sn -codec:v:0 h264_nvenc -preset p4 -b:v 1866282667 -maxrate 1866282667 -bufsize -562401962 -profile:v:0 high -vf "setparams=color_primaries=bt709:color_trc=bt709:colorspace=bt709,yadif=0:-1:0,scale=trunc(min(max(iw\,ih*a)\,2560)/2)*2:trunc(ow/a/2)*2,format=yuv420p" -flags -global_header -codec:a:0 libfdk_aac -ac 2 -ab 384000 -copyts -avoid_negative_ts disabled -max_muxing_queue_size 2048 -f hls -max_delay 5000000 -hls_time 3 -hls_segment_type mpegts -start_number 0 -hls_base_url "hls/77d3aa15c4ce50a990879e81019b13d8/" -hls_segment_filename "/config/transcodes/77d3aa15c4ce50a990879e81019b13d8%d.ts" -hls_playlist_type event -hls_list_size 0 -y "/config/transcodes/77d3aa15c4ce50a990879e81019b13d8.m3u8"


ffmpeg version 5.0.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=-lfftw3 --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. 17.100 / 57. 17.100
  libavcodec     59. 18.100 / 59. 18.100
  libavformat    59. 16.100 / 59. 16.100
  libavdevice    59.  4.100 / 59.  4.100
  libavfilter     8. 24.100 /  8. 24.100
  libswscale      6.  4.100 /  6.  4.100
  libswresample   4.  3.100 /  4.  3.100
  libpostproc    56.  3.100 / 56.  3.100
[mp3float @ 0x558170b88580] Header missing
[h264 @ 0x558170b70f40] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x558170b70f40] decode_slice_header error
[h264 @ 0x558170b70f40] no frame!
[h264 @ 0x558170b70f40] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x558170b70f40] decode_slice_header error
[h264 @ 0x558170b70f40] no frame!
[h264 @ 0x558170b70f40] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x558170b70f40] decode_slice_header error
[h264 @ 0x558170b70f40] no frame!
[h264 @ 0x558170b70f40] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x558170b70f40] decode_slice_header error
[h264 @ 0x558170b70f40] no frame!
[h264 @ 0x558170b70f40] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x558170b70f40] decode_slice_header error
[h264 @ 0x558170b70f40] no frame!
[h264 @ 0x558170b70f40] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x558170b70f40] decode_slice_header error
[h264 @ 0x558170b70f40] no frame!
[h264 @ 0x558170b70f40] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x558170b70f40] decode_slice_header error
[h264 @ 0x558170b70f40] no frame!
[h264 @ 0x558170b70f40] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x558170b70f40] decode_slice_header error
[h264 @ 0x558170b70f40] no frame!
[h264 @ 0x558170b70f40] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x558170b70f40] decode_slice_header error
[h264 @ 0x558170b70f40] no frame!
[h264 @ 0x558170b70f40] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x558170b70f40] decode_slice_header error
[h264 @ 0x558170b70f40] no frame!
[h264 @ 0x558170b70f40] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x558170b70f40] decode_slice_header error
[h264 @ 0x558170b70f40] no frame!
[h264 @ 0x558170b70f40] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x558170b70f40] decode_slice_header error
[h264 @ 0x558170b70f40] no frame!
[h264 @ 0x558170b70f40] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x558170b70f40] decode_slice_header error
[h264 @ 0x558170b70f40] no frame!
[h264 @ 0x558170b70f40] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x558170b70f40] decode_slice_header error
[h264 @ 0x558170b70f40] no frame!
[h264 @ 0x558170b70f40] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x558170b70f40] decode_slice_header error
[h264 @ 0x558170b70f40] no frame!
[h264 @ 0x558170b70f40] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x558170b70f40] decode_slice_header error
[h264 @ 0x558170b70f40] no frame!
[h264 @ 0x558170b70f40] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x558170b70f40] decode_slice_header error
[h264 @ 0x558170b70f40] no frame!
[h264 @ 0x558170b70f40] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x558170b70f40] decode_slice_header error
[h264 @ 0x558170b70f40] no frame!
[h264 @ 0x558170b70f40] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x558170b70f40] decode_slice_header error
[h264 @ 0x558170b70f40] no frame!
[h264 @ 0x558170b70f40] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x558170b70f40] decode_slice_header error
[h264 @ 0x558170b70f40] no frame!
[h264 @ 0x558170b70f40] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x558170b70f40] decode_slice_header error
[h264 @ 0x558170b70f40] no frame!
[h264 @ 0x558170b70f40] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x558170b70f40] decode_slice_header error
[h264 @ 0x558170b70f40] no frame!
[h264 @ 0x558170b70f40] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x558170b70f40] decode_slice_header error
[h264 @ 0x558170b70f40] no frame!
[mpegts @ 0x558170b691c0] Could not find codec parameters for stream 5 (Unknown: none ([5][0][0][0] / 0x0005)): unknown codec
Consider increasing the value for the 'analyzeduration' (200000000) and 'probesize' (5000000) options
Input #0, mpegts, from 'http://10.0.0.21:9981/stream/channelid/787246?ticket=9d27d4be0d7d74570407ed87efdaab8e6eb3c9a8':
  Duration: N/A, start: 1538.587600, bitrate: N/A
  Program 544
    Metadata:
      service_name    : ABC NEWS
      service_provider: ABC
  Program 545
    Metadata:
      service_name    : ABC TV
      service_provider: ABC
  Program 546
    Metadata:
      service_name    : ABCKids/TVPlus
      service_provider: ABC
  Program 548
    Metadata:
      service_name    : ABC ME
      service_provider: ABC
  Program 547
    Metadata:
      service_name    : ABC TV
      service_provider: ABC
  Program 549
    Metadata:
      service_name    : ABCTV HD
      service_provider: ABC
  Stream #0:1[0x910]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(tv, top first), 1920x1080 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn
  Stream #0:2[0x911](eng): Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, fltp, 256 kb/s
  Stream #0:3[0x975](eng): Audio: aac_latm (HE-AAC) ([17][0][0][0] / 0x0011), 48000 Hz, stereo, fltp (visual impaired) (descriptions)
  Stream #0:4[0x912](eng): Subtitle: dvb_teletext ([6][0][0][0] / 0x0006), 492x250
  Stream #0:5[0x157c]: Unknown: none ([5][0][0][0] / 0x0005)
  Program 550
    Metadata:
      service_name    : Double J
      service_provider: ABC
  Program 551
    Metadata:
      service_name    : ABC Jazz
      service_provider: ABC
  Program 552
    Metadata:
      service_name    : ABC KIDS Listen
      service_provider: ABC
  Program 553
    Metadata:
      service_name    : triple j
      service_provider: ABC
  Program 554
    Metadata:
      service_name    : triple j Unearthed
      service_provider: ABC
  Program 555
    Metadata:
      service_name    : ABC Classic
      service_provider: ABC
  Program 556
    Metadata:
      service_name    : ABC Country
      service_provider: ABC
  Program 557
    Metadata:
      service_name    : ABC SYDNEY
      service_provider: ABC
  Program 558
    Metadata:
      service_name    : ABC RN
      service_provider: ABC
  Program 559
    Metadata:
      service_name    : ABC NewsRadio
      service_provider: ABC
  No Program
  Stream #0:0[0x12]: Data: epg
Stream mapping:
  Stream #0:1 -> #0:0 (h264 (native) -> h264 (h264_nvenc))
  Stream #0:2 -> #0:1 (mp2 (native) -> aac (libfdk_aac))
Press [q] to stop, [?] for help
[mp2 @ 0x5581728e6440] Header missing
Error while decoding stream #0:2: Invalid data found when processing input
[h264 @ 0x558170ca4880] co located POCs unavailable
[h264 @ 0x558171ea54c0] co located POCs unavailable
[h264_nvenc @ 0x558170b77780] InitializeEncoder failed: invalid param (8): Invalid value for VBV buffer size.
Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
[libfdk_aac @ 0x558170ca6d40] 2 frames left in the queue on closing
Conversion failed!

With the error InitializeEncoder failed: invalid param (8): Invalid value for VBV buffer size. I dug into the FFmpeg docs and figured it was probably related to the -bufsize configuration being passed in. That value is -bufsize -562401962.

The problem would appear to be that this value is a negative. When I look into the configuration in my decoder settings, I'm using NVENC/NVDEC but with default settings, and it works just find for local content. It's only bombing out for LiveTV, and it's bombing out for all LiveTV regardless of channel.

I can't see any configuration I can influence to change this. Let me know if there's anything further I can provide to look into this. Thanks in advance :)

Problem connecting tvheadend inside docker

When configuring TvHeadend plugin in jellyfin with Tvheadend installed in another docker, this error appears in portainer:
[20:14:13] [ERR] [15] TVHeadEnd.LiveTvService: [TVHclient] HTSConnectionAsync.open: caught exception

System.Net.Internals.SocketExceptionFactory+ExtendedSocketException (00000005, 0xFFFDFFFF): Name or service not known

at System.Net.Dns.InternalGetHostByName(String hostName)

at System.Net.Dns.GetHostEntry(String hostNameOrAddress)

at TVHeadEnd.HTSP.HTSConnectionAsync.open(String hostname, Int32 port)

Channels not listed, but numbered in Tvheadend starting from 1 (radio) and 100(tv)

Tvheadend works properly, shows channels and all is visible and works from Kodi perspective.
Channels got numbered automatically by Tvheadend when created from services even if there's no setting at Network level anymore. When checking channels it looks all good from numbers perspective.

Jellyfin even if connects properly doesn't see any channels. All references under other issues (#13) were down to channel numbering, but it doesn't seem to be the case here.

Where could I start looking to get some better understanding of what's wrong?

Docker based (all):
Tvheadend: 4.3-1986~g09a2c71ab, arm64v8

Jellyfin: Version: 10.7.7, Linux Arm
Jellyfin-tvheadend plugin: 9.0.0.0, tried v7.0.0.0

Checked of course steps from:
https://jellyfin.org/docs/general/server/plugins/tvheadend.html
There's nothing like this in current Tvheadend even if channels got numbered automatically starting from 1:

Automatic mode
Go to Configuration > DVB Inputs > Networks
Select the network you want and press Edit
In the option Channel numbers from we enter the number so we want the numbering of the channels to start (for example: 1), this number must be nonzero

Uploading Screenshot from 2022-01-07 11-44-18.pngโ€ฆ

Live TV - Captions not available (nor audio tracks)

I am running version 11.0.0.0 of the plugin, on Jellyfin 10.8.9 on Arch Linux. I use a GPU for transcoding (Intel ARC A750). I have recently set up TVHeadend and it works wonders with Jellyfin, except for subtitles. I have enabled the experimental subtitle setting yet there seems to be no option to set them.

I'm attaching a section of a log:

[2023-03-14 15:32:21.271 +02:00] [WRN] Undefined BaseItemKind to Type mapping: Program
[2023-03-14 15:32:21.273 +02:00] [WRN] Undefined BaseItemKind to Type mapping: Program
[2023-03-14 15:32:23.785 +02:00] [WRN] Undefined BaseItemKind to Type mapping: Program
[2023-03-14 15:32:23.786 +02:00] [WRN] Undefined BaseItemKind to Type mapping: Program
[2023-03-14 15:32:25.456 +02:00] [INF] [TVHclient] AccessTicketHandler.GetAccessTicket: New ticket (#"3") created for "channelId"="1324526807"
[2023-03-14 15:32:25.457 +02:00] [INF] [TVHclient] LiveTvService.GetChannelStream: support for live TV subtitles and multiple audio tracks is enabled
[2023-03-14 15:32:25.458 +02:00] [INF] User policy for "KiralyCraft". EnablePlaybackRemuxing: True EnableVideoPlaybackTranscoding: True EnableAudioPlaybackTranscoding: True
[2023-03-14 15:32:25.459 +02:00] [INF] StreamBuilder.BuildVideoItem( Profile="Anonymous Profile", Path="http://re:[email protected]:9981/stream/channelid/1324526807", AudioStreamIndex=null, SubtitleStreamIndex=null ) => ( PlayMethod=Transcode, TranscodeReason=ContainerBitrateExceedsLimit ) "media:/videos/23997aa7-6014-3490-f4c4-091740aa20c6/master.m3u8?MediaSourceId=1324526807&VideoCodec=h264&AudioCodec=aac,mp3&AudioStreamIndex=-1&VideoBitrate=19616000&AudioBitrate=384000&api_key=<token>&TranscodingMaxAudioChannels=2&RequireAvc=false&SegmentContainer=ts&MinSegments=1&BreakOnNonKeyFrames=True&h264-profile=high,main,baseline,constrainedbaseline,high10&h264-rangetype=SDR&h264-level=52&h264-deinterlace=true&TranscodeReasons=ContainerBitrateExceedsLimit"
[2023-03-14 15:32:25.742 +02:00] [INF] [TVHclient] LiveTvService.GetChannelStream: support for live TV subtitles and multiple audio tracks is enabled
[2023-03-14 15:32:25.756 +02:00] [INF] [TVHclient] LiveTvService.GetChannelStream: support for live TV subtitles and multiple audio tracks is enabled
[2023-03-14 15:32:25.756 +02:00] [INF] Current HLS implementation doesn't support non-keyframe breaks but one is requested, ignoring that request
[2023-03-14 15:32:27.260 +02:00] [INF] "/usr/lib/jellyfin-ffmpeg/ffmpeg" "-analyzeduration 200M -init_hw_device vaapi=va:,driver=iHD,kernel_driver=i915 -init_hw_device qsv=qs@va -filter_hw_device qs -autorotate 0 -i \"http://re:[email protected]:9981/stream/channelid/1324526807\" -map_metadata -1 -map_chapters -1 -threads 0 -sn -codec:v:0 h264_qsv -low_power 1 -preset 7 -look_ahead 0 -b:v 19616000 -maxrate 19616000 -bufsize 39232000 -profile:v:0 high -level 51 -vf \"setparams=color_primaries=bt709:color_trc=bt709:colorspace=bt709,yadif=0:-1:0,scale=trunc(min(max(iw\,ih*a)\,1920)/2)*2:trunc(ow/a/2)*2,format=yuv420p\" -flags -global_header -codec:a:0 libfdk_aac -ac 2 -ab 384000 -copyts -avoid_negative_ts disabled -max_muxing_queue_size 2048 -f hls -max_delay 5000000 -hls_time 3 -hls_segment_type mpegts -start_number 0 -hls_base_url \"hls/27b696089f999b275123816be8d20ec7/\" -hls_segment_filename \"/var/lib/jellyfin/transcodes/27b696089f999b275123816be8d20ec7%d.ts\" -hls_playlist_type event -hls_list_size 0 -y \"/var/lib/jellyfin/transcodes/27b696089f999b275123816be8d20ec7.m3u8\""
[2023-03-14 15:32:40.890 +02:00] [WRN] Slow HTTP Response from "http://redacted/videos/23997aa7-6014-3490-f4c4-091740aa20c6/live.m3u8?DeviceId=TW96aWxsYS81LjAgKFgxMTsgTGludXggeDg2XzY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTEyLjAuMC4wIFNhZmFyaS81MzcuMzZ8MTY3ODAxNDM1NDE1NQ11&MediaSourceId=1324526807&VideoCodec=h264&AudioCodec=aac,mp3&AudioStreamIndex=-1&VideoBitrate=19616000&AudioBitrate=384000&PlaySessionId=17ed423dbd8247559c4c23150b9d07ff&api_key=redacted_key&TranscodingMaxAudioChannels=2&RequireAvc=false&SegmentContainer=ts&MinSegments=1&BreakOnNonKeyFrames=True&h264-profile=high,main,baseline,constrainedbaseline,high10&h264-rangetype=SDR&h264-level=52&h264-deinterlace=true&TranscodeReasons=ContainerBitrateExceedsLimit" to "192.168.0.151" in 0:00:15.1385832 with Status Code 200
[2023-03-14 15:32:40.890 +02:00] [WRN] Slow HTTP Response from "http://redacted/videos/23997aa7-6014-3490-f4c4-091740aa20c6/live.m3u8?DeviceId=TW96aWxsYS81LjAgKFgxMTsgTGludXggeDg2XzY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTEyLjAuMC4wIFNhZmFyaS81MzcuMzZ8MTY3ODAxNDM1NDE1NQ11&MediaSourceId=1324526807&VideoCodec=h264&AudioCodec=aac,mp3&AudioStreamIndex=-1&VideoBitrate=19616000&AudioBitrate=384000&PlaySessionId=17ed423dbd8247559c4c23150b9d07ff&api_key=redacted_key&TranscodingMaxAudioChannels=2&RequireAvc=false&SegmentContainer=ts&MinSegments=1&BreakOnNonKeyFrames=True&h264-profile=high,main,baseline,constrainedbaseline,high10&h264-rangetype=SDR&h264-level=52&h264-deinterlace=true&TranscodeReasons=ContainerBitrateExceedsLimit" to "192.168.0.151" in 0:00:04.1361686 with Status Code 200
[2023-03-14 15:32:41.753 +02:00] [INF] [TVHclient] LiveTvService.GetChannelStream: support for live TV subtitles and multiple audio tracks is enabled
[2023-03-14 15:32:53.533 +02:00] [INF] Stopping ffmpeg process with q command for "/var/lib/jellyfin/transcodes/27b696089f999b275123816be8d20ec7.m3u8"
[2023-03-14 15:32:53.784 +02:00] [INF] FFmpeg exited with code 0
[2023-03-14 15:32:53.785 +02:00] [INF] Deleting partial stream file(s) "/var/lib/jellyfin/transcodes/27b696089f999b275123816be8d20ec7.m3u8"
[2023-03-14 15:32:55.315 +02:00] [INF] Playback stopped reported by app "Jellyfin Web" "10.8.9" playing "Nat Geo HD". Stopped at "9514" ms
[2023-03-14 15:32:55.404 +02:00] [WRN] Slow HTTP Response from "http://redacted/Sessions/Playing/Stopped" to "192.168.0.151" in 0:00:01.8773597 with Status Code 204

[bug] Trancoding occurs even when the client supports the video and audio codecs

When trying to stream any channel from my DVB-S tuner, Jellyfin wants to transcode it into H264 and AAC, even though the channel usually already is.

I think this may be down to this chunk of code, that doesn't return any stream information - only that the video stream is a video, and the audio stream is audio:

return new MediaSourceInfo
{
Id = channelId,
Path = _htsConnectionHandler.GetHttpBaseUrl() + ticket.Url,
Protocol = MediaProtocol.Http,
MediaStreams = new List<MediaStream>
{
new MediaStream
{
Type = MediaStreamType.Video,
// Set the index to -1 because we don't know the exact index of the video stream within the container
Index = -1,
// Set to true if unknown to enable deinterlacing
IsInterlaced = true
},
new MediaStream
{
Type = MediaStreamType.Audio,
// Set the index to -1 because we don't know the exact index of the audio stream within the container
Index = -1
}
}
};

Some of the missing information (stream index, codec, language) is available from Tvheadend, using the /api/service/streams endpoint, so I think fetching that data might help solve this, assuming that missing info is the cause.

Playback error for radio channels in app and web interface

I do not get any errors in the server log (just โ€œStopped at 0 msโ€).

The web interface shows a 404 for the request to the stream.
Looking at the api documentation we have:

string^[a-zA-Z0-9\-\._,|]{0,40}$
The audio container.

The thing is, the request contains: opus,webm|opus,mp3,aac,m4a|aac,m4b|aac,flac,webma,webm|webma,wav,ogg for the container, which does not fit the regex as it is too long.

I do not know if this is an issue of the web interface or the plugin.
It also does not work in the app, but I do not know how to debug this.
It does work in the desktop client, so it is not broken in general.

Recieve handler thread pinned at 100%

The ReceiveHandler will just spin if the remote closes the connection as Socket.Receive() just returns immediately with 0 bytes instead of blocking.

int bytesReveived = _socket.Receive(readBuffer);

https://learn.microsoft.com/en-us/dotnet/api/system.net.sockets.socket.receive?view=net-6.0#system-net-sockets-socket-receive(system-byte())

If you are using a connection-oriented Socket, the Receive method will read as much data as is available, up to the size of the buffer. If the remote host shuts down the Socket connection with the Shutdown method, and all available data has been received, the Receive method will complete immediately and return zero bytes.

No settings for the latest plugin version 12.0 on jellyfin 10.9

Hello, I've got problems setting up the plugin in the latest release of jellyfin 10.9
First the plugin was not listed under the stable repo (I assume will take a while till it pop up there)
Second, I've installed it manually it shows active but the settings button/menu is missing. Hence cannot set it up for usage.
Thanks for the good work on the plugin!

Live TV not working with latest alpha release of server

I am trying to debug a problem I found with streaming live TV via the jellyfin-tizen app.

In order to do this I am trying to run the master branch of Jellyfin Server in debug. I can get the server running in debug fine and can get the tvheadend plugin installed.

Playback of recorded shows work but playback of live TV result in an exception:

[08:30:35] [INF] [49] Jellyfin.Api.Controllers.MediaInfoController: GetPostedPlaybackInfo profile: {"Name": null, "Id": null, "Identification": null, "FriendlyName": null, "Manufacturer": null, "ManufacturerUrl": null, "ModelName": null, "ModelDescription": null, "ModelNumber": null, "ModelUrl": null, "SerialNumber": null, "EnableAlbumArtInDidl": false, "EnableSingleAlbumArtLimit": false, "EnableSingleSubtitleLimit": false, "SupportedMediaTypes": "Audio,Photo,Video", "UserId": null, "AlbumArtPn": null, "MaxAlbumArtWidth": null, "MaxAlbumArtHeight": null, "MaxIconWidth": null, "MaxIconHeight": null, "MaxStreamingBitrate": 120000000, "MaxStaticBitrate": 100000000, "MusicStreamingTranscodingBitrate": 384000, "MaxStaticMusicBitrate": 8000000, "SonyAggregationFlags": null, "ProtocolInfo": null, "TimelineOffsetSeconds": 0, "RequiresPlainVideoItems": false, "RequiresPlainFolders": false, "EnableMSMediaReceiverRegistrar": false, "IgnoreTranscodeByteRangeRequests": false, "XmlRootAttributes": [], "DirectPlayProfiles": [{"Container": "webm", "AudioCodec": "vorbis,opus", "VideoCodec": "vp8,vp9,av1", "Type": "Video", "$type": "DirectPlayProfile"}, {"Container": "mp4,m4v", "AudioCodec": "aac,mp3,opus,flac,vorbis", "VideoCodec": "h264,vp8,vp9,av1", "Type": "Video", "$type": "DirectPlayProfile"}, {"Container": "mov", "AudioCodec": "aac,mp3,opus,flac,vorbis", "VideoCodec": "h264", "Type": "Video", "$type": "DirectPlayProfile"}, {"Container": "opus", "AudioCodec": null, "VideoCodec": null, "Type": "Audio", "$type": "DirectPlayProfile"}, {"Container": "webm", "AudioCodec": "opus", "VideoCodec": null, "Type": "Audio", "$type": "DirectPlayProfile"}, {"Container": "mp3", "AudioCodec": null, "VideoCodec": null, "Type": "Audio", "$type": "DirectPlayProfile"}, {"Container": "aac", "AudioCodec": null, "VideoCodec": null, "Type": "Audio", "$type": "DirectPlayProfile"}, {"Container": "m4a", "AudioCodec": "aac", "VideoCodec": null, "Type": "Audio", "$type": "DirectPlayProfile"}, {"Container": "m4b", "AudioCodec": "aac", "VideoCodec": null, "Type": "Audio", "$type": "DirectPlayProfile"}, {"Container": "flac", "AudioCodec": null, "VideoCodec": null, "Type": "Audio", "$type": "DirectPlayProfile"}, {"Container": "webma", "AudioCodec": null, "VideoCodec": null, "Type": "Audio", "$type": "DirectPlayProfile"}, {"Container": "webm", "AudioCodec": "webma", "VideoCodec": null, "Type": "Audio", "$type": "DirectPlayProfile"}, {"Container": "wav", "AudioCodec": null, "VideoCodec": null, "Type": "Audio", "$type": "DirectPlayProfile"}, {"Container": "ogg", "AudioCodec": null, "VideoCodec": null, "Type": "Audio", "$type": "DirectPlayProfile"}], "TranscodingProfiles": [{"Container": "ts", "Type": "Audio", "VideoCodec": "", "AudioCodec": "aac", "Protocol": "hls", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Streaming", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 1, "SegmentLength": 0, "BreakOnNonKeyFrames": true, "$type": "TranscodingProfile"}, {"Container": "aac", "Type": "Audio", "VideoCodec": "", "AudioCodec": "aac", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Streaming", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "$type": "TranscodingProfile"}, {"Container": "mp3", "Type": "Audio", "VideoCodec": "", "AudioCodec": "mp3", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Streaming", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "$type": "TranscodingProfile"}, {"Container": "opus", "Type": "Audio", "VideoCodec": "", "AudioCodec": "opus", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Streaming", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "$type": "TranscodingProfile"}, {"Container": "wav", "Type": "Audio", "VideoCodec": "", "AudioCodec": "wav", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Streaming", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "$type": "TranscodingProfile"}, {"Container": "opus", "Type": "Audio", "VideoCodec": "", "AudioCodec": "opus", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Static", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "$type": "TranscodingProfile"}, {"Container": "mp3", "Type": "Audio", "VideoCodec": "", "AudioCodec": "mp3", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Static", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "$type": "TranscodingProfile"}, {"Container": "aac", "Type": "Audio", "VideoCodec": "", "AudioCodec": "aac", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Static", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "$type": "TranscodingProfile"}, {"Container": "wav", "Type": "Audio", "VideoCodec": "", "AudioCodec": "wav", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Static", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "$type": "TranscodingProfile"}, {"Container": "ts", "Type": "Video", "VideoCodec": "h264", "AudioCodec": "aac,mp3", "Protocol": "hls", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Streaming", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 1, "SegmentLength": 0, "BreakOnNonKeyFrames": true, "$type": "TranscodingProfile"}, {"Container": "webm", "Type": "Video", "VideoCodec": "vp8,vp9,av1,vpx", "AudioCodec": "vorbis,opus", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Streaming", "EnableSubtitlesInManifest": false, "MaxAudioChannels": "2", "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "$type": "TranscodingProfile"}, {"Container": "mp4", "Type": "Video", "VideoCodec": "h264", "AudioCodec": "aac,mp3,opus,flac,vorbis", "Protocol": "http", "EstimateContentLength": false, "EnableMpegtsM2TsMode": false, "TranscodeSeekInfo": "Auto", "CopyTimestamps": false, "Context": "Static", "EnableSubtitlesInManifest": false, "MaxAudioChannels": null, "MinSegments": 0, "SegmentLength": 0, "BreakOnNonKeyFrames": false, "$type": "TranscodingProfile"}], "ContainerProfiles": [], "CodecProfiles": [{"Type": "VideoAudio", "Conditions": [{"Condition": "Equals", "Property": "IsSecondaryAudio", "Value": "false", "IsRequired": false, "$type": "ProfileCondition"}], "ApplyConditions": [], "Codec": "aac", "Container": null, "$type": "CodecProfile"}, {"Type": "VideoAudio", "Conditions": [{"Condition": "Equals", "Property": "IsSecondaryAudio", "Value": "false", "IsRequired": false, "$type": "ProfileCondition"}], "ApplyConditions": [], "Codec": null, "Container": null, "$type": "CodecProfile"}, {"Type": "Video", "Conditions": [{"Condition": "NotEquals", "Property": "IsAnamorphic", "Value": "true", "IsRequired": false, "$type": "ProfileCondition"}, {"Condition": "EqualsAny", "Property": "VideoProfile", "Value": "high|main|baseline|constrained baseline|high 10", "IsRequired": false, "$type": "ProfileCondition"}, {"Condition": "LessThanEqual", "Property": "VideoLevel", "Value": "52", "IsRequired": false, "$type": "ProfileCondition"}, {"Condition": "NotEquals", "Property": "IsInterlaced", "Value": "true", "IsRequired": false, "$type": "ProfileCondition"}], "ApplyConditions": [], "Codec": "h264", "Container": null, "$type": "CodecProfile"}, {"Type": "Video", "Conditions": [{"Condition": "NotEquals", "Property": "IsAnamorphic", "Value": "true", "IsRequired": false, "$type": "ProfileCondition"}, {"Condition": "EqualsAny", "Property": "VideoProfile", "Value": "main", "IsRequired": false, "$type": "ProfileCondition"}, {"Condition": "LessThanEqual", "Property": "VideoLevel", "Value": "120", "IsRequired": false, "$type": "ProfileCondition"}, {"Condition": "NotEquals", "Property": "IsInterlaced", "Value": "true", "IsRequired": false, "$type": "ProfileCondition"}], "ApplyConditions": [], "Codec": "hevc", "Container": null, "$type": "CodecProfile"}], "ResponseProfiles": [{"Container": "m4v", "AudioCodec": null, "VideoCodec": null, "Type": "Video", "OrgPn": null, "MimeType": "video/mp4", "Conditions": [], "$type": "ResponseProfile"}], "SubtitleProfiles": [{"Format": "vtt", "Method": "External", "DidlMode": null, "Language": null, "Container": null, "$type": "SubtitleProfile"}, {"Format": "ass", "Method": "External", "DidlMode": null, "Language": null, "Container": null, "$type": "SubtitleProfile"}, {"Format": "ssa", "Method": "External", "DidlMode": null, "Language": null, "Container": null, "$type": "SubtitleProfile"}], "$type": "DeviceProfile"}
Exception thrown: 'System.MissingMethodException' in System.Private.CoreLib.dll
Exception thrown: 'System.MissingMethodException' in System.Private.CoreLib.dll
Exception thrown: 'System.MissingMethodException' in System.Private.CoreLib.dll
[08:30:35] [ERR] [49] Emby.Server.Implementations.Library.MediaSourceManager: Error getting media sources
System.MissingMethodException: Method not found: 'Void MediaBrowser.Model.Dto.MediaSourceInfo.set_MediaStreams(System.Collections.Generic.List`1<MediaBrowser.Model.Entities.MediaStream>)'.
   at TVHeadEnd.LiveTvService.GetChannelStream(String channelId, String mediaSourceId, CancellationToken cancellationToken)
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
   at TVHeadEnd.LiveTvService.GetChannelStream(String channelId, String mediaSourceId, CancellationToken cancellationToken)
   at TVHeadEnd.LiveTvService.GetChannelStreamMediaSources(String channelId, CancellationToken cancellationToken)
   at Emby.Server.Implementations.LiveTv.LiveTvManager.GetChannelMediaSources(BaseItem item, CancellationToken cancellationToken) in /home/alex/code/Jellyfin/jellyfin/Emby.Server.Implementations/LiveTv/LiveTvManager.cs:line 268
   at Emby.Server.Implementations.LiveTv.LiveTvMediaSourceProvider.GetMediaSourcesInternal(BaseItem item, ActiveRecordingInfo activeRecordingInfo, CancellationToken cancellationToken) in /home/alex/code/Jellyfin/jellyfin/Emby.Server.Implementations/LiveTv/LiveTvMediaSourceProvider.cs:line 69
   at Emby.Server.Implementations.Library.MediaSourceManager.GetDynamicMediaSources(BaseItem item, IMediaSourceProvider provider, CancellationToken cancellationToken) in /home/alex/code/Jellyfin/jellyfin/Emby.Server.Implementations/Library/MediaSourceManager.cs:line 279
[08:30:35] [WRN] [49] Jellyfin.Server.Middleware.ResponseTimeMiddleware: Slow HTTP Response from http://localhost:8096/Items/ef56912cffbf8ef9af643c47b57d5fd6/PlaybackInfo?UserId=a9b37836fdcc412cacf780bb1899ff68&StartTimeTicks=0&IsPlayback=true&AutoOpenLiveStream=true&MaxStreamingBitrate=284745763 to 127.0.0.1 in 0:00:00.7782554 with Status Code 200

Can anyone give me any hints on next steps?

I am new to the Jellyfin ecosystem so am currently on a steep learning curve. I think Jellyfin is amazing BTW.

Playback Error

Something seems to have broken the playback functionality entirely for me. As there were no updates on the plugin, I'd reckon this is caused by a Jellyfin update.

I receive the folllowing error message on every channel I try to play:

Playback Error
This client isn't compatible with the media and the server isn't sending a compatible media format.

Server log looks like this:

[2020-09-17 13:18:49.719 +00:00] [INF] [80] MediaBrowser.Api.Playback.MediaInfoService: GetPostedPlaybackInfo profile: DeviceProfile { Name: null, Id: null, Identification: null, FriendlyName: null, Manufacturer: null, ManufacturerUrl: null, ModelName: null, ModelDescription: null, ModelNumber: null, ModelUrl: null, SerialNumber: null, EnableAlbumArtInDidl: False, EnableSingleAlbumArtLimit: False, EnableSingleSubtitleLimit: False, SupportedMediaTypes: "Audio,Photo,Video", UserId: null, AlbumArtPn: null, MaxAlbumArtWidth: 0, MaxAlbumArtHeight: 0, MaxIconWidth: null, MaxIconHeight: null, MaxStreamingBitrate: 120000000, MaxStaticBitrate: 100000000, MusicStreamingTranscodingBitrate: 192000, MaxStaticMusicBitrate: null, SonyAggregationFlags: null, ProtocolInfo: null, TimelineOffsetSeconds: 0, RequiresPlainVideoItems: False, RequiresPlainFolders: False, EnableMSMediaReceiverRegistrar: False, IgnoreTranscodeByteRangeRequests: False, XmlRootAttributes: [], DirectPlayProfiles: [DirectPlayProfile { Container: "webm", AudioCodec: "vorbis,opus", VideoCodec: "vp8,vp9,av1", Type: Video }, DirectPlayProfile { Container: "mp4,m4v", AudioCodec: "mp3,aac,opus,flac,vorbis", VideoCodec: "h264,vp8,vp9,av1", Type: Video }, DirectPlayProfile { Container: "opus", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "mp3", AudioCodec: "mp3", VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "aac", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "m4a,m4b", AudioCodec: "aac", VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "flac", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "webma,webm", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "wav", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "ogg", AudioCodec: null, VideoCodec: null, Type: Audio }], TranscodingProfiles: [TranscodingProfile { Container: "ts", Type: Audio, VideoCodec: null, AudioCodec: "aac", Protocol: "hls", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 1, SegmentLength: 0, BreakOnNonKeyFrames: True }, TranscodingProfile { Container: "aac", Type: Audio, VideoCodec: null, AudioCodec: "aac", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "mp3", Type: Audio, VideoCodec: null, AudioCodec: "mp3", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "opus", Type: Audio, VideoCodec: null, AudioCodec: "opus", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "wav", Type: Audio, VideoCodec: null, AudioCodec: "wav", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "opus", Type: Audio, VideoCodec: null, AudioCodec: "opus", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Static, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "mp3", Type: Audio, VideoCodec: null, AudioCodec: "mp3", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Static, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "aac", Type: Audio, VideoCodec: null, AudioCodec: "aac", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Static, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "wav", Type: Audio, VideoCodec: null, AudioCodec: "wav", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Static, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "ts", Type: Video, VideoCodec: "h264", AudioCodec: "mp3,aac", Protocol: "hls", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 1, SegmentLength: 0, BreakOnNonKeyFrames: True }, TranscodingProfile { Container: "webm", Type: Video, VideoCodec: "vpx", AudioCodec: "vorbis", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "mp4", Type: Video, VideoCodec: "h264", AudioCodec: "mp3,aac,opus,flac,vorbis", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Static, EnableSubtitlesInManifest: False, MaxAudioChannels: null, MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }], ContainerProfiles: [], CodecProfiles: [CodecProfile { Type: VideoAudio, Conditions: [ProfileCondition { Condition: Equals, Property: IsSecondaryAudio, Value: "false", IsRequired: False }], ApplyConditions: [], Codec: "aac", Container: null }, CodecProfile { Type: VideoAudio, Conditions: [ProfileCondition { Condition: Equals, Property: IsSecondaryAudio, Value: "false", IsRequired: False }], ApplyConditions: [], Codec: null, Container: null }, CodecProfile { Type: Video, Conditions: [ProfileCondition { Condition: NotEquals, Property: IsAnamorphic, Value: "true", IsRequired: False }, ProfileCondition { Condition: EqualsAny, Property: VideoProfile, Value: "high|main|baseline|constrained baseline", IsRequired: False }, ProfileCondition { Condition: LessThanEqual, Property: VideoLevel, Value: "51", IsRequired: False }, ProfileCondition { Condition: NotEquals, Property: IsInterlaced, Value: "true", IsRequired: False }], ApplyConditions: [], Codec: "h264", Container: null }], ResponseProfiles: [ResponseProfile { Container: "m4v", AudioCodec: null, VideoCodec: null, Type: Video, OrgPn: null, MimeType: "video/mp4", Conditions: [] }], SubtitleProfiles: [SubtitleProfile { Format: "vtt", Method: External, DidlMode: null, Language: null, Container: null }, SubtitleProfile { Format: "ass", Method: External, DidlMode: null, Language: null, Container: null }, SubtitleProfile { Format: "ssa", Method: External, DidlMode: null, Language: null, Container: null }] }
[2020-09-17 13:18:49.738 +00:00] [INF] [80] MediaBrowser.Api.Playback.MediaInfoService: User policy for "Gerrit". EnablePlaybackRemuxing: True EnableVideoPlaybackTranscoding: True EnableAudioPlaybackTranscoding: True
[2020-09-17 13:18:49.738 +00:00] [INF] [80] MediaBrowser.Api.Playback.MediaInfoService: Profile: "Unknown Profile", Path: "Unknown path", isEligibleForDirectPlay: True, isEligibleForDirectStream: True
[2020-09-17 13:18:49.738 +00:00] [INF] [80] MediaBrowser.Api.Playback.MediaInfoService: Profile: "Unknown Profile", No direct play profiles found for Path: "Unknown path"
[2020-09-17 13:18:49.738 +00:00] [INF] [80] MediaBrowser.Api.Playback.MediaInfoService: RemoteClientBitrateLimit: 5000000, RemoteIp: "192.168.179.54", IsInLocalNetwork: True
[2020-09-17 13:18:49.738 +00:00] [INF] [80] MediaBrowser.Api.Playback.MediaInfoService: Profile: "Unknown Profile", Path: "Unknown path", isEligibleForDirectPlay: True, isEligibleForDirectStream: True
[2020-09-17 13:18:49.738 +00:00] [INF] [80] MediaBrowser.Api.Playback.MediaInfoService: Profile: "Unknown Profile", No direct play profiles found for Path: "Unknown path"
[2020-09-17 13:18:49.739 +00:00] [INF] [80] MediaBrowser.Api.Playback.MediaInfoService: RemoteClientBitrateLimit: 5000000, RemoteIp: "192.168.179.54", IsInLocalNetwork: True
[2020-09-17 13:18:49.739 +00:00] [INF] [80] MediaBrowser.Api.Playback.MediaInfoService: Profile: "Unknown Profile", Path: "Unknown path", isEligibleForDirectPlay: True, isEligibleForDirectStream: True
[2020-09-17 13:18:49.739 +00:00] [INF] [80] MediaBrowser.Api.Playback.MediaInfoService: Profile: "Unknown Profile", No direct play profiles found for Path: "Unknown path"
[2020-09-17 13:18:49.741 +00:00] [INF] [80] Emby.Server.Implementations.LiveTv.LiveTvManager: Opening channel stream from "TVHclient LiveTvService", external channel Id: "1058270576"
[2020-09-17 13:18:49.745 +00:00] [INF] [83] Emby.Server.Implementations.LiveTv.LiveTvManager: Live stream opened after 0.0104ms
[2020-09-17 13:18:49.747 +00:00] [INF] [83] Emby.Server.Implementations.Library.MediaSourceManager: Waiting 3000ms before probing the live stream
[2020-09-17 13:18:50.549 +00:00] [INF] [83] Jellyfin.Plugin.PlaybackReporting.EventMonitorEntryPoint: Processing playback tracker : "TW96aWxsYS81LjAgKExpbnV4OyBBbmRyb2lkIDk7IEdNIDkgUHJvKSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvODAuMC4zOTg3LjE2MiBNb2JpbGUgU2FmYXJpLzUzNy4zNnwxNTg2NDUyNjk4MDMx-575a0587ec8847ffaa76c869a3285169-c36751c9f2af485223307da7b995d9ea"
[2020-09-17 13:18:52.748 +00:00] [INF] [83] MediaBrowser.MediaEncoding.Encoder.MediaEncoder: "/usr/lib/jellyfin-ffmpeg/ffprobe" "-analyzeduration 3000000 -i \"http://192.168.179.12:9981/stream/channelid/1058270576?ticket=77f9814d52844a2140e32ae3e561431506032007\" -threads 0 -v warning -print_format json -show_streams -show_format"
[2020-09-17 13:18:52.837 +00:00] [ERR] [15] Emby.Server.Implementations.Library.MediaSourceManager: Error probing live tv stream
System.Exception: ffprobe failed - streams and format are both null.
   at MediaBrowser.MediaEncoding.Encoder.MediaEncoder.GetMediaInfoInternal(String inputPath, String primaryPath, MediaProtocol protocol, Boolean extractChapters, String probeSizeArgument, Boolean isAudio, Nullable`1 videoType, Boolean forceEnableLogging, CancellationToken cancellationToken)
   at Emby.Server.Implementations.Library.LiveStreamHelper.AddMediaInfoWithProbe(MediaSourceInfo mediaSource, Boolean isAudio, String cacheKey, Boolean addProbeDelay, CancellationToken cancellationToken)
   at Emby.Server.Implementations.Library.MediaSourceManager.OpenLiveStreamInternal(LiveStreamRequest request, CancellationToken cancellationToken)
[2020-09-17 13:18:52.839 +00:00] [INF] [15] Emby.Server.Implementations.Library.MediaSourceManager: Live stream opened: {"Protocol":"Http","Id":"2","Path":"http://192.168.179.12:9981/stream/channelid/1058270576?ticket=77f9814d52844a2140e32ae3e561431506032007","Type":"Default","IsRemote":false,"ReadAtNativeFramerate":false,"IgnoreDts":false,"IgnoreIndex":false,"GenPtsInput":false,"SupportsTranscoding":true,"SupportsDirectStream":true,"SupportsDirectPlay":true,"IsInfiniteStream":true,"RequiresOpening":false,"RequiresClosing":true,"LiveStreamId":"a17c75760a04e99b68cf766e11316e1c_41c95b6de5174f82acbc56fe82d0a2f8_2","RequiresLooping":false,"SupportsProbing":true,"MediaStreams":[{"VideoRange":"SDR","DisplayTitle":"","NalLengthSize":"0","IsInterlaced":true,"BitRate":20000000,"IsDefault":false,"IsForced":false,"Type":"Video","Index":-1,"IsExternal":false,"IsTextSubtitleStream":false,"SupportsExternalStream":false},{"DisplayTitle":"","IsInterlaced":false,"IsDefault":false,"IsForced":false,"Type":"Audio","Index":-1,"IsExternal":false,"IsTextSubtitleStream":false,"SupportsExternalStream":false}],"MediaAttachments":[],"Formats":[],"Bitrate":20000000,"RequiredHttpHeaders":{},"AnalyzeDurationMs":3000}
[2020-09-17 13:18:52.862 +00:00] [INF] [15] MediaBrowser.Api.Playback.MediaInfoService: User policy for "Gerrit". EnablePlaybackRemuxing: True EnableVideoPlaybackTranscoding: True EnableAudioPlaybackTranscoding: True
[2020-09-17 13:18:52.862 +00:00] [INF] [15] MediaBrowser.Api.Playback.MediaInfoService: Profile: "Unknown Profile", Path: "http://192.168.179.12:9981/stream/channelid/1058270576?ticket=77f9814d52844a2140e32ae3e561431506032007", isEligibleForDirectPlay: True, isEligibleForDirectStream: True
[2020-09-17 13:18:52.863 +00:00] [INF] [15] MediaBrowser.Api.Playback.MediaInfoService: Profile: "Unknown Profile", No direct play profiles found for Path: "http://192.168.179.12:9981/stream/channelid/1058270576?ticket=77f9814d52844a2140e32ae3e561431506032007"
[2020-09-17 13:18:52.863 +00:00] [INF] [15] MediaBrowser.Api.Playback.MediaInfoService: RemoteClientBitrateLimit: 5000000, RemoteIp: "192.168.179.54", IsInLocalNetwork: True
[2020-09-17 13:18:52.863 +00:00] [INF] [15] MediaBrowser.Api.Playback.MediaInfoService: Profile: "Unknown Profile", Path: "http://192.168.179.12:9981/stream/channelid/1058270576?ticket=77f9814d52844a2140e32ae3e561431506032007", isEligibleForDirectPlay: True, isEligibleForDirectStream: True
[2020-09-17 13:18:52.863 +00:00] [INF] [15] MediaBrowser.Api.Playback.MediaInfoService: Profile: "Unknown Profile", No direct play profiles found for Path: "http://192.168.179.12:9981/stream/channelid/1058270576?ticket=77f9814d52844a2140e32ae3e561431506032007"
[2020-09-17 13:18:52.863 +00:00] [INF] [15] MediaBrowser.Api.Playback.MediaInfoService: RemoteClientBitrateLimit: 5000000, RemoteIp: "192.168.179.54", IsInLocalNetwork: True
[2020-09-17 13:18:52.863 +00:00] [INF] [15] MediaBrowser.Api.Playback.MediaInfoService: Profile: "Unknown Profile", Path: "http://192.168.179.12:9981/stream/channelid/1058270576?ticket=77f9814d52844a2140e32ae3e561431506032007", isEligibleForDirectPlay: True, isEligibleForDirectStream: True
[2020-09-17 13:18:52.863 +00:00] [INF] [15] MediaBrowser.Api.Playback.MediaInfoService: Profile: "Unknown Profile", No direct play profiles found for Path: "http://192.168.179.12:9981/stream/channelid/1058270576?ticket=77f9814d52844a2140e32ae3e561431506032007"
[2020-09-17 13:18:52.863 +00:00] [WRN] [15] Emby.Server.Implementations.HttpServer.HttpListenerHost: HTTP Response 200 to "192.168.179.54". Time (slow): 0:00:03.1570214. "http://gogel.media/Items/47fb415512c61d5bdd7d6491463933a0/PlaybackInfo?UserId=1e5f12c86c6b4cea84af470159f05b15&StartTimeTicks=0&IsPlayback=true&AutoOpenLiveStream=true&MaxStreamingBitrate=140000000"
[2020-09-17 13:18:53.209 +00:00] [ERR] [15] Emby.Server.Implementations.HttpServer.HttpListenerHost: Error processing request. URL: "http://gogel.media/videos/47fb4155-12c6-1d5b-dd7d-6491463933a0/live.m3u8?DeviceId=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NDsgcnY6ODAuMCkgR2Vja28vMjAxMDAxMDEgRmlyZWZveC84MC4wfDE1OTkxNzc0MTU4NTg1&MediaSourceId=2&VideoCodec=h264&AudioCodec=mp3,aac&AudioStreamIndex=-1&VideoBitrate=139808000&AudioBitrate=192000&PlaySessionId=eaca32b080714d7ba430ac3804878fe9&LiveStreamId=a17c75760a04e99b68cf766e11316e1c_41c95b6de5174f82acbc56fe82d0a2f8_2&TranscodingMaxAudioChannels=2&RequireAvc=false&SegmentContainer=ts&MinSegments=1&BreakOnNonKeyFrames=True&h264-profile=high,main,baseline,constrainedbaseline&h264-level=51&h264-deinterlace=true&TranscodeReasons=ContainerNotSupported,VideoCodecNotSupported,AudioCodecNotSupported"
System.NullReferenceException: Object reference not set to an instance of an object.
   at MediaBrowser.Controller.MediaEncoding.EncodingHelper.GetHardwareAcceleratedVideoDecoder(EncodingJobInfo state, EncodingOptions encodingOptions)
   at MediaBrowser.Controller.MediaEncoding.EncodingHelper.GetInputModifier(EncodingJobInfo state, EncodingOptions encodingOptions)
   at MediaBrowser.Api.Playback.Hls.BaseHlsService.GetCommandLineArguments(String outputPath, EncodingOptions encodingOptions, StreamState state, Boolean isEncoding)
   at MediaBrowser.Api.Playback.BaseStreamingService.StartFfMpeg(StreamState state, String outputPath, CancellationTokenSource cancellationTokenSource, String workingDirectory)
   at MediaBrowser.Api.Playback.Hls.BaseHlsService.ProcessRequestAsync(StreamRequest request, Boolean isLive)
   at Emby.Server.Implementations.Services.ServiceExecGeneral.GetTaskResult(Task task)
   at Emby.Server.Implementations.Services.ServiceHandler.ProcessRequestAsync(HttpListenerHost httpHost, IRequest httpReq, HttpResponse httpRes, ILogger logger, CancellationToken cancellationToken)
   at Emby.Server.Implementations.HttpServer.HttpListenerHost.RequestHandler(IHttpRequest httpReq, String urlString, String host, String localPath, CancellationToken cancellationToken)
[2020-09-17 13:18:53.257 +00:00] [INF] [89] Trakt.ServerMediator: Playback Started
[2020-09-17 13:18:53.257 +00:00] [INF] [89] Jellyfin.Plugin.PlaybackReporting.EventMonitorEntryPoint: Adding playback tracker : TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NDsgcnY6ODAuMCkgR2Vja28vMjAxMDAxMDEgRmlyZWZveC84MC4wfDE1OTkxNzc0MTU4NTg1-1e5f12c86c6b4cea84af470159f05b15-47fb415512c61d5bdd7d6491463933a0
[2020-09-17 13:18:53.257 +00:00] [INF] [89] Jellyfin.Plugin.PlaybackReporting.Data.PlaybackTracker: PlaybackTracker : Adding Start Event : 09/17/2020 13:18:53
[2020-09-17 13:18:53.257 +00:00] [INF] [89] Jellyfin.Plugin.PlaybackReporting.EventMonitorEntryPoint: Creating StartPlaybackTimer Task
[2020-09-17 13:18:53.257 +00:00] [INF] [80] Jellyfin.Plugin.PlaybackReporting.EventMonitorEntryPoint: StartPlaybackTimer : Entered
[2020-09-17 13:18:53.344 +00:00] [INF] [89] MediaBrowser.Api.Playback.MediaInfoService: GetPostedPlaybackInfo profile: DeviceProfile { Name: null, Id: null, Identification: null, FriendlyName: null, Manufacturer: null, ManufacturerUrl: null, ModelName: null, ModelDescription: null, ModelNumber: null, ModelUrl: null, SerialNumber: null, EnableAlbumArtInDidl: False, EnableSingleAlbumArtLimit: False, EnableSingleSubtitleLimit: False, SupportedMediaTypes: "Audio,Photo,Video", UserId: null, AlbumArtPn: null, MaxAlbumArtWidth: 0, MaxAlbumArtHeight: 0, MaxIconWidth: null, MaxIconHeight: null, MaxStreamingBitrate: 120000000, MaxStaticBitrate: 100000000, MusicStreamingTranscodingBitrate: 192000, MaxStaticMusicBitrate: null, SonyAggregationFlags: null, ProtocolInfo: null, TimelineOffsetSeconds: 0, RequiresPlainVideoItems: False, RequiresPlainFolders: False, EnableMSMediaReceiverRegistrar: False, IgnoreTranscodeByteRangeRequests: False, XmlRootAttributes: [], DirectPlayProfiles: [DirectPlayProfile { Container: "webm", AudioCodec: "vorbis,opus", VideoCodec: "vp8,vp9,av1", Type: Video }, DirectPlayProfile { Container: "mp4,m4v", AudioCodec: "mp3,aac,opus,flac,vorbis", VideoCodec: "h264,vp8,vp9,av1", Type: Video }, DirectPlayProfile { Container: "opus", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "mp3", AudioCodec: "mp3", VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "aac", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "m4a,m4b", AudioCodec: "aac", VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "flac", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "webma,webm", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "wav", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "ogg", AudioCodec: null, VideoCodec: null, Type: Audio }], TranscodingProfiles: [TranscodingProfile { Container: "ts", Type: Audio, VideoCodec: null, AudioCodec: "aac", Protocol: "hls", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 1, SegmentLength: 0, BreakOnNonKeyFrames: True }, TranscodingProfile { Container: "aac", Type: Audio, VideoCodec: null, AudioCodec: "aac", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "mp3", Type: Audio, VideoCodec: null, AudioCodec: "mp3", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "opus", Type: Audio, VideoCodec: null, AudioCodec: "opus", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "wav", Type: Audio, VideoCodec: null, AudioCodec: "wav", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "opus", Type: Audio, VideoCodec: null, AudioCodec: "opus", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Static, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "mp3", Type: Audio, VideoCodec: null, AudioCodec: "mp3", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Static, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "aac", Type: Audio, VideoCodec: null, AudioCodec: "aac", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Static, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "wav", Type: Audio, VideoCodec: null, AudioCodec: "wav", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Static, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "ts", Type: Video, VideoCodec: "h264", AudioCodec: "mp3,aac", Protocol: "hls", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 1, SegmentLength: 0, BreakOnNonKeyFrames: True }, TranscodingProfile { Container: "webm", Type: Video, VideoCodec: "vpx", AudioCodec: "vorbis", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "mp4", Type: Video, VideoCodec: "h264", AudioCodec: "mp3,aac,opus,flac,vorbis", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Static, EnableSubtitlesInManifest: False, MaxAudioChannels: null, MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }], ContainerProfiles: [], CodecProfiles: [CodecProfile { Type: VideoAudio, Conditions: [ProfileCondition { Condition: Equals, Property: IsSecondaryAudio, Value: "false", IsRequired: False }], ApplyConditions: [], Codec: "aac", Container: null }, CodecProfile { Type: VideoAudio, Conditions: [ProfileCondition { Condition: Equals, Property: IsSecondaryAudio, Value: "false", IsRequired: False }], ApplyConditions: [], Codec: null, Container: null }, CodecProfile { Type: Video, Conditions: [ProfileCondition { Condition: NotEquals, Property: IsAnamorphic, Value: "true", IsRequired: False }, ProfileCondition { Condition: EqualsAny, Property: VideoProfile, Value: "high|main|baseline|constrained baseline", IsRequired: False }, ProfileCondition { Condition: LessThanEqual, Property: VideoLevel, Value: "51", IsRequired: False }, ProfileCondition { Condition: NotEquals, Property: IsInterlaced, Value: "true", IsRequired: False }], ApplyConditions: [], Codec: "h264", Container: null }], ResponseProfiles: [ResponseProfile { Container: "m4v", AudioCodec: null, VideoCodec: null, Type: Video, OrgPn: null, MimeType: "video/mp4", Conditions: [] }], SubtitleProfiles: [SubtitleProfile { Format: "vtt", Method: External, DidlMode: null, Language: null, Container: null }] }
[2020-09-17 13:18:53.358 +00:00] [INF] [89] MediaBrowser.Api.Playback.MediaInfoService: User policy for "Gerrit". EnablePlaybackRemuxing: True EnableVideoPlaybackTranscoding: True EnableAudioPlaybackTranscoding: True
[2020-09-17 13:18:53.358 +00:00] [INF] [89] MediaBrowser.Api.Playback.MediaInfoService: RemoteClientBitrateLimit: 5000000, RemoteIp: "192.168.179.54", IsInLocalNetwork: True
[2020-09-17 13:18:53.358 +00:00] [INF] [89] MediaBrowser.Api.Playback.MediaInfoService: Profile: "Unknown Profile", Path: "http://192.168.179.12:9981/stream/channelid/1058270576?ticket=77f9814d52844a2140e32ae3e561431506032007", isEligibleForDirectPlay: True, isEligibleForDirectStream: True
[2020-09-17 13:18:53.358 +00:00] [INF] [89] MediaBrowser.Api.Playback.MediaInfoService: Profile: "Unknown Profile", No direct play profiles found for Path: "http://192.168.179.12:9981/stream/channelid/1058270576?ticket=77f9814d52844a2140e32ae3e561431506032007"
[2020-09-17 13:18:53.420 +00:00] [ERR] [80] Emby.Server.Implementations.HttpServer.HttpListenerHost: Could not find handler for "/LiveStreams/MediaInfo"
[2020-09-17 13:18:53.421 +00:00] [ERR] [80] Emby.Server.Implementations.HttpServer.HttpListenerHost: Error processing request: "Unable to find the specified file". URL: "http://gogel.media/LiveStreams/MediaInfo"
[2020-09-17 13:18:53.436 +00:00] [ERR] [53] Emby.Server.Implementations.HttpServer.HttpListenerHost: Error processing request. URL: "http://gogel.media/videos/47fb4155-12c6-1d5b-dd7d-6491463933a0/live.m3u8?DeviceId=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NDsgcnY6ODAuMCkgR2Vja28vMjAxMDAxMDEgRmlyZWZveC84MC4wfDE1OTkxNzc0MTU4NTg1&MediaSourceId=2&VideoCodec=h264&AudioCodec=mp3,aac&AudioStreamIndex=-1&VideoBitrate=139808000&AudioBitrate=192000&PlaySessionId=64f87b722d6246c794319c9c43fb6060&LiveStreamId=a17c75760a04e99b68cf766e11316e1c_41c95b6de5174f82acbc56fe82d0a2f8_2&TranscodingMaxAudioChannels=2&RequireAvc=false&SegmentContainer=ts&MinSegments=1&BreakOnNonKeyFrames=True&h264-profile=high,main,baseline,constrainedbaseline&h264-level=51&h264-deinterlace=true&TranscodeReasons=ContainerNotSupported,VideoCodecNotSupported,AudioCodecNotSupported&allowVideoStreamCopy=false"
System.NullReferenceException: Object reference not set to an instance of an object.
   at MediaBrowser.Controller.MediaEncoding.EncodingHelper.GetHardwareAcceleratedVideoDecoder(EncodingJobInfo state, EncodingOptions encodingOptions)
   at MediaBrowser.Controller.MediaEncoding.EncodingHelper.GetInputModifier(EncodingJobInfo state, EncodingOptions encodingOptions)
   at MediaBrowser.Api.Playback.Hls.BaseHlsService.GetCommandLineArguments(String outputPath, EncodingOptions encodingOptions, StreamState state, Boolean isEncoding)
   at MediaBrowser.Api.Playback.BaseStreamingService.StartFfMpeg(StreamState state, String outputPath, CancellationTokenSource cancellationTokenSource, String workingDirectory)
   at MediaBrowser.Api.Playback.Hls.BaseHlsService.ProcessRequestAsync(StreamRequest request, Boolean isLive)
   at Emby.Server.Implementations.Services.ServiceExecGeneral.GetTaskResult(Task task)
   at Emby.Server.Implementations.Services.ServiceHandler.ProcessRequestAsync(HttpListenerHost httpHost, IRequest httpReq, HttpResponse httpRes, ILogger logger, CancellationToken cancellationToken)
   at Emby.Server.Implementations.HttpServer.HttpListenerHost.RequestHandler(IHttpRequest httpReq, String urlString, String host, String localPath, CancellationToken cancellationToken)
[2020-09-17 13:18:53.445 +00:00] [INF] [89] Jellyfin.Plugin.PlaybackReporting.EventMonitorEntryPoint: Processing playback tracker : "TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NDsgcnY6ODAuMCkgR2Vja28vMjAxMDAxMDEgRmlyZWZveC84MC4wfDE1OTkxNzc0MTU4NTg1-1e5f12c86c6b4cea84af470159f05b15-47fb415512c61d5bdd7d6491463933a0"
[2020-09-17 13:18:53.455 +00:00] [INF] [41] MediaBrowser.Api.Playback.MediaInfoService: GetPostedPlaybackInfo profile: DeviceProfile { Name: null, Id: null, Identification: null, FriendlyName: null, Manufacturer: null, ManufacturerUrl: null, ModelName: null, ModelDescription: null, ModelNumber: null, ModelUrl: null, SerialNumber: null, EnableAlbumArtInDidl: False, EnableSingleAlbumArtLimit: False, EnableSingleSubtitleLimit: False, SupportedMediaTypes: "Audio,Photo,Video", UserId: null, AlbumArtPn: null, MaxAlbumArtWidth: 0, MaxAlbumArtHeight: 0, MaxIconWidth: null, MaxIconHeight: null, MaxStreamingBitrate: 120000000, MaxStaticBitrate: 100000000, MusicStreamingTranscodingBitrate: 192000, MaxStaticMusicBitrate: null, SonyAggregationFlags: null, ProtocolInfo: null, TimelineOffsetSeconds: 0, RequiresPlainVideoItems: False, RequiresPlainFolders: False, EnableMSMediaReceiverRegistrar: False, IgnoreTranscodeByteRangeRequests: False, XmlRootAttributes: [], DirectPlayProfiles: [DirectPlayProfile { Container: "webm", AudioCodec: "vorbis,opus", VideoCodec: "vp8,vp9,av1", Type: Video }, DirectPlayProfile { Container: "mp4,m4v", AudioCodec: "mp3,aac,opus,flac,vorbis", VideoCodec: "h264,vp8,vp9,av1", Type: Video }, DirectPlayProfile { Container: "opus", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "mp3", AudioCodec: "mp3", VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "aac", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "m4a,m4b", AudioCodec: "aac", VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "flac", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "webma,webm", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "wav", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "ogg", AudioCodec: null, VideoCodec: null, Type: Audio }], TranscodingProfiles: [TranscodingProfile { Container: "ts", Type: Audio, VideoCodec: null, AudioCodec: "aac", Protocol: "hls", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 1, SegmentLength: 0, BreakOnNonKeyFrames: True }, TranscodingProfile { Container: "aac", Type: Audio, VideoCodec: null, AudioCodec: "aac", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "mp3", Type: Audio, VideoCodec: null, AudioCodec: "mp3", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "opus", Type: Audio, VideoCodec: null, AudioCodec: "opus", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "wav", Type: Audio, VideoCodec: null, AudioCodec: "wav", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "opus", Type: Audio, VideoCodec: null, AudioCodec: "opus", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Static, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "mp3", Type: Audio, VideoCodec: null, AudioCodec: "mp3", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Static, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "aac", Type: Audio, VideoCodec: null, AudioCodec: "aac", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Static, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "wav", Type: Audio, VideoCodec: null, AudioCodec: "wav", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Static, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "ts", Type: Video, VideoCodec: "h264", AudioCodec: "mp3,aac", Protocol: "hls", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 1, SegmentLength: 0, BreakOnNonKeyFrames: True }, TranscodingProfile { Container: "webm", Type: Video, VideoCodec: "vpx", AudioCodec: "vorbis", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "mp4", Type: Video, VideoCodec: "h264", AudioCodec: "mp3,aac,opus,flac,vorbis", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Static, EnableSubtitlesInManifest: False, MaxAudioChannels: null, MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }], ContainerProfiles: [], CodecProfiles: [CodecProfile { Type: VideoAudio, Conditions: [ProfileCondition { Condition: Equals, Property: IsSecondaryAudio, Value: "false", IsRequired: False }], ApplyConditions: [], Codec: "aac", Container: null }, CodecProfile { Type: VideoAudio, Conditions: [ProfileCondition { Condition: Equals, Property: IsSecondaryAudio, Value: "false", IsRequired: False }], ApplyConditions: [], Codec: null, Container: null }, CodecProfile { Type: Video, Conditions: [ProfileCondition { Condition: NotEquals, Property: IsAnamorphic, Value: "true", IsRequired: False }, ProfileCondition { Condition: EqualsAny, Property: VideoProfile, Value: "high|main|baseline|constrained baseline", IsRequired: False }, ProfileCondition { Condition: LessThanEqual, Property: VideoLevel, Value: "51", IsRequired: False }, ProfileCondition { Condition: NotEquals, Property: IsInterlaced, Value: "true", IsRequired: False }], ApplyConditions: [], Codec: "h264", Container: null }], ResponseProfiles: [ResponseProfile { Container: "m4v", AudioCodec: null, VideoCodec: null, Type: Video, OrgPn: null, MimeType: "video/mp4", Conditions: [] }], SubtitleProfiles: [SubtitleProfile { Format: "vtt", Method: External, DidlMode: null, Language: null, Container: null }] }
[2020-09-17 13:18:53.480 +00:00] [INF] [41] MediaBrowser.Api.Playback.MediaInfoService: User policy for "Gerrit". EnablePlaybackRemuxing: True EnableVideoPlaybackTranscoding: True EnableAudioPlaybackTranscoding: True
[2020-09-17 13:18:53.480 +00:00] [INF] [41] MediaBrowser.Api.Playback.MediaInfoService: RemoteClientBitrateLimit: 5000000, RemoteIp: "192.168.179.54", IsInLocalNetwork: True
[2020-09-17 13:18:53.480 +00:00] [INF] [41] MediaBrowser.Api.Playback.MediaInfoService: Profile: "Unknown Profile", Path: "http://192.168.179.12:9981/stream/channelid/1058270576?ticket=77f9814d52844a2140e32ae3e561431506032007", isEligibleForDirectPlay: True, isEligibleForDirectStream: True
[2020-09-17 13:18:53.480 +00:00] [INF] [41] MediaBrowser.Api.Playback.MediaInfoService: Profile: "Unknown Profile", No direct play profiles found for Path: "http://192.168.179.12:9981/stream/channelid/1058270576?ticket=77f9814d52844a2140e32ae3e561431506032007"
[2020-09-17 13:18:53.540 +00:00] [ERR] [53] Emby.Server.Implementations.HttpServer.HttpListenerHost: Error processing request. URL: "http://gogel.media/videos/47fb4155-12c6-1d5b-dd7d-6491463933a0/live.m3u8?DeviceId=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NDsgcnY6ODAuMCkgR2Vja28vMjAxMDAxMDEgRmlyZWZveC84MC4wfDE1OTkxNzc0MTU4NTg1&MediaSourceId=2&VideoCodec=h264&AudioCodec=mp3,aac&AudioStreamIndex=-1&VideoBitrate=139808000&AudioBitrate=192000&PlaySessionId=ea661212ff9a4aa9aebf61054ad647d8&LiveStreamId=a17c75760a04e99b68cf766e11316e1c_41c95b6de5174f82acbc56fe82d0a2f8_2&TranscodingMaxAudioChannels=2&RequireAvc=false&SegmentContainer=ts&MinSegments=1&BreakOnNonKeyFrames=True&h264-profile=high,main,baseline,constrainedbaseline&h264-level=51&h264-deinterlace=true&TranscodeReasons=ContainerNotSupported,VideoCodecNotSupported,AudioCodecNotSupported&allowVideoStreamCopy=false&allowAudioStreamCopy=false,false"
System.NullReferenceException: Object reference not set to an instance of an object.
   at MediaBrowser.Controller.MediaEncoding.EncodingHelper.GetHardwareAcceleratedVideoDecoder(EncodingJobInfo state, EncodingOptions encodingOptions)
   at MediaBrowser.Controller.MediaEncoding.EncodingHelper.GetInputModifier(EncodingJobInfo state, EncodingOptions encodingOptions)
   at MediaBrowser.Api.Playback.Hls.BaseHlsService.GetCommandLineArguments(String outputPath, EncodingOptions encodingOptions, StreamState state, Boolean isEncoding)
   at MediaBrowser.Api.Playback.BaseStreamingService.StartFfMpeg(StreamState state, String outputPath, CancellationTokenSource cancellationTokenSource, String workingDirectory)
   at MediaBrowser.Api.Playback.Hls.BaseHlsService.ProcessRequestAsync(StreamRequest request, Boolean isLive)
   at Emby.Server.Implementations.Services.ServiceExecGeneral.GetTaskResult(Task task)
   at Emby.Server.Implementations.Services.ServiceHandler.ProcessRequestAsync(HttpListenerHost httpHost, IRequest httpReq, HttpResponse httpRes, ILogger logger, CancellationToken cancellationToken)
   at Emby.Server.Implementations.HttpServer.HttpListenerHost.RequestHandler(IHttpRequest httpReq, String urlString, String host, String localPath, CancellationToken cancellationToken)
[2020-09-17 13:18:53.555 +00:00] [INF] [53] Emby.Server.Implementations.Session.SessionManager: Playback stopped reported by app "Jellyfin Web" "10.6.4" playing "Sky Sport 1 HD". Stopped at "0" ms
[2020-09-17 13:18:53.566 +00:00] [INF] [53] Emby.Server.Implementations.Library.MediaSourceManager: Live stream null consumer count is now 0
[2020-09-17 13:18:53.567 +00:00] [INF] [53] Emby.Server.Implementations.Library.MediaSourceManager: Closing live stream "a17c75760a04e99b68cf766e11316e1c_41c95b6de5174f82acbc56fe82d0a2f8_2"
[2020-09-17 13:18:53.567 +00:00] [INF] [41] Emby.Server.Implementations.Library.MediaSourceManager: Live stream "a17c75760a04e99b68cf766e11316e1c_41c95b6de5174f82acbc56fe82d0a2f8_2" closed successfully
[2020-09-17 13:18:53.568 +00:00] [INF] [53] Trakt.ServerMediator: Playback Stopped
[2020-09-17 13:18:53.568 +00:00] [INF] [53] Jellyfin.Plugin.PlaybackReporting.EventMonitorEntryPoint: Playback stop tracker found, processing stop : "TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NDsgcnY6ODAuMCkgR2Vja28vMjAxMDAxMDEgRmlyZWZveC84MC4wfDE1OTkxNzc0MTU4NTg1-1e5f12c86c6b4cea84af470159f05b15-47fb415512c61d5bdd7d6491463933a0"
[2020-09-17 13:18:53.568 +00:00] [INF] [53] Jellyfin.Plugin.PlaybackReporting.Data.PlaybackTracker: PlaybackTracker : Adding Stop Event : 09/17/2020 13:18:53
[2020-09-17 13:18:53.568 +00:00] [INF] [53] Jellyfin.Plugin.PlaybackReporting.EventMonitorEntryPoint: Playback stop but TrackedPlaybackInfo not found! not storing activity in DB
[2020-09-17 13:19:11.525 +00:00] [INF] [80] Jellyfin.Plugin.PlaybackReporting.EventMonitorEntryPoint: Processing playback tracker : "TW96aWxsYS81LjAgKExpbnV4OyBBbmRyb2lkIDk7IEdNIDkgUHJvKSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvODAuMC4zOTg3LjE2MiBNb2JpbGUgU2FmYXJpLzUzNy4zNnwxNTg2NDUyNjk4MDMx-575a0587ec8847ffaa76c869a3285169-c36751c9f2af485223307da7b995d9ea"
[2020-09-17 13:19:13.258 +00:00] [INF] [80] Jellyfin.Plugin.PlaybackReporting.EventMonitorEntryPoint: session.RemoteEndPoint : "192.168.179.54"
[2020-09-17 13:19:13.258 +00:00] [INF] [80] Jellyfin.Plugin.PlaybackReporting.EventMonitorEntryPoint: StartPlaybackTimer : event_playing_id     = "47fb415512c61d5bdd7d6491463933a0"
[2020-09-17 13:19:13.258 +00:00] [INF] [80] Jellyfin.Plugin.PlaybackReporting.EventMonitorEntryPoint: StartPlaybackTimer : event_user_id        = "1e5f12c86c6b4cea84af470159f05b15"
[2020-09-17 13:19:13.258 +00:00] [INF] [80] Jellyfin.Plugin.PlaybackReporting.EventMonitorEntryPoint: StartPlaybackTimer : event_user_id_int    = 1
[2020-09-17 13:19:13.258 +00:00] [INF] [80] Jellyfin.Plugin.PlaybackReporting.EventMonitorEntryPoint: StartPlaybackTimer : session_playing_id   = ""
[2020-09-17 13:19:13.258 +00:00] [INF] [80] Jellyfin.Plugin.PlaybackReporting.EventMonitorEntryPoint: StartPlaybackTimer : session_user_id      = "1e5f12c86c6b4cea84af470159f05b15"
[2020-09-17 13:19:13.258 +00:00] [INF] [80] Jellyfin.Plugin.PlaybackReporting.EventMonitorEntryPoint: StartPlaybackTimer : play_method          = "na"
[2020-09-17 13:19:13.258 +00:00] [INF] [80] Jellyfin.Plugin.PlaybackReporting.EventMonitorEntryPoint: StartPlaybackTimer : e.ClientName         = "Jellyfin Web"
[2020-09-17 13:19:13.258 +00:00] [INF] [80] Jellyfin.Plugin.PlaybackReporting.EventMonitorEntryPoint: StartPlaybackTimer : e.DeviceName         = "Firefox"
[2020-09-17 13:19:13.258 +00:00] [INF] [80] Jellyfin.Plugin.PlaybackReporting.EventMonitorEntryPoint: StartPlaybackTimer : ItemName             = "Sky Sport 1 HD"
[2020-09-17 13:19:13.258 +00:00] [INF] [80] Jellyfin.Plugin.PlaybackReporting.EventMonitorEntryPoint: StartPlaybackTimer : ItemId               = "47fb415512c61d5bdd7d6491463933a0"
[2020-09-17 13:19:13.258 +00:00] [INF] [80] Jellyfin.Plugin.PlaybackReporting.EventMonitorEntryPoint: StartPlaybackTimer : ItemType             = "TvChannel"
[2020-09-17 13:19:13.258 +00:00] [INF] [80] Jellyfin.Plugin.PlaybackReporting.EventMonitorEntryPoint: StartPlaybackTimer : Details do not match for play item
[2020-09-17 13:19:13.258 +00:00] [INF] [80] Jellyfin.Plugin.PlaybackReporting.EventMonitorEntryPoint: StartPlaybackTimer : Exited
[2020-09-17 13:19:18.345 +00:00] [INF] [80] Jellyfin.Plugin.PlaybackReporting.EventMonitorEntryPoint: Processing playback tracker : "TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4xKSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvNzguMC4zOTA0Ljk3IFNhZmFyaS81MzcuMzZ8MTU3MzU0MzEwMjM0NQ11-575a0587ec8847ffaa76c869a3285169-607601c31b4b06bfedba3784c792e212"
[2020-09-17 13:19:31.532 +00:00] [INF] [80] Jellyfin.Plugin.PlaybackReporting.EventMonitorEntryPoint: Processing playback tracker : "TW96aWxsYS81LjAgKExpbnV4OyBBbmRyb2lkIDk7IEdNIDkgUHJvKSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvODAuMC4zOTg3LjE2MiBNb2JpbGUgU2FmYXJpLzUzNy4zNnwxNTg2NDUyNjk4MDMx-575a0587ec8847ffaa76c869a3285169-c36751c9f2af485223307da7b995d9ea"
[2020-09-17 13:19:38.353 +00:00] [INF] [43] Jellyfin.Plugin.PlaybackReporting.EventMonitorEntryPoint: Processing playback tracker : "TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4xKSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvNzguMC4zOTA0Ljk3IFNhZmFyaS81MzcuMzZ8MTU3MzU0MzEwMjM0NQ11-575a0587ec8847ffaa76c869a3285169-607601c31b4b06bfedba3784c792e212"

It's throwing a null pointer exception at GetHardwareAcceleratedVideoDecoder. I don't have any hardware acceleration enabled. This happens with interlaced and non-interlaced streams.

I've already reinstalled the plugin and cleared all tv related data.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.