【问题标题】:Change AVPlayer video to reproduce clicking on a table view cell更改 AVPlayer 视频以重现单击表格视图单元格
【发布时间】: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


【解决方案1】:

didSelectRowAt: 中的 VideoPlayerController 在它有机会做任何事情之前就超出了范围。

你的班级不是已经VideoPlayerController了吗?如果您有办法替换当前频道,为什么不在didSelectRowAt: 中执行此操作?

override func tableView(_tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    self.setCanaleDaRiprodurre(url: menuItems[indexPath.row].stream_url!)
}

为清楚起见,您应该避免为变量提供与其类相同的名称,所以不要使用

let VideoPlayerController = ...

做类似的事情

let  VideoPlayerController = ...

【讨论】:

  • 它不起作用,我想我指向另一个 AVPlayer 实例,我无法理解如何更改要播放的视频。
  • 很难说没有看到更多。你能链接到一个重现问题的小项目吗?
猜你喜欢
  • 2018-10-04
  • 1970-01-01
  • 1970-01-01
  • 2018-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-22
  • 2011-07-13
相关资源
最近更新 更多