【发布时间】:2017-05-06 21:35:08
【问题描述】:
我不明白为什么当我单击调用设置另一个视频流以再现的功能的 TableView 的单元格时,AVPlayer 不更改视频。你可以帮帮我吗。 代码如下:
class VideoPlayerController: AVPlayerViewController {
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 = AVQueuePlayer(playerItem: playerItem)
player = AVPlayer(playerItem: playerItem)
player?.play()
}
func setCanaleDaRiprodurre(url:String){
let urlDaRiprodurre : URL? = URL.init(string: url)
let playerItem = AVPlayerItem(url: urlDaRiprodurre!)
player?.pause()
player?.replaceCurrentItem(with: playerItem)
player?.play()
print("Hello")
}
这里是使用另一个流 URL 调用函数“setCanaleDaRiprodurre”的 TableViewController 的代码。
override func tableView(_tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let VideoPlayerController = self.storyboard?.instantiateViewController(withIdentifier: "player") as! VideoPlayerController
VideoPlayerController.setCanaleDaRiprodurre(url: menuItems[indexPath.row].stream_url!)
}
【问题讨论】:
-
AVPlayerItems 可以直接替换吗?您不必使用图层或视图吗?这段代码也有几件事看起来很危险。例如,强制解开
menuItems[indexPath.row].stream_url!并且您正尝试在主线程上同步重新加载 AVPlayerItem。 -
我很困惑,因为我无法理解我的代码不起作用,尽管我在主线程上同步替换了“AVPlayerItemes”
-
尝试重建视图只是为了查看它是否确实创建了一个新播放器以查看播放器是否播放流。然后向后工作以提高性能
-
当我调用该函数时,播放器不会更改流,但它会继续再现第一个视频。我还更改了函数的代码以创建一个新的 AvPlayer 而不是更改 AvPlayerItem 但它不起作用。此时我假设调用TableViewController中的函数时没有调用同一个实例,也许storyboard.istantiateViewController引用了另一个AVPlayer的实例??
标签: ios swift3 avplayer avplayerviewcontroller