diff --git a/Sora.xcodeproj/project.xcworkspace/xcuserdata/Francesco.xcuserdatad/UserInterfaceState.xcuserstate b/Sora.xcodeproj/project.xcworkspace/xcuserdata/Francesco.xcuserdatad/UserInterfaceState.xcuserstate index bdc65db..d4e9a36 100644 Binary files a/Sora.xcodeproj/project.xcworkspace/xcuserdata/Francesco.xcuserdatad/UserInterfaceState.xcuserstate and b/Sora.xcodeproj/project.xcworkspace/xcuserdata/Francesco.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/Sora/Utils/CustomPlayer/CustomPlayer.swift b/Sora/Utils/CustomPlayer/CustomPlayer.swift index 61525c0..a09cb30 100644 --- a/Sora/Utils/CustomPlayer/CustomPlayer.swift +++ b/Sora/Utils/CustomPlayer/CustomPlayer.swift @@ -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() diff --git a/Sora/Utils/Player/VideoPlayerView.swift b/Sora/Utils/Player/VideoPlayerView.swift index b6988cd..d3feabb 100644 --- a/Sora/Utils/Player/VideoPlayerView.swift +++ b/Sora/Utils/Player/VideoPlayerView.swift @@ -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)") } } -} +} \ No newline at end of file diff --git a/Sora/Views/AnimeViews/AnimeInfoView.swift b/Sora/Views/AnimeViews/AnimeInfoView.swift index 96b9a0b..43dbf2d 100644 --- a/Sora/Views/AnimeViews/AnimeInfoView.swift +++ b/Sora/Views/AnimeViews/AnimeInfoView.swift @@ -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