Revert "ok please this time audio should work"

This reverts commit a14d7db5ea.
This commit is contained in:
Francesco 2025-06-08 17:52:08 +02:00
parent a14d7db5ea
commit fd1f18ca9a

View file

@ -13,6 +13,7 @@ import AVFoundation
import MarqueeLabel
class CustomMediaPlayerViewController: UIViewController, UIGestureRecognizerDelegate {
private var airplayButton: AVRoutePickerView!
let module: ScrapingModule
let streamURL: String
let fullUrl: String
@ -109,15 +110,12 @@ class CustomMediaPlayerViewController: UIViewController, UIGestureRecognizerDele
var skip85Button: UIButton!
var qualityButton: UIButton!
var holdSpeedIndicator: UIButton!
var audioTrackButton: UIButton!
var airplayButton: AVRoutePickerView!
var lockButton: UIButton!
private var lockButton: UIButton!
var isHLSStream: Bool = false
var qualities: [(String, String)] = []
var currentQualityURL: URL?
var baseM3U8URL: URL?
var selectedAudioOptionID: String?
var sliderHostingController: UIHostingController<MusicProgressSlider<Double>>?
var sliderViewModel = SliderViewModel()
@ -179,8 +177,7 @@ class CustomMediaPlayerViewController: UIViewController, UIGestureRecognizerDele
watchNextButton,
volumeSliderHostingView,
pipButton,
airplayButton,
audioTrackButton
airplayButton
].compactMap { $0 }
private var originalHiddenStates: [UIView: Bool] = [:]
@ -283,7 +280,6 @@ class CustomMediaPlayerViewController: UIViewController, UIGestureRecognizerDele
updateSkipButtonsVisibility()
setupHoldSpeedIndicator()
setupPipIfSupported()
setupAudioTrackButton()
view.bringSubviewToFront(subtitleStackView)
@ -2083,13 +2079,6 @@ class CustomMediaPlayerViewController: UIViewController, UIGestureRecognizerDele
let currentTime = player.currentTime()
let wasPlaying = player.rate > 0
var selectedAudioOption: AVMediaSelectionOption?
if let currentItem = player.currentItem,
let group = currentItem.asset.mediaSelectionGroup(forMediaCharacteristic: .audible) {
selectedAudioOption = currentItem.currentMediaSelection.selectedMediaOption(in: group)
selectedAudioOptionID = selectedAudioOption?.extendedLanguageTag ?? selectedAudioOption?.locale?.identifier
}
var request = URLRequest(url: url)
if let mydict = headers, !mydict.isEmpty {
for (key,value) in mydict {
@ -2110,16 +2099,6 @@ class CustomMediaPlayerViewController: UIViewController, UIGestureRecognizerDele
player.play()
}
if let group = playerItem.asset.mediaSelectionGroup(forMediaCharacteristic: .audible),
let savedID = selectedAudioOptionID {
let match = group.options.first(where: {
$0.extendedLanguageTag == savedID || $0.locale?.identifier == savedID
})
if let match = match {
playerItem.select(match, in: group)
}
}
currentQualityURL = url
UserDefaults.standard.set(urlString, forKey: "lastSelectedQuality")
@ -2128,62 +2107,6 @@ class CustomMediaPlayerViewController: UIViewController, UIGestureRecognizerDele
if let selectedQuality = qualities.first(where: { $0.1 == urlString })?.0 {
DropManager.shared.showDrop(title: "Quality: \(selectedQuality)", subtitle: "", duration: 0.5, icon: UIImage(systemName: "eye"))
}
updateAudioTrackButtonMenu()
}
private func setupAudioTrackButton() {
let config = UIImage.SymbolConfiguration(pointSize: 15, weight: .bold)
let image = UIImage(systemName: "music.note.list", withConfiguration: config)
audioTrackButton = UIButton(type: .system)
audioTrackButton.setImage(image, for: .normal)
audioTrackButton.tintColor = .white
audioTrackButton.showsMenuAsPrimaryAction = true
audioTrackButton.menu = buildAudioTrackMenu()
audioTrackButton.layer.shadowColor = UIColor.black.cgColor
audioTrackButton.layer.shadowOffset = CGSize(width: 0, height: 2)
audioTrackButton.layer.shadowOpacity = 0.6
audioTrackButton.layer.shadowRadius = 4
audioTrackButton.layer.masksToBounds = false
controlsContainerView.addSubview(audioTrackButton)
audioTrackButton.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
audioTrackButton.topAnchor.constraint(equalTo: qualityButton.topAnchor),
audioTrackButton.trailingAnchor.constraint(equalTo: qualityButton.leadingAnchor, constant: -6),
audioTrackButton.widthAnchor.constraint(equalToConstant: 40),
audioTrackButton.heightAnchor.constraint(equalToConstant: 40)
])
}
private func buildAudioTrackMenu() -> UIMenu {
guard let currentItem = player.currentItem,
let group = currentItem.asset.mediaSelectionGroup(forMediaCharacteristic: .audible) else {
return UIMenu(title: "Audio Tracks", children: [
UIAction(title: "No audio tracks", attributes: .disabled, handler: { _ in })
])
}
var actions: [UIAction] = []
for option in group.options {
let lang = option.displayName
let isSelected = currentItem.currentMediaSelection.selectedMediaOption(in: group) == option
let action = UIAction(title: lang, state: isSelected ? .on : .off) { [weak self] _ in
guard let self = self else { return }
currentItem.select(option, in: group)
self.selectedAudioOptionID = option.extendedLanguageTag ?? option.locale?.identifier
self.updateAudioTrackButtonMenu()
}
actions.append(action)
}
return UIMenu(title: "Audio Tracks", children: actions)
}
private func updateAudioTrackButtonMenu() {
audioTrackButton.menu = buildAudioTrackMenu()
}
private func qualitySelectionMenu() -> UIMenu {