Swift 2 AVPlayer - 播放下一个视频 上一个视频
Posted
技术标签:
【中文标题】Swift 2 AVPlayer - 播放下一个视频 上一个视频【英文标题】:Swift 2 AVPlayer - Play Next video Previous Video 【发布时间】:2016-03-30 05:40:42 【问题描述】:我对这部分的研究不止一天。请提出任何想法。
我必须完成才能播放视频。我有一个视频列表。如果用户将其设为全屏视频,则启用上一个和下一个播放器按钮,并在点击时播放。
这是我的代码;
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 是否合适。
请任何人帮助我。我谷歌了,很遗憾,我找不到解决方案。
我想知道我可以触发下一个上一个播放器图标
请提出建议。
【问题讨论】:
所以您想在点击相应的按钮时播放下一个/上一个视频?这部分没听懂你想说的What is happening here is once playing start second one. like a Queue.
是的。试想一下,一旦用户表以全屏模式打开并播放,我在 tableview 中有一个视频预览列表。播放完成后,不想返回选择下一个视频,在这种情况下,用户单击下一个按钮将播放下一个视频,如果用户单击上一个,如果有上一个项目,则播放
很难相信没有办法启用这些按钮。我没有找到快速的方法。我发现推荐编写自己的海关视频播放器。作为参考可以是这样的:binarymosaic.com/custom-video-player-for-ios-with-avfoundation
感谢您的回复。我有一个关于在播放完成后调用视频顶部的自定义按钮的问题。 ***.com/questions/33653805/…-in-subview-using-auto-layout
所以。您不想启用默认播放器下一个上一个按钮,但您想在播放器顶部添加其他按钮。对吗?
【参考方案1】:
我确实创建了一个demo project,其中展示了如何将自定义按钮放在 AVPlayer 之上,并且它们会响应点击。
做了什么:
创建的 Xib(使用自动布局)文件包含自定义按钮,例如下一步、重播等。 按钮已连接到打印需要执行的操作的源。喜欢:下一个播放或重播。 添加了观察者,用于观察视频何时播放完毕。 视频播放完毕后,将显示带有按钮的 xib 文件。【讨论】:
感谢您的回复。请告诉我如何调用methof。我确实喜欢这个let vc = ViewController() vc.setupPlayer()
。这里ERROR: 181: timed out after 0.012s (612 613); mMajorChangePending=0
您是否一直收到此错误?可以打赌,该服务器没有响应吗?我看到人们在播放声音时遇到此错误。 forums.developer.apple.com/thread/19902【参考方案2】:
我建议使用 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() 方法。
【讨论】:
我的要求是,一旦播放完成,用户可以选择上一个或下一个视频。在此解决方案中,用户不能单击上一个选项。你能告诉我如何解决这个问题的上一个或下一个项目。它会工作默认 AVPlayerController 的下一个上一个吗? 一旦视频播放完毕,queuePlayer 会自动播放下一个视频,我的理解是您尝试使用的按钮是用于快进和快退媒体资产,这可能不适用于流式传输视频,建议here。您可能需要为播放器添加自定义控制器。 AVQueuePlayer 类没有原生的 previousItem 选项,因为队列中的项目在完成播放后会被删除。您还可以使用 NSNotifications,例如 this以上是关于Swift 2 AVPlayer - 播放下一个视频 上一个视频的主要内容,如果未能解决你的问题,请参考以下文章
Swift 应用程序上的 AVPlayer 显示黑屏,但在播放视频时播放音频
我无法在 swift 2.3 中播放保存在目录路径和 AVPlayer 中的视频
在 AVPlayer [Swift] 中播放 MPMediaItemCollection 中的项目