mirror of
https://github.com/cranci1/Sora.git
synced 2026-04-20 16:12:50 +00:00
Revert "ok please this time audio should work"
This reverts commit a14d7db5ea.
This commit is contained in:
parent
a14d7db5ea
commit
fd1f18ca9a
1 changed files with 3 additions and 80 deletions
|
|
@ -13,6 +13,7 @@ import AVFoundation
|
||||||
import MarqueeLabel
|
import MarqueeLabel
|
||||||
|
|
||||||
class CustomMediaPlayerViewController: UIViewController, UIGestureRecognizerDelegate {
|
class CustomMediaPlayerViewController: UIViewController, UIGestureRecognizerDelegate {
|
||||||
|
private var airplayButton: AVRoutePickerView!
|
||||||
let module: ScrapingModule
|
let module: ScrapingModule
|
||||||
let streamURL: String
|
let streamURL: String
|
||||||
let fullUrl: String
|
let fullUrl: String
|
||||||
|
|
@ -109,15 +110,12 @@ class CustomMediaPlayerViewController: UIViewController, UIGestureRecognizerDele
|
||||||
var skip85Button: UIButton!
|
var skip85Button: UIButton!
|
||||||
var qualityButton: UIButton!
|
var qualityButton: UIButton!
|
||||||
var holdSpeedIndicator: UIButton!
|
var holdSpeedIndicator: UIButton!
|
||||||
var audioTrackButton: UIButton!
|
private var lockButton: UIButton!
|
||||||
var airplayButton: AVRoutePickerView!
|
|
||||||
var lockButton: UIButton!
|
|
||||||
|
|
||||||
var isHLSStream: Bool = false
|
var isHLSStream: Bool = false
|
||||||
var qualities: [(String, String)] = []
|
var qualities: [(String, String)] = []
|
||||||
var currentQualityURL: URL?
|
var currentQualityURL: URL?
|
||||||
var baseM3U8URL: URL?
|
var baseM3U8URL: URL?
|
||||||
var selectedAudioOptionID: String?
|
|
||||||
|
|
||||||
var sliderHostingController: UIHostingController<MusicProgressSlider<Double>>?
|
var sliderHostingController: UIHostingController<MusicProgressSlider<Double>>?
|
||||||
var sliderViewModel = SliderViewModel()
|
var sliderViewModel = SliderViewModel()
|
||||||
|
|
@ -179,8 +177,7 @@ class CustomMediaPlayerViewController: UIViewController, UIGestureRecognizerDele
|
||||||
watchNextButton,
|
watchNextButton,
|
||||||
volumeSliderHostingView,
|
volumeSliderHostingView,
|
||||||
pipButton,
|
pipButton,
|
||||||
airplayButton,
|
airplayButton
|
||||||
audioTrackButton
|
|
||||||
].compactMap { $0 }
|
].compactMap { $0 }
|
||||||
|
|
||||||
private var originalHiddenStates: [UIView: Bool] = [:]
|
private var originalHiddenStates: [UIView: Bool] = [:]
|
||||||
|
|
@ -283,7 +280,6 @@ class CustomMediaPlayerViewController: UIViewController, UIGestureRecognizerDele
|
||||||
updateSkipButtonsVisibility()
|
updateSkipButtonsVisibility()
|
||||||
setupHoldSpeedIndicator()
|
setupHoldSpeedIndicator()
|
||||||
setupPipIfSupported()
|
setupPipIfSupported()
|
||||||
setupAudioTrackButton()
|
|
||||||
|
|
||||||
view.bringSubviewToFront(subtitleStackView)
|
view.bringSubviewToFront(subtitleStackView)
|
||||||
|
|
||||||
|
|
@ -2083,13 +2079,6 @@ class CustomMediaPlayerViewController: UIViewController, UIGestureRecognizerDele
|
||||||
let currentTime = player.currentTime()
|
let currentTime = player.currentTime()
|
||||||
let wasPlaying = player.rate > 0
|
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)
|
var request = URLRequest(url: url)
|
||||||
if let mydict = headers, !mydict.isEmpty {
|
if let mydict = headers, !mydict.isEmpty {
|
||||||
for (key,value) in mydict {
|
for (key,value) in mydict {
|
||||||
|
|
@ -2110,16 +2099,6 @@ class CustomMediaPlayerViewController: UIViewController, UIGestureRecognizerDele
|
||||||
player.play()
|
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
|
currentQualityURL = url
|
||||||
|
|
||||||
UserDefaults.standard.set(urlString, forKey: "lastSelectedQuality")
|
UserDefaults.standard.set(urlString, forKey: "lastSelectedQuality")
|
||||||
|
|
@ -2128,62 +2107,6 @@ class CustomMediaPlayerViewController: UIViewController, UIGestureRecognizerDele
|
||||||
if let selectedQuality = qualities.first(where: { $0.1 == urlString })?.0 {
|
if let selectedQuality = qualities.first(where: { $0.1 == urlString })?.0 {
|
||||||
DropManager.shared.showDrop(title: "Quality: \(selectedQuality)", subtitle: "", duration: 0.5, icon: UIImage(systemName: "eye"))
|
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 {
|
private func qualitySelectionMenu() -> UIMenu {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue