我有一个AVPlayerViewController,它通过URL和UITableViewController重现一些视频流,UITableViewController在其单元格中包含用户可以选择重现的URL。当我点击任何单元格时,我调用该函数来更改要重现的流(在AvPlayerViewController中声明的setCanaleDaRiprodurre),传递新的流URL。问题是该功能不会停止播放器并且不会更改流以进行重现。好像我正在调用另一个AvPlayerController实例,它不对,也许我需要一个单例实例? 我链接了2个类和故事板结构的代码。
class VideoPlayerController: AVPlayerViewController {
//static let sharedInstance = VideoPlayerController()
override func viewDidLoad() {
guard let url = URL(string: "http://live1.msf.ticdn.it/Content/HLS/Live/Channel(CH01HA)/Stream(03)/index.m3u8") else { return }
let playerItem = AVPlayerItem(url: url)
player = AVPlayer(playerItem: playerItem)
player?.play()
}
func setCanaleDaRiprodurre(url:String){
let url1 = URL(string:url)
let playerItem = AVPlayerItem(url: url1!)
player?.pause()
player?.replaceCurrentItem(with: playerItem)
player?.play()
print("Hello")
}
表格单元格操作的提取:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let VideoPlayerController = self.storyboard?.instantiateViewController(withIdentifier: "player") as! VideoPlayerController
print(menuItems[indexPath.row].stream_url)
print("sta andanndddooooo")
VideoPlayerController.setCanaleDaRiprodurre(url: menuItems[indexPath.row].stream_url!)
//VideoPlayerController.sharedInstance.setCanaleDaRiprodurre(url: menuItems[indexPath.row].stream_url!)
}
答案 0 :(得分:0)
每次调用时:let VideoPlayerController = self.storyboard?.instantiateViewController(withIdentifier: "player") as! VideoPlayerController
都会创建一个View Controller的新实例。
AVPlayerViewController
的行为与任何视图控制器的作用非常相似,它通常是全屏的,并且根据需要显示,除非您将其作为子视图控制器嵌入并将其视图手动添加到另一个VC。
无论哪种方式,您都需要维护播放器视图控制器的单个实例才能使其正常工作。如果你能准确地解释你正在做什么以及你想要实现什么,我可以提供一个如何做的例子。