AVPlayer: Воспроизведение транскодированного аудио-файла «на лету» в Swift - PullRequest
0 голосов
/ 05 октября 2018

Я работаю над проектом, который реализует библиотеку OpenHome в swift.Я работаю на стороне провайдера Renderer, что означает, что прокси-серверы отправляют URL-адреса медиа-элементов в пределах одной сети для воспроизведения.Приложение после получения URL-адреса должно установить AVPlayer и воспроизвести.

Предоставленные URL-адреса выглядят следующим образом:

Если URL-адрес содержит «orig», это означает, что файл соответствует расширению.С другой стороны, если URL-адрес содержит «trans», это означает, что указанный файл будет соответствовать расширению, но он будет передаваться на лету во время преобразования.

Этот метод работает с Sonos, Android и Chromeбраузеры, когда я ввожу URL.Однако он не работает ни с iOS, ни с Safari (учитывая, что я делаю это правильно).

Я прилагаю тестовый ViewController, который обрабатывает процесс

import UIKit
import AVFoundation

class ViewController: UIViewController {

    private var avAudioPlayer:AVPlayer!
    private var avAudioSession:AVAudioSession = AVAudioSession.sharedInstance()

    override func viewDidLoad() {
        super.viewDidLoad()

        try! avAudioSession.setCategory(.playback, mode: .default, options: [])
        try! avAudioSession.setActive(true)

        let urlString = "http://192.168.1.123:8088/ext/trans/audio/2249.mp3"
        let url = URL(string: urlString)!
        avAudioPlayer = AVPlayer(url: url)


        avAudioPlayer?.addObserver(self, forKeyPath: "status", options: [], context: nil)

    }

    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {

        if keyPath == "status"{

            switch avAudioPlayer.status{
            case .readyToPlay:
                print("Hey: Ready To Play")
                avAudioPlayer.play()
            case .failed:
                print("FAILED OH Nooo!")
            case .unknown:
                print("Something went wrong but ...")
            }

        }

    }

}
  • NSAllowsArbitraryLoads установленов true

Я прилагаю некоторые данные о состоянии:

print("A Reason = \(String(describing: avAudioPlayer.reasonForWaitingToPlay?.rawValue))")
-->A Reason = "AVPlayerWaitingWhileEvaluatingBufferingRateReason"

print("TIME Control Status = \(avAudioPlayer.timeControlStatus.rawValue)")
-->TIME Control Status = 1

Спасибо.

1 Ответ

0 голосов
/ 17 октября 2018

Оказывается, что сторона поставщика не была совместима с медиа-сервисами Apple.AVPlayer фактически справится с этим самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...