jellyfin / jellyfin-androidtv

Android TV Client for Jellyfin
https://jellyfin.org
GNU General Public License v2.0
2.84k stars 483 forks source link

Chromecast not sending conditions to bound 2160p video for 1080p client #3191

Closed GodTamIt closed 11 months ago

GodTamIt commented 1 year ago

Describe the bug

The original bug is here but I think it's a client bug: https://github.com/jellyfin/jellyfin-chromecast/issues/502

I did some digging in the logs this comment and had an explanation here.

Logs

Log line > `[2023-08-28 20:28:19.574 +00:00] [DBG] [83] Jellyfin.Api.Controllers.MediaInfoController: GetPostedPlaybackInfo profile: DeviceProfile { Name: "AndroidTV-ExoPlayer", 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: 20000000, MaxStaticBitrate: 100000000, MusicStreamingTranscodingBitrate: 128000, MaxStaticMusicBitrate: 8000000, SonyAggregationFlags: null, ProtocolInfo: null, TimelineOffsetSeconds: 0, RequiresPlainVideoItems: False, RequiresPlainFolders: False, EnableMSMediaReceiverRegistrar: False, IgnoreTranscodeByteRangeRequests: False, XmlRootAttributes: [], DirectPlayProfiles: [DirectPlayProfile { Container: "m4v,mov,xvid,vob,mkv,wmv,asf,ogm,ogv,mp4,webm", AudioCodec: "aac,mp3,mp2,aac_latm,alac,ac3,eac3,dca,dts,mlp,truehd,pcm_alaw,pcm_mulaw", VideoCodec: "h264,hevc,vp8,vp9,mpeg,mpeg2video", Type: Video }, DirectPlayProfile { Container: "aac,mp3,mp2,aac_latm,alac,ac3,eac3,dca,dts,mlp,truehd,pcm_alaw,pcm_mulaw,mpa,flac,wav,wma,ogg,oga,webma,ape,opus", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "jpg,jpeg,png,gif,webp", AudioCodec: null, VideoCodec: null, Type: Photo }], TranscodingProfiles: [TranscodingProfile { Container: "ts", Type: Video, VideoCodec: "hevc,h264", AudioCodec: "aac,mp3,mp2,aac_latm,alac,ac3,eac3,dts,mlp,pcm_alaw,pcm_mulaw", Protocol: "hls", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: null, MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False, Conditions: [] }, TranscodingProfile { Container: "mp3", Type: Audio, VideoCodec: "", AudioCodec: "mp3", Protocol: "", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: null, MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False, Conditions: [] }], ContainerProfiles: [], CodecProfiles: [CodecProfile { Type: Video, Conditions: [ProfileCondition { Condition: EqualsAny, Property: VideoProfile, Value: "high|main|baseline|constrained baseline", IsRequired: False }, ProfileCondition { Condition: LessThanEqual, Property: VideoLevel, Value: "51", IsRequired: False }], ApplyConditions: [], Codec: "h264", Container: null }, CodecProfile { Type: Video, Conditions: [ProfileCondition { Condition: LessThanEqual, Property: RefFrames, Value: "12", IsRequired: False }], ApplyConditions: [ProfileCondition { Condition: GreaterThanEqual, Property: Width, Value: "1200", IsRequired: False }], Codec: "h264", Container: null }, CodecProfile { Type: Video, Conditions: [ProfileCondition { Condition: LessThanEqual, Property: RefFrames, Value: "4", IsRequired: False }], ApplyConditions: [ProfileCondition { Condition: GreaterThanEqual, Property: Width, Value: "1900", IsRequired: False }], Codec: "h264", Container: null }, CodecProfile { Type: Video, Conditions: [ProfileCondition { Condition: NotEquals, Property: VideoProfile, Value: "Main 10", IsRequired: False }], ApplyConditions: [], Codec: "hevc", Container: null }, CodecProfile { Type: VideoAudio, Conditions: [ProfileCondition { Condition: LessThanEqual, Property: AudioChannels, Value: "8", IsRequired: False }], ApplyConditions: [], Codec: null, Container: null }], ResponseProfiles: [], SubtitleProfiles: [SubtitleProfile { Format: "srt", Method: External, DidlMode: null, Language: null, Container: null }, SubtitleProfile { Format: "subrip", Method: External, DidlMode: null, Language: null, Container: null }, SubtitleProfile { Format: "ass", Method: Encode, DidlMode: null, Language: null, Container: null }, SubtitleProfile { Format: "ssa", Method: Encode, DidlMode: null, Language: null, Container: null }, SubtitleProfile { Format: "pgs", Method: Embed, DidlMode: null, Language: null, Container: null }, SubtitleProfile { Format: "pgssub", Method: Embed, DidlMode: null, Language: null, Container: null }, SubtitleProfile { Format: "dvbsub", Method: Embed, DidlMode: null, Language: null, Container: null }, SubtitleProfile { Format: "dvdsub", Method: Encode, DidlMode: null, Language: null, Container: null }, SubtitleProfile { Format: "vtt", Method: Embed, DidlMode: null, Language: null, Container: null }, SubtitleProfile { Format: "sub", Method: Embed, DidlMode: null, Language: null, Container: null }, SubtitleProfile { Format: "idx", Method: Embed, DidlMode: null, Language: null, Container: null }] }`

More specifically, the parts of interest, prettified here:

TranscodingProfiles and CodecProfiles ``` TranscodingProfiles: [ TranscodingProfile { Container: "ts", Type: Video, VideoCodec: "hevc,h264", AudioCodec: "aac,mp3,mp2,aac_latm,alac,ac3,eac3,dts,mlp,pcm_alaw,pcm_mulaw", Protocol: "hls", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: null, MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False, Conditions: [] }, TranscodingProfile { Container: "mp3", Type: Audio, VideoCodec: "", AudioCodec: "mp3", Protocol: "", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: null, MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False, Conditions: [] } ], ContainerProfiles: [], CodecProfiles: [ CodecProfile { Type: Video, Conditions: [ ProfileCondition { Condition: EqualsAny, Property: VideoProfile, Value: "high|main|baseline|constrained baseline", IsRequired: False }, ProfileCondition { Condition: LessThanEqual, Property: VideoLevel, Value: "51", IsRequired: False } ], ApplyConditions: [], Codec: "h264", Container: null }, CodecProfile { Type: Video, Conditions: [ ProfileCondition { Condition: LessThanEqual, Property: RefFrames, Value: "12", IsRequired: False } ], ApplyConditions: [ ProfileCondition { Condition: GreaterThanEqual, Property: Width, Value: "1200", } ], Codec: "h264", Container: null }, CodecProfile { Type: Video, Conditions: [ ProfileCondition { Condition: LessThanEqual, Property: RefFrames, Value: "4", IsRequired: False }], ApplyConditions: [ ProfileCondition { Condition: GreaterThanEqual, Property: Width, Value: "1900", IsRequired: False } ], Codec: "h264", Container: null }, CodecProfile { Type: Video, Conditions: [ ProfileCondition { Condition: NotEquals, Property: VideoProfile, Value: "Main 10", IsRequired: False } ], ApplyConditions: [], Codec: "hevc", Container: null }, CodecProfile { Type: VideoAudio, Conditions: [ ProfileCondition { Condition: LessThanEqual, Property: AudioChannels, Value: "8", IsRequired: False } ], ApplyConditions: [], Codec: null, Container: null } ], ```

System (please complete the following information):

Please see original issue.

nielsvanvelzen commented 1 year ago

Is this with the stable or unstable client?

GodTamIt commented 1 year ago

@nielsvanvelzen I want to say that this is the stable but this was reported by someone else. (see aforementioned thread)

dd-ugm commented 11 months ago

@nielsvanvelzen I've just checked, and the Chromecast HD I'm experiencing this on is actually running v0.15.12 of jellyfin/jellyfin-androidtv.

Although I'm unsure on the differences between the two projects...

I'm assuming this repo facilitates the casting functionality from the Android mobile app? If that's the case then I believe jellyfin-androidtv will be the right place to discuss this.

thornbill commented 11 months ago

This is the cast receiver app for normal casting. It has nothing to do with the Android TV app that is installable on a Chromecast with Google TV.

thornbill commented 11 months ago

Additionally the Chromecast with Google TV devices natively support 4K video. In the case of the HD device, the device should handle downscaling.

Ref: https://developers.google.com/cast/docs/media#chromecast_with_google_tv

I'll move the original issue and close this since this seems to be a discussion about the Android TV app.

bertmelis commented 11 months ago

The issue is on Chromecast without Google TV.

thornbill commented 11 months ago

The logs provided are most definitely from the Android TV app... AndroidTV-ExoPlayer is the device profile referenced.