AVPlayerViewController使用仅音频的AVPlayer

12

刚开始使用AVKit,我正在尝试播放一些音频。希望能够使用在精通现代化媒体回放中详细介绍的新AVPlayerViewController,这样我就有了一个现成的播放/暂停/搜寻UI。基本上,我有一个故事板,其中包含一个容器视图,该容器视图具有到AVPlayerViewController的嵌入式segue。然后我使用:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if (segue.identifier == "embedAudio") {
        var playerViewController:AVPlayerViewController = segue.destinationViewController as AVPlayerViewController

        playerViewController.player = AVPlayer(URL: NSURL(string: "http://dts.podtrac.com/redirect.mp3/files.serialpodcast.org/sites/default/files/podcast/1420057326/serial-s01-e01.mp3"))
    }
}

它可以嵌入并播放,但是视频的位置会有一个大黑色QuickTime符号。 我想知道是否有办法让它看起来更像音乐或播客应用程序。

2个回答

13

为什么要重复造轮子呢?只需使用AVPlayerViewControllercontentOverlayView属性。在此处,您可以设置专辑封面图像或将任何UIView放置在快速时间标志(视频所在的位置)和控件之间。

请注意,在AVPlayerViewController已被呈现后才能这样做,因为在prepareForSegue中它的contentOverlayView属性将为空。


9
不要使用AVPlayerViewController,因为它是一个全屏的黑盒子视频播放器。
相反,创建自己的视图控制器,例如,在操作系统中已经准备好的工具栏和控件(播放、暂停、停止等)并将其连接到你的AVAudioPlayer。这是你自己的视图控制器代码可能看起来像的样子:
保持播放器实例。
var audioPlayer:AVAudioPlayer!
@IBOutlet weak var playProgress: UIProgressView!

例子:玩耍

@IBAction func doPlayAction(_ sender: AnyObject) {
    do {
        try audioPlayer = AVAudioPlayer(contentsOf: audioRecorder.url)
        audioPlayer.play()
    } catch {}
}

例子:停止

@IBAction func doStopAction(_ sender: AnyObject) {
    if let audioPlayer = self.audioPlayer {
        audioPlayer.stop()
    }
}

示例:跟踪进度

func playerProgress() {
    var progress = Float(0)
    if let audioPlayer = audioPlayer {
        progress = ((audioPlayer.duration > 0)
            ? Float(audioPlayer.currentTime/audioPlayer.duration)
            : 0)
    }
    playProgress.setProgress(progress, animated: true)
}

我使用本答案中概述的方法,发布了一个使用录音播放的例子。

预览

►在GitHub上找到这个解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接