ios - AVPlayer:在 Swift 中播放 “on the fly” 转码音频文件

标签 ios swift avfoundation avplayer

我正在开发一个以 swift 实现 OpenHome 库的项目。我正在渲染器提供商方面工作,这意味着代理会在同一网络内发送媒体项 URL 进行播放。应用程序获取url后需要设置AVPlayer并播放。

提供的网址如下:

如果 URL 包含“orig”,则表示该文件与扩展名匹配。 另一方面,如果 URL 包含“trans”,则意味着提供的文件将与扩展名匹配,但它将在转换时即时提供。

当我输入 URL 时,该技术适用于 Sonos、Android 和 Chrome 浏览器。然而,它不适用于 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

谢谢。

最佳答案

事实证明,提供商方与 Apple 媒体服务不兼容。 AVPlayer 实际上会自己处理。

关于ios - AVPlayer:在 Swift 中播放 “on the fly” 转码音频文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52660823/

相关文章:

iphone - 使用 AVAssetReader 和 AVAssetWriter 将 *.mp3 与 *.mov 文件合并

ios - "self"在 iOS 5.1 上的调试器中不可用

ios - AVPlayer 中的系统错误导致播放器的系统范围停止播放

iphone - UIButton 上的 iOS 可拉伸(stretch)图像显示不稳定的角

ios - 如何停止节点而不是让它在 1 秒后再次移动?

ios - 用动画改变UIScrollView的frame后,scrollView无法在水平方向滚动

Swift 无法构造参数类型为 Int64 的字符串

swift - AVCapturePhotoOutput 不提供预览缓冲区

iphone - UIAction Sheet 和 Alert 问题

ios - 我无法向我的应用发送 Firebase Cloud Messaging 推送通知我按照步骤操作但无处可去