mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-10-26 16:45:09 +00:00
Fix crash probing streams without frame size
Since #16507, GetAspectRatio falls back to Width.Value and Height.Value when ffprobe reports no usable display aspect ratio. Live TV probes of DVB-T SD channels and some recordings report neither, which throws "Nullable object must have a value" and fails playback. Return the original aspect ratio when the frame size is unknown, as before. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C9WS7zoUKAaqVsz7mko1mF
This commit is contained in:
1 parent
ca0f16eb7c
commit
12b3067bd3
5 files changed
+192
No files matched your search
@@ -99,6 +99,7 @@
|
||||
- [mitchfizz05](https://github.com/mitchfizz05)
|
||||
- [mohd-akram](https://github.com/mohd-akram)
|
||||
- [MrTimscampi](https://github.com/MrTimscampi)
|
||||
- [myristate](https://github.com/myristate)
|
||||
- [n8225](https://github.com/n8225)
|
||||
- [Nalsai](https://github.com/Nalsai)
|
||||
- [Narfinger](https://github.com/Narfinger)
|
||||
|
||||
@@ -1110,6 +1110,12 @@ namespace MediaBrowser.MediaEncoding.Probing
|
||||
&& width > 0
|
||||
&& height > 0))
|
||||
{
|
||||
// Live TV and other early probes can report neither a usable display aspect ratio nor the frame size
|
||||
if (info.Width is not > 0 || info.Height is not > 0)
|
||||
{
|
||||
return original;
|
||||
}
|
||||
|
||||
width = info.Width.Value;
|
||||
height = info.Height.Value;
|
||||
}
|
||||
|
||||
@@ -242,6 +242,27 @@ namespace Jellyfin.MediaEncoding.Tests.Probing
|
||||
Assert.False(res.MediaStreams[0].IsAVC);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("Test Data/Probing/video_ts_no_dimensions.json", null)]
|
||||
[InlineData("Test Data/Probing/video_ts_no_dimensions_zero_dar.json", "0:1")]
|
||||
public void GetMediaInfo_TSWithoutDimensions_Success(string path, string? expectedAspectRatio)
|
||||
{
|
||||
var bytes = File.ReadAllBytes(path);
|
||||
var internalMediaInfoResult = JsonSerializer.Deserialize<InternalMediaInfoResult>(bytes, _jsonOptions);
|
||||
|
||||
MediaInfo res = _probeResultNormalizer.GetMediaInfo(internalMediaInfoResult, VideoType.VideoFile, false, "http://192.168.1.19:5004/auto/v4", MediaProtocol.Http);
|
||||
|
||||
Assert.Equal(2, res.MediaStreams.Count);
|
||||
|
||||
var video = res.MediaStreams[0];
|
||||
Assert.Equal(MediaStreamType.Video, video.Type);
|
||||
Assert.Equal("mpeg2video", video.Codec);
|
||||
Assert.Null(video.Width);
|
||||
Assert.Null(video.Height);
|
||||
Assert.Equal(expectedAspectRatio, video.AspectRatio);
|
||||
Assert.False(video.IsAnamorphic);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetMediaInfo_WebM_Success()
|
||||
{
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
{
|
||||
"streams": [
|
||||
{
|
||||
"index": 0,
|
||||
"codec_name": "mpeg2video",
|
||||
"codec_long_name": "MPEG-2 video",
|
||||
"profile": "Main",
|
||||
"codec_type": "video",
|
||||
"codec_tag_string": "[2][0][0][0]",
|
||||
"codec_tag": "0x0002",
|
||||
"pix_fmt": "yuv420p",
|
||||
"level": 8,
|
||||
"id": "0x259",
|
||||
"r_frame_rate": "25/1",
|
||||
"avg_frame_rate": "0/0",
|
||||
"time_base": "1/90000",
|
||||
"start_pts": 6181452600,
|
||||
"start_time": "68682.806667",
|
||||
"disposition": {
|
||||
"default": 0,
|
||||
"dub": 0,
|
||||
"original": 0,
|
||||
"comment": 0,
|
||||
"lyrics": 0,
|
||||
"karaoke": 0,
|
||||
"forced": 0,
|
||||
"hearing_impaired": 0,
|
||||
"visual_impaired": 0,
|
||||
"clean_effects": 0,
|
||||
"attached_pic": 0,
|
||||
"timed_thumbnails": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"codec_name": "mp2",
|
||||
"codec_long_name": "MP2 (MPEG audio layer 2)",
|
||||
"codec_type": "audio",
|
||||
"codec_tag_string": "[3][0][0][0]",
|
||||
"codec_tag": "0x0003",
|
||||
"sample_fmt": "fltp",
|
||||
"sample_rate": "48000",
|
||||
"channels": 2,
|
||||
"channel_layout": "stereo",
|
||||
"bits_per_sample": 0,
|
||||
"id": "0x25a",
|
||||
"r_frame_rate": "0/0",
|
||||
"avg_frame_rate": "0/0",
|
||||
"time_base": "1/90000",
|
||||
"start_pts": 6181460000,
|
||||
"start_time": "68682.888889",
|
||||
"bit_rate": "256000",
|
||||
"disposition": {
|
||||
"default": 0,
|
||||
"dub": 0,
|
||||
"original": 0,
|
||||
"comment": 0,
|
||||
"lyrics": 0,
|
||||
"karaoke": 0,
|
||||
"forced": 0,
|
||||
"hearing_impaired": 0,
|
||||
"visual_impaired": 0,
|
||||
"clean_effects": 0,
|
||||
"attached_pic": 0,
|
||||
"timed_thumbnails": 0
|
||||
},
|
||||
"tags": {
|
||||
"language": "eng"
|
||||
}
|
||||
}
|
||||
],
|
||||
"format": {
|
||||
"filename": "http://192.168.1.19:5004/auto/v4",
|
||||
"nb_streams": 2,
|
||||
"nb_programs": 1,
|
||||
"format_name": "mpegts",
|
||||
"format_long_name": "MPEG-TS (MPEG-2 Transport Stream)",
|
||||
"start_time": "68682.806667",
|
||||
"probe_score": 50
|
||||
}
|
||||
}
|
||||
+83
@@ -0,0 +1,83 @@
|
||||
{
|
||||
"streams": [
|
||||
{
|
||||
"index": 0,
|
||||
"codec_name": "mpeg2video",
|
||||
"codec_long_name": "MPEG-2 video",
|
||||
"profile": "Main",
|
||||
"codec_type": "video",
|
||||
"codec_tag_string": "[2][0][0][0]",
|
||||
"codec_tag": "0x0002",
|
||||
"sample_aspect_ratio": "0:1",
|
||||
"display_aspect_ratio": "0:1",
|
||||
"pix_fmt": "yuv420p",
|
||||
"level": 8,
|
||||
"id": "0x259",
|
||||
"r_frame_rate": "25/1",
|
||||
"avg_frame_rate": "0/0",
|
||||
"time_base": "1/90000",
|
||||
"start_pts": 6181452600,
|
||||
"start_time": "68682.806667",
|
||||
"disposition": {
|
||||
"default": 0,
|
||||
"dub": 0,
|
||||
"original": 0,
|
||||
"comment": 0,
|
||||
"lyrics": 0,
|
||||
"karaoke": 0,
|
||||
"forced": 0,
|
||||
"hearing_impaired": 0,
|
||||
"visual_impaired": 0,
|
||||
"clean_effects": 0,
|
||||
"attached_pic": 0,
|
||||
"timed_thumbnails": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"codec_name": "mp2",
|
||||
"codec_long_name": "MP2 (MPEG audio layer 2)",
|
||||
"codec_type": "audio",
|
||||
"codec_tag_string": "[3][0][0][0]",
|
||||
"codec_tag": "0x0003",
|
||||
"sample_fmt": "fltp",
|
||||
"sample_rate": "48000",
|
||||
"channels": 2,
|
||||
"channel_layout": "stereo",
|
||||
"bits_per_sample": 0,
|
||||
"id": "0x25a",
|
||||
"r_frame_rate": "0/0",
|
||||
"avg_frame_rate": "0/0",
|
||||
"time_base": "1/90000",
|
||||
"start_pts": 6181460000,
|
||||
"start_time": "68682.888889",
|
||||
"bit_rate": "256000",
|
||||
"disposition": {
|
||||
"default": 0,
|
||||
"dub": 0,
|
||||
"original": 0,
|
||||
"comment": 0,
|
||||
"lyrics": 0,
|
||||
"karaoke": 0,
|
||||
"forced": 0,
|
||||
"hearing_impaired": 0,
|
||||
"visual_impaired": 0,
|
||||
"clean_effects": 0,
|
||||
"attached_pic": 0,
|
||||
"timed_thumbnails": 0
|
||||
},
|
||||
"tags": {
|
||||
"language": "eng"
|
||||
}
|
||||
}
|
||||
],
|
||||
"format": {
|
||||
"filename": "http://192.168.1.19:5004/auto/v4",
|
||||
"nb_streams": 2,
|
||||
"nb_programs": 1,
|
||||
"format_name": "mpegts",
|
||||
"format_long_name": "MPEG-TS (MPEG-2 Transport Stream)",
|
||||
"start_time": "68682.806667",
|
||||
"probe_score": 50
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user