我试图让用户能够循环播放视频,即时更改AVPlayer URL而无需刷新视图.但是,现在我只是在每次播放视频时实例化AVPlayer对象(导致音频互相播放),我觉得这不是最好的方法.有没有更类似于在imageView中更改图像的方法?
这是我播放剪辑的代码:
player = AVPlayer(URL: fileURL)
playerLayer = AVPlayerLayer(player: player)
playerLayer!.frame = self.view.bounds
self.view.layer.addSublayer(playerLayer!)
player!.play()
Run Code Online (Sandbox Code Playgroud)
Mat*_*ley 21
不要使用AVPlayer
.
而是使用AVQueuePlayer
允许您从队列中插入和删除项目的.
//create local player in setup methods
self.localPlayer = AVQueuePlayer.init()
Run Code Online (Sandbox Code Playgroud)
添加您可以简单使用的项目
//optional: clear current queue if playing straight away
self.localPlayer.removeAllItems()
//get url of track
let url : URL? = URL.init(string: "http://urlOfItem")
if url != nil {
let playerItem = AVPlayerItem.init(url: url!)
//you can use the after property to insert
//it at a specific location or leave it nil
self.localPlayer.insert(playerItem, after: nil)
self.localPlayer.play()
}
Run Code Online (Sandbox Code Playgroud)
AVQueuePlayer
支持所有功能,AVPlayer
但具有添加和删除队列中的项目的附加功能.
Mik*_*keG -2
我能够通过这样做来实现你正在寻找的东西......
我有一个歌曲名称的 tableView,其 mp3 文件存储在 Parse.com 上。在didSelectRowAtIndexPath
我做...
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
SelectedSongNumber = indexPath.row
grabSong()
}
func grabSong () {
let songQuery = PFQuery(className: "Songs")
songQuery.getObjectInBackgroundWithId(iDArray[SelectedSongNumber], block: {
(object: PFObject?, error : NSError?) -> Void in
if let audioFile = object?["SongFile"] as? PFFile {
let audioFileUrlString: String = audioFile.url!
let audioFileUrl = NSURL(string: audioFileUrlString)!
myAVPlayer = AVPlayer(URL: audioFileUrl)
myAVPlayer.play()
currentUser?.setObject(audioFileUrlString, forKey: "CurrentSongURL")
currentUser?.saveInBackground()
}
})
}
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我选择一行,歌曲开始播放。如果我等待几秒钟并选择不同的行,AVPlayer 会播放我选择的新单元格中的歌曲,并且不会在另一首歌曲上播放一首歌曲。我的 AVPlayer 被声明为公共变量,供所有类查看。
归档时间: |
|
查看次数: |
7697 次 |
最近记录: |