AVPlayerViewController с использованием только аудио AVPlayer

ios swift audio avfoundation avkit

3402 просмотра

2 ответа

Просто начинаю с AVKit, и я пытаюсь воспроизвести звук. Было бы неплохо использовать новый AVPlayerViewController, подробно описанный в разделе « Освоение современного воспроизведения мультимедиа», чтобы у меня был готовый пользовательский интерфейс воспроизведения / паузы / поиска. В основном у меня есть раскадровка с контейнерным представлением, в которое встроен переход к AVPlayerViewController. Тогда я использую:

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, где будет находиться видео. Мне интересно, есть ли способ сделать его более похожим на приложение Музыка или Подкасты.

Автор: davidfmatheson Источник Размещён: 12.11.2019 09:26

Ответы (2)


6 плюса

Не используйте 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 и дополнительную информацию о Swift Recipes .

Автор: SwiftArchitect Размещён: 17.11.2015 06:59

6 плюса

Зачем изобретать велосипед? Просто используйте AVPlayerViewController«s contentOverlayViewсобственность. Здесь вы можете установить изображение обложки альбома или поместить его UIViewмежду логотипом QuickTime (где будет находиться видео) и элементами управления.

Обратите внимание, что вы должны сделать это после того, AVPlayerViewControllerкак был представлен, так как его contentOverlayViewсвойство будет ноль вprepareForSegue

Автор: JAL Размещён: 17.11.2015 10:25
Вопросы из категории :
32x32