将视频更改为从UITableViewController在AVPlayerViewController中播放

时间:2017-05-06 16:58:43

标签: ios swift uitableview avplayerviewcontroller

我有一个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!)

     }

Storyboard

1 个答案:

答案 0 :(得分:0)

每次调用时:let VideoPlayerController = self.storyboard?.instantiateViewController(withIdentifier: "player") as! VideoPlayerController都会创建一个View Controller的新实例。

AVPlayerViewController的行为与任何视图控制器的作用非常相似,它通常是全屏的,并且根据需要显示,除非您将其作为子视图控制器嵌入并将其视图手动添加到另一个VC。

无论哪种方式,您都需要维护播放器视图控制器的单个实例才能使其正常工作。如果你能准确地解释你正在做什么以及你想要实现什么,我可以提供一个如何做的例子。