Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用纯音频AVPlayer的AVPlayerViewController_Ios_Swift_Audio_Avfoundation_Avkit - Fatal编程技术网

Ios 使用纯音频AVPlayer的AVPlayerViewController

Ios 使用纯音频AVPlayer的AVPlayerViewController,ios,swift,audio,avfoundation,avkit,Ios,Swift,Audio,Avfoundation,Avkit,刚从AVKit开始,我试着播放一些音频。最好使用中详细介绍的新的AVPlayServiceWController,这样我就有了一个现成的play/pause/seek用户界面。我基本上有一个带有容器视图的故事板,其中有一个到avplayervewcontroller的嵌入序列。然后我使用: override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if (segue.identifier =

刚从AVKit开始,我试着播放一些音频。最好使用中详细介绍的新的AVPlayServiceWController,这样我就有了一个现成的play/pause/seek用户界面。我基本上有一个带有容器视图的故事板,其中有一个到avplayervewcontroller的嵌入序列。然后我使用:

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符号,视频将在那里。我想知道是否有办法让它看起来更像音乐或播客应用程序。

不要使用avplayervewcontroller,因为它是全屏、黑匣子、视频播放器

相反,您可以创建自己的视图控制器,例如,使用工具栏和操作系统中现成的控件(播放、暂停、停止等),并将它们挂接到
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)
}

我已经发布了一个录制回放示例,使用了此答案中概述的方法


► 在上找到此解决方案。

为什么要重新发明轮子?只需使用
avplayervewcontroller
contentOverlayView
属性即可。在这里,您可以设置相册插图图像,或将任何
UIView
放置在QuickTime徽标(视频所在位置)和控件之间

请注意,必须在显示
avplayervewcontroller
后执行此操作,因为其
contentOverlayView
属性在
prepareforsgue