1
0
mirror of https://github.com/yattee/yattee.git synced 2024-12-13 22:00:31 +05:30

Extend available streams formats list to AVPlayer

This commit is contained in:
Arkadiusz Fal 2022-08-22 19:03:49 +02:00
parent 7b2dd75f2d
commit 256bbd52a7
3 changed files with 12 additions and 7 deletions

View File

@ -83,13 +83,18 @@ final class AVPlayerBackend: PlayerBackend {
playerLayer.player = avPlayer playerLayer.player = avPlayer
} }
func bestPlayable(_ streams: [Stream], maxResolution _: ResolutionSetting) -> Stream? { func bestPlayable(_ streams: [Stream], maxResolution: ResolutionSetting) -> Stream? {
streams.first { $0.kind == .hls } ?? let sortedByResolution = streams
streams.max { $0.resolution < $1.resolution } .filter { ($0.kind == .adaptive || $0.kind == .stream) && $0.resolution <= maxResolution.value }
.sorted { $0.resolution > $1.resolution }
return streams.first { $0.kind == .hls } ??
sortedByResolution.first { $0.kind == .stream } ??
sortedByResolution.first
} }
func canPlay(_ stream: Stream) -> Bool { func canPlay(_ stream: Stream) -> Bool {
stream.kind == .hls || (stream.kind == .stream && stream.resolution.height <= 720) stream.kind == .hls || stream.kind == .stream || (stream.kind == .adaptive && stream.format == .mp4)
} }
func playStream( func playStream(

View File

@ -59,7 +59,7 @@ class Stream: Equatable, Hashable, Identifiable {
} }
static func < (lhs: Resolution, rhs: Resolution) -> Bool { static func < (lhs: Resolution, rhs: Resolution) -> Bool {
lhs.height < rhs.height lhs.height == rhs.height ? (lhs.refreshRate < rhs.refreshRate) : (lhs.height < rhs.height)
} }
} }

View File

@ -268,7 +268,7 @@ struct QualityProfileForm: View {
func isFormatDisabled(_ format: QualityProfile.Format) -> Bool { func isFormatDisabled(_ format: QualityProfile.Format) -> Bool {
guard backend == .appleAVPlayer else { return false } guard backend == .appleAVPlayer else { return false }
let avPlayerFormats = [QualityProfile.Format.hls, .stream] let avPlayerFormats = [QualityProfile.Format.hls, .stream, .mp4]
return !avPlayerFormats.contains(format) return !avPlayerFormats.contains(format)
} }
@ -276,7 +276,7 @@ struct QualityProfileForm: View {
func isResolutionDisabled(_ resolution: ResolutionSetting) -> Bool { func isResolutionDisabled(_ resolution: ResolutionSetting) -> Bool {
guard backend == .appleAVPlayer else { return false } guard backend == .appleAVPlayer else { return false }
return resolution.value.height > 720 return resolution.value > .hd720p30
} }
func initializeForm() { func initializeForm() {