Swift 2 AVPlayer - 播放下一个视频上一个视频

时间:2016-03-30 05:40:42

标签: ios iphone swift

我正在钻研这一部分超过一天。请提出任何想法。

我必须完成播放视频。我有一个视频列表。如果用户制作全屏视频,则启用上一个和下一个播放器按钮,并在点击时播放。

这是我的代码;

         var commmentQueuePlayer = AVQueuePlayer()
         var items = [AVPlayerItem]()
         if let player = comPlayerControl {

            let videoURL: String = "http://cdnapi.kaltura.com/p/11/sp/11/playManifest/entryId/0_6swapj1k/format/applehttp/protocol/http/a.m3u8"
            let firstItemURL: String = "http://cdnapi.kaltura.com/p/11/sp/11/playManifest/entryId/0_2p3957qy/format/applehttp/protocol/http/a.m3u8"
            let secondItemURL: String = "http://cdnapi.kaltura.com/p/11/sp/11/playManifest/entryId/0_buy5xjol/format/applehttp/protocol/http/a.m3u8"


            let firstItem = AVPlayerItem(URL: NSURL(string: firstItemURL)! )
            let secondItem = AVPlayerItem(URL: NSURL(string: secondItemURL)! )
            let playerItem = AVPlayerItem(URL: NSURL(string: videoURL)! )

            items = [firstItem,secondItem,playerItem]
            commmentQueuePlayer = AVQueuePlayer(items: items)

            player.player = commmentQueuePlayer
            player.view.frame = videoCell.frame
            player.view.sizeToFit()
            player.showsPlaybackControls = true
            videoCell.addSubview(player.view)
           // comPlayerControl.player?.play()
        }

这里发生的事情是一旦开始第二次开始。像一个队列。

请允许我知道使用AVQueuePlayerController或AVPlayerController是否合适。

请帮助我。不幸的是,谷歌,我无法得到解决方案。

我想知道我可以触发下一个播放器图标

enter image description here

请建议。

2 个答案:

答案 0 :(得分:1)

我确实创建了一个demo project,其中显示了如何在AVPlayer上放置自定义按钮,它们会响应点击次数。

做了什么:

  • 创建的Xib(使用自动布局)文件,其中包含下一个,重播等自定义按钮。
  • 按钮连接到源,打印需要做的事情。喜欢:播放下一个或重播。
  • 添加观察者,观察视频播放完毕后播放。
  • 视频播放完毕后,将显示带按钮的xib文件。

答案 1 :(得分:0)

我建议使用AVQueuePlayer。当前项目结束播放后,队列播放器将自动播放队列中的下一个项目。我们要记住的是,在AVPlayerItem完成播放后,它将从队列中删除,因此如果要向后移动,则必须重置队列或手动将新项添加到队列here is an implementation of this

在Swift中重置队列应该看起来像这样

func resetVideoQueue(video: string){

    if let videos = Videos {

        var queue: [AVPlayerItem] = []

        switch video {
        case "vid1":
            queue.append(AVPlayerItem(URL: NSURL(string: videos["vid1"])!))
            queue.append(AVPlayerItem(URL: NSURL(string: videos["vid2"])!))
            queue.append(AVPlayerItem(URL: NSURL(string: videos["vid3"])!))
            queue.append(AVPlayerItem(URL: NSURL(string: videos["vid4"])!))
            break
        case "vid2":
            queue.append(AVPlayerItem(URL: NSURL(string: videos["vid2"])!))
            queue.append(AVPlayerItem(URL: NSURL(string: videos["vid3"])!))
            queue.append(AVPlayerItem(URL: NSURL(string: videos["vid4"])!))
            break
        case "vid3":
            queue.append(AVPlayerItem(URL: NSURL(string: videos["vid3"])!))
            queue.append(AVPlayerItem(URL: NSURL(string: videos["vid4"])!))
            break
        case "vid4":
            queue.append(AVPlayerItem(URL: NSURL(string: videos["vid4"])!))
            break
        }

        setVideoPlayer(queue)
    }
}


internal func setVideoPlayer(queue: [AVPlayerItem]) {
    queuePlayer = AVQueuePlayer(items: queue)       
    videoPlayerViewController.player = queuePlayer
    presentViewController(videoPlayerViewController, animated: true) {
        self.videoPlayerViewController.player?.play()
    }
}

要移至下一个项目,请使用MrHaze建议的advanceToNextItem()方法。