AVPlayerViewController using audio-only AVPlayer

后端 未结 2 542
面向向阳花
面向向阳花 2020-12-10 05:09

Just starting out with AVKit, and I\'m trying to play some audio. It would be nice to use the new AVPlayerViewController detailed in Mastering Modern Media Playback so that

相关标签:
2条回答
  • 2020-12-10 05:47

    Do not use the AVPlayerViewController, as it is a full screen, black box, video player.

    Instead, create your own view controller with, say, a toolbar and controls readily available in the OS (play, pause, stop, etc.) and hook them to your AVAudioPlayer. This is what the code of your very own view controller may look like:

    Maintain an instance of the player

    var audioPlayer:AVAudioPlayer!
    @IBOutlet weak var playProgress: UIProgressView!
    

    Example: Play

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

    Example: Stop

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

    Example: Track progress

    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)
    }
    

    I have posted a recording and playback example using the methodology outlined in this answer.

    ► Find this solution on GitHub.

    0 讨论(0)
  • 2020-12-10 05:51

    Why reinvent the wheel? Just use AVPlayerViewController's contentOverlayView property. Here you can set an album artwork image, or place any UIView between the QuickTime logo (where the video would be), and the controls.

    Note that you must do this after the AVPlayerViewController has been presented, as its contentOverlayView property will be nil in prepareForSegue

    0 讨论(0)
提交回复
热议问题