added header bypass for most providers idk
Some checks are pending
Build and Release IPA / Build IPA (push) Waiting to run

This commit is contained in:
cranci1 2024-12-23 18:27:26 +01:00
parent 36b818835b
commit 6f9a9c1a0a
4 changed files with 36 additions and 6 deletions

View file

@ -34,16 +34,26 @@ struct CustomMediaPlayer: View {
@State private var timeObserverToken: Any?
@Environment(\.presentationMode) var presentationMode
let module: ModuleStruct
let fullUrl: String
let title: String
let episodeNumber: Int
let onWatchNext: () -> Void
init(urlString: String, fullUrl: String, title: String, episodeNumber: Int, onWatchNext: @escaping () -> Void) {
init(module: ModuleStruct, urlString: String, fullUrl: String, title: String, episodeNumber: Int, onWatchNext: @escaping () -> Void) {
guard let url = URL(string: urlString) else {
fatalError("Invalid URL string")
}
_player = State(initialValue: AVPlayer(url: url))
var request = URLRequest(url: url)
if urlString.contains("ascdn") {
request.addValue("\(module.module[0].details.baseURL)", forHTTPHeaderField: "Referer")
}
let asset = AVURLAsset(url: url, options: ["AVURLAssetHTTPHeaderFieldsKey": request.allHTTPHeaderFields ?? [:]])
_player = State(initialValue: AVPlayer(playerItem: AVPlayerItem(asset: asset)))
self.module = module
self.fullUrl = fullUrl
self.title = title
self.episodeNumber = episodeNumber
@ -132,7 +142,7 @@ struct CustomMediaPlayer: View {
}
}
Spacer()
if duration - currentTime <= duration * 0.07 {
if duration - currentTime <= duration * 0.07 && currentTime != 0 {
Button(action: {
player.pause()
presentationMode.wrappedValue.dismiss()

View file

@ -9,12 +9,23 @@ import UIKit
import AVKit
class VideoPlayerViewController: UIViewController {
let module: ModuleStruct
var player: AVPlayer?
var playerViewController: AVPlayerViewController?
var timeObserverToken: Any?
var streamUrl: String?
var fullUrl: String = ""
init(module: ModuleStruct) {
self.module = module
super.init(nibName: nil, bundle: nil)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
@ -22,7 +33,15 @@ class VideoPlayerViewController: UIViewController {
return
}
player = AVPlayer(url: url)
var request = URLRequest(url: url)
if streamUrl.contains("ascdn") {
request.addValue("\(module.module[0].details.baseURL)", forHTTPHeaderField: "Referer")
}
let asset = AVURLAsset(url: url, options: ["AVURLAssetHTTPHeaderFieldsKey": request.allHTTPHeaderFields ?? [:]])
let playerItem = AVPlayerItem(asset: asset)
player = AVPlayer(playerItem: playerItem)
playerViewController = NormalPlayer()
playerViewController?.player = player
addPeriodicTimeObserver(fullURL: fullUrl)
@ -75,4 +94,4 @@ class VideoPlayerViewController: UIViewController {
UserDefaults.standard.set(duration, forKey: "totalTime_\(fullURL)")
}
}
}
}

View file

@ -190,6 +190,7 @@ struct AnimeInfoView: View {
} else if externalPlayer == "Custom" {
DispatchQueue.main.async {
let customMediaPlayer = CustomMediaPlayer(
module: module,
urlString: streamUrl,
fullUrl: fullURL,
title: anime.name,
@ -211,7 +212,7 @@ struct AnimeInfoView: View {
}
DispatchQueue.main.async {
let videoPlayerViewController = VideoPlayerViewController()
let videoPlayerViewController = VideoPlayerViewController(module: module)
videoPlayerViewController.streamUrl = streamUrl
videoPlayerViewController.fullUrl = fullURL
videoPlayerViewController.modalPresentationStyle = .fullScreen