更改AVPlayer当前项目(项目URL)并开始播放

时间:2017-03-14 15:28:05

标签: ios swift uitableview avfoundation avplayer

我有一个UITableView,其帖子包含mp3文件的URL。点击UITableViewCell中的按钮,我计划获取AVPlayer的单例实例。如何将新URL分配给AVPlayer并开始播放? AVPlayer的currentItem只是一个{get}属性。

这就是我现在所拥有的。

import Foundation
import AVFoundation

class StreamMusicPlayer: AVPlayer {
    private override init(){
        super.init()
    }

    static func shared() -> AVPlayer{
        return AVPlayer()
    }

    func playItem(at itemURL: URL) {
        if StreamMusicPlayer.shared().isPlaying {
            StreamMusicPlayer.shared().pause()
        }

        //Change url of AVPlayerItem
        //And and assign it to shared() instance then begin playback
    }
}

extension AVPlayer {
    var isPlaying: Bool {
        return rate != 0 && error == nil
    }
}

1 个答案:

答案 0 :(得分:1)

这可能就是你想要的。它并不完美。

class StreamMusicPlayer: AVPlayer {
    private override init(){
        super.init()
    }

    static var shared = AVPlayer()

    static func playItem(at itemURL: URL) {
        StreamMusicPlayer.shared = AVPlayer(url: itemURL)
        StreamMusicPlayer.shared.play()
    }
}

extension AVPlayer {
    var isPlaying: Bool {
        return rate != 0 && error == nil
    }
}

我喜欢将静态函数更改为普通变量。每次访问.shared()时,它都会初始化并返回一个新实例。

然后你可以这样做:

StreamMusicPlayer.playItem(at: URL(string: "http://antoon.io/e/mp3/")!)
// Delay so you can hear it changing
StreamMusicPlayer.playItem(at: URL(string: "http://antoon.io/e/mp3/2.mp3")!)