簡體   English   中英

AVPlayerViewController 使用純音頻 AVPlayer

[英]AVPlayerViewController using audio-only AVPlayer

剛開始使用 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 符號。 我想知道是否有辦法讓它看起來更像音樂或播客應用程序。

為什么要重新發明輪子? 只需使用AVPlayerViewControllercontentOverlayView屬性。 您可以在此處設置專輯插圖圖像,或在 QuickTime 徽標(視頻所在的位置)和控件之間放置任何UIView

請注意,您必須在AVPlayerViewController出現后執行此操作,因為它的contentOverlayView屬性在prepareForSegue將為 nil

不要使用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 上找到此解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM