2024-12-26, 10:08 PM
I'm not able to watch recordings which are in progress for various clients (Chrome, Firefox, Mac OS Jellyfin Player). As soon as I stop the recording and play the same file it works fine. The response when playing a recording which is in progress:
GET
http://192.168.2.120:8096/Users/5eda9e28...aa33b050f9
->
And:
GET /Items/c1f55f5ddcb92613dfe9dcaa33b050f9/PlaybackInfo
->
{"MediaSources":[],"ErrorCode":"NoCompatibleStream"}
When the recording is ended:
GET /Items/c1f55f5ddcb92613dfe9dcaa33b050f9/PlaybackInfo
There's not much in the jellyfin logs when the playback fails. Even with debug turned on. It simply triggers the probe command:
One of the big differences Im seeing is "Type". Its "Recording" while its in recording and changes to Movie/Default when done. Next to that, the type of the MediaSource in the first JSON is "Placeholder", while its "Video" in the second which does play correctly. MediaStreams is completely empty in the first JSON.
Any idea why its impossible to play recordings in progress?
GET
http://192.168.2.120:8096/Users/5eda9e28...aa33b050f9
->
Code:
{
"Name":"This is Ultra HD",
"ServerId":"09a3036af1b040cea3d2bce7dd7c1ae2",
"Id":"c1f55f5ddcb92613dfe9dcaa33b050f9",
"Etag":"c0889e7e8d71c58789be127071b9ea71",
"DateCreated":"2024-12-26T22:53:02.0000000Z",
"CanDelete":false,
"CanDownload":false,
"SortName":"this is ultra hd",
"ExternalUrls":[
],
"MediaSources":[
{
"Protocol":"File",
"Id":"c1f55f5ddcb92613dfe9dcaa33b050f9",
"Path":"/media/External/Recordings/This is Ultra HD/This is Ultra HD 2024_12_26_22_30_00.ts",
"Type":"Placeholder",
"Container":"ts",
"Name":"This is Ultra HD 2024_12_26_22_30_00",
"IsRemote":false,
"ETag":"917511c68bccdef50bbce7cd624b9123",
"ReadAtNativeFramerate":false,
"IgnoreDts":false,
"IgnoreIndex":false,
"GenPtsInput":false,
"SupportsTranscoding":true,
"SupportsDirectStream":true,
"SupportsDirectPlay":true,
"IsInfiniteStream":false,
"UseMostCompatibleTranscodingProfile":false,
"RequiresOpening":false,
"RequiresClosing":false,
"RequiresLooping":false,
"SupportsProbing":true,
"VideoType":"VideoFile",
"MediaStreams":[
],
"MediaAttachments":[
],
"Formats":[
],
"RequiredHttpHeaders":{
},
"TranscodingSubProtocol":"http",
"HasSegments":false
}
],
"ProductionLocations":[
],
"Path":"/media/External/Recordings/This is Ultra HD/This is Ultra HD 2024_12_26_22_30_00.ts",
"EnableMediaSourceDisplay":true,
"ChannelId":null,
"ChannelName":"Sky Sports UHD 2",
"Overview":"Bringing the best in entertainment.",
"Taglines":[
],
"Genres":[
],
"PlayAccess":"Full",
"ProductionYear":2024,
"RemoteTrailers":[
],
"ProviderIds":{
},
"IsFolder":false,
"ParentId":"f665b1e5522f5d0304df890efd94f1c5",
"Type":"Recording",
"People":[
],
"Studios":[
],
"GenreItems":[
],
"LocalTrailerCount":0,
"UserData":{
"PlaybackPositionTicks":0,
"PlayCount":0,
"IsFavorite":false,
"Played":false,
"Key":"c1f55f5d-dcb9-2613-dfe9-dcaa33b050f9",
"ItemId":"00000000000000000000000000000000"
},
"SpecialFeatureCount":0,
"DisplayPreferencesId":"dbf7709c41faaa746463d67978eb863d",
"Status":"InProgress",
"Tags":[
],
"MediaStreams":[
],
"VideoType":"VideoFile",
"ImageTags":{
},
"BackdropImageTags":[
],
"ImageBlurHashes":{
},
"Chapters":[
],
"Trickplay":{
},
"LocationType":"FileSystem",
"MediaType":"Video",
"EndDate":"2024-12-27T03:30:00.0000000Z",
"LockedFields":[
],
"LockData":true,
"ChannelPrimaryImageTag":"d138dde4f090f75a3aeae9a09d420542",
"StartDate":"2024-12-26T21:30:00.0000000Z",
"CompletionPercentage":0,
"IsRepeat":false,
"IsMovie":false,
"IsSports":false,
"IsSeries":false,
"IsLive":false,
"IsNews":false,
"IsKids":false,
"IsPremiere":false,
"TimerId":"889660ed2c6f4ecad99537cbec0d6275"
}
And:
GET /Items/c1f55f5ddcb92613dfe9dcaa33b050f9/PlaybackInfo
->
{"MediaSources":[],"ErrorCode":"NoCompatibleStream"}
When the recording is ended:
GET /Items/c1f55f5ddcb92613dfe9dcaa33b050f9/PlaybackInfo
Code:
{
"MediaSources":[
{
"Protocol":"File",
"Id":"6d5ece90779a10cc832bbdbe29066e9a",
"Path":"/media/External/Recordings/This is Ultra HD/This is Ultra HD 2024_12_26_16_30_00.ts",
"Type":"Default",
"Container":"ts",
"Size":3665696,
"Name":"This is Ultra HD 2024_12_26_16_30_00",
"IsRemote":false,
"ETag":"f34e0cf6b59a4ee9f9f2d72bb589d77b",
"RunTimeTicks":208770000,
"ReadAtNativeFramerate":false,
"IgnoreDts":false,
"IgnoreIndex":false,
"GenPtsInput":false,
"SupportsTranscoding":true,
"SupportsDirectStream":false,
"SupportsDirectPlay":false,
"IsInfiniteStream":false,
"UseMostCompatibleTranscodingProfile":false,
"RequiresOpening":false,
"RequiresClosing":false,
"RequiresLooping":false,
"SupportsProbing":true,
"VideoType":"VideoFile",
"MediaStreams":[
{
"Codec":"hevc",
"ColorSpace":"bt2020nc",
"ColorTransfer":"smpte2084",
"ColorPrimaries":"bt2020",
"TimeBase":"1/90000",
"VideoRange":"HDR",
"VideoRangeType":"HDR10",
"AudioSpatialFormat":"None",
"DisplayTitle":"4K HEVC HDR",
"IsInterlaced":false,
"IsAVC":false,
"BitRate":1404683,
"BitDepth":10,
"RefFrames":1,
"IsDefault":false,
"IsForced":false,
"IsHearingImpaired":false,
"Height":2160,
"Width":3840,
"AverageFrameRate":50,
"RealFrameRate":50,
"ReferenceFrameRate":50,
"Profile":"Main 10",
"Type":"Video",
"AspectRatio":"16:9",
"Index":0,
"IsExternal":false,
"IsTextSubtitleStream":false,
"SupportsExternalStream":false,
"PixelFormat":"yuv420p10le",
"Level":153,
"IsAnamorphic":false
},
{
"Codec":"aac",
"TimeBase":"1/90000",
"VideoRange":"Unknown",
"VideoRangeType":"Unknown",
"AudioSpatialFormat":"None",
"LocalizedDefault":"Default",
"LocalizedExternal":"External",
"DisplayTitle":"AAC - Stereo",
"IsInterlaced":false,
"IsAVC":false,
"ChannelLayout":"stereo",
"BitRate":128038,
"Channels":2,
"SampleRate":48000,
"IsDefault":false,
"IsForced":false,
"IsHearingImpaired":false,
"Profile":"LC",
"Type":"Audio",
"Index":1,
"IsExternal":false,
"IsTextSubtitleStream":false,
"SupportsExternalStream":false,
"Level":0
}
],
"MediaAttachments":[
],
"Formats":[
],
"Bitrate":1532721,
"Timestamp":"None",
"RequiredHttpHeaders":{
},
"TranscodingUrl":"/videos/6d5ece90-779a-10cc-832b-bdbe29066e9a/master.m3u8?DeviceId=TW96aWxsYS81LjAgKE1hY2ludG9zaDsgSW50ZWwgTWFjIE9TIFggMTAuMTU7IHJ2OjEzMy4wKSBHZWNrby8yMDEwMDEwMSBGaXJlZm94LzEzMy4wfDE3MzUyNDE1Njk5NTM1\u0026MediaSourceId=6d5ece90779a10cc832bbdbe29066e9a\u0026VideoCodec=av1,h264,vp9\u0026AudioCodec=aac\u0026AudioStreamIndex=1\u0026VideoBitrate=289848535\u0026AudioBitrate=128038\u0026AudioSampleRate=48000\u0026MaxFramerate=50\u0026PlaySessionId=870bc9a8f72344ff8333a595ca43b280\u0026api_key=a3fdfdeb01fd434894d77720d11e6c2c\u0026TranscodingMaxAudioChannels=2\u0026RequireAvc=false\u0026EnableAudioVbrEncoding=true\u0026Tag=f34e0cf6b59a4ee9f9f2d72bb589d77b\u0026SegmentContainer=mp4\u0026MinSegments=2\u0026BreakOnNonKeyFrames=True\u0026hevc-level=153\u0026hevc-videobitdepth=10\u0026hevc-profile=main10\u0026hevc-audiochannels=2\u0026aac-profile=lc\u0026av1-profile=main\u0026av1-rangetype=SDR,HDR10,HLG\u0026av1-level=19\u0026vp9-rangetype=SDR,HDR10,HLG\u0026h264-profile=high,main,baseline,constrainedbaseline\u0026h264-rangetype=SDR\u0026h264-level=52\u0026h264-deinterlace=true\u0026TranscodeReasons=ContainerNotSupported,%20VideoCodecNotSupported,%20AudioCodecNotSupported\u0026allowVideoStreamCopy=false",
"TranscodingSubProtocol":"hls",
"TranscodingContainer":"mp4",
"DefaultAudioStreamIndex":1,
"HasSegments":false
}
],
"PlaySessionId":"870bc9a8f72344ff8333a595ca43b280"
}
There's not much in the jellyfin logs when the playback fails. Even with debug turned on. It simply triggers the probe command:
Code:
[2024-12-26 23:00:38.160 +01:00] [INF] Starting "/usr/lib/jellyfin-ffmpeg/ffprobe" with args "-analyzeduration 3000000 -probesize 1G -i file:\"/media/External/Recordings/This is Ultra HD/This is Ultra HD 2024_12_26_22_30_00.ts\" -threads 0 -v warning -print_format json -show_streams -show_format"
[2024-12-26 23:00:38.218 +01:00] [INF] Live tv media info probe took "0.0582586" seconds
[2024-12-26 23:00:38.218 +01:00] [DBG] MediaSources: [MediaSourceInfo { Protocol: File, Id: "640c2c27821e4fffba7dabde61d03363", Path: "/media/External/Recordings/This is Ultra HD/This is Ultra HD 2024_12_26_22_30_00.ts", EncoderPath: "http://192.168.2.120:8096/LiveTv/LiveRecordings/640c2c27821e4fffba7dabde61d03363/stream", EncoderProtocol: Http, Type: Default, Container: "ts", Size: 82493440, Name: null, IsRemote: False, ETag: null, RunTimeTicks: null, ReadAtNativeFramerate: False, IgnoreDts: True, IgnoreIndex: True, GenPtsInput: False, SupportsTranscoding: True, SupportsDirectStream: True, SupportsDirectPlay: False, IsInfiniteStream: True, UseMostCompatibleTranscodingProfile: False, RequiresOpening: False, OpenToken: null, RequiresClosing: False, LiveStreamId: null, BufferMs: 0, RequiresLooping: False, SupportsProbing: True, VideoType: null, IsoType: null, Video3DFormat: null, MediaStreams: [MediaStream { Codec: "hevc", CodecTag: null, Language: null, ColorRange: "tv", ColorSpace: "bt2020nc", ColorTransfer: "smpte2084", ColorPrimaries: "bt2020", DvVersionMajor: null, DvVersionMinor: null, DvProfile: null, DvLevel: null, RpuPresentFlag: null, ElPresentFlag: null, BlPresentFlag: null, DvBlSignalCompatibilityId: null, Rotation: null, Comment: null, TimeBase: "1/90000", CodecTimeBase: null, Title: null, VideoRange: HDR, VideoRangeType: HDR10, VideoDoViTitle: null, AudioSpatialFormat: None, LocalizedUndefined: null, LocalizedDefault: null, LocalizedForced: null, LocalizedExternal: null, LocalizedHearingImpaired: null, DisplayTitle: "4K HEVC HDR", NalLengthSize: null, IsInterlaced: False, IsAVC: null, ChannelLayout: null, BitRate: 1438932, BitDepth: 10, RefFrames: 1, PacketLength: null, Channels: null, SampleRate: null, IsDefault: False, IsForced: False, IsHearingImpaired: False, Height: 2160, Width: 3840, AverageFrameRate: 50, RealFrameRate: 50, ReferenceFrameRate: 50, Profile: "Main 10", Type: Video, AspectRatio: "16:9", Index: 0, Score: null, IsExternal: False, DeliveryMethod: null, DeliveryUrl: null, IsExternalUrl: null, IsTextSubtitleStream: False, IsPgsSubtitleStream: False, IsExtractableSubtitleStream: False, SupportsExternalStream: False, Path: null, PixelFormat: "yuv420p10le", Level: 153, IsAnamorphic: False }, MediaStream { Codec: "aac", 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, Rotation: null, Comment: null, TimeBase: "1/90000", CodecTimeBase: null, Title: null, VideoRange: Unknown, VideoRangeType: Unknown, VideoDoViTitle: null, AudioSpatialFormat: None, LocalizedUndefined: null, LocalizedDefault: "Default", LocalizedForced: null, LocalizedExternal: "External", LocalizedHearingImpaired: null, DisplayTitle: "AAC - Stereo", NalLengthSize: null, IsInterlaced: False, IsAVC: False, ChannelLayout: "stereo", BitRate: 127945, BitDepth: null, RefFrames: null, PacketLength: null, Channels: 2, SampleRate: 48000, IsDefault: False, IsForced: False, IsHearingImpaired: False, Height: null, Width: null, AverageFrameRate: null, RealFrameRate: null, ReferenceFrameRate: null, Profile: "LC", Type: Audio, AspectRatio: null, Index: 1, Score: null, IsExternal: False, DeliveryMethod: null, DeliveryUrl: null, IsExternalUrl: null, IsTextSubtitleStream: False, IsPgsSubtitleStream: False, IsExtractableSubtitleStream: False, SupportsExternalStream: False, Path: null, PixelFormat: null, Level: 0, IsAnamorphic: null }], MediaAttachments: [], Formats: [], Bitrate: 1566877, FallbackMaxStreamingBitrate: null, Timestamp: null, RequiredHttpHeaders: [], TranscodingUrl: null, TranscodingSubProtocol: http, TranscodingContainer: null, AnalyzeDurationMs: 3000, TranscodeReasons: 0, DefaultAudioStreamIndex: 1, DefaultSubtitleStreamIndex: null, HasSegments: False, VideoStream: MediaStream { Codec: "hevc", CodecTag: null, Language: null, ColorRange: "tv", ColorSpace: "bt2020nc", ColorTransfer: "smpte2084", ColorPrimaries: "bt2020", DvVersionMajor: null, DvVersionMinor: null, DvProfile: null, DvLevel: null, RpuPresentFlag: null, ElPresentFlag: null, BlPresentFlag: null, DvBlSignalCompatibilityId: null, Rotation: null, Comment: null, TimeBase: "1/90000", CodecTimeBase: null, Title: null, VideoRange: HDR, VideoRangeType: HDR10, VideoDoViTitle: null, AudioSpatialFormat: None, LocalizedUndefined: null, LocalizedDefault: null, LocalizedForced: null, LocalizedExternal: null, LocalizedHearingImpaired: null, DisplayTitle: "4K HEVC HDR", NalLengthSize: null, IsInterlaced: False, IsAVC: null, ChannelLayout: null, BitRate: 1438932, BitDepth: 10, RefFrames: 1, PacketLength: null, Channels: null, SampleRate: null, IsDefault: False, IsForced: False, IsHearingImpaired: False, Height: 2160, Width: 3840, AverageFrameRate: 50, RealFrameRate: 50, ReferenceFrameRate: 50, Profile: "Main 10", Type: Video, AspectRatio: "16:9", Index: 0, Score: null, IsExternal: False, DeliveryMethod: null, DeliveryUrl: null, IsExternalUrl: null, IsTextSubtitleStream: False, IsPgsSubtitleStream: False, IsExtractableSubtitleStream: False, SupportsExternalStream: False, Path: null, PixelFormat: "yuv420p10le", Level: 153, IsAnamorphic: False } }]
One of the big differences Im seeing is "Type". Its "Recording" while its in recording and changes to Movie/Default when done. Next to that, the type of the MediaSource in the first JSON is "Placeholder", while its "Video" in the second which does play correctly. MediaStreams is completely empty in the first JSON.
Any idea why its impossible to play recordings in progress?