AVPlayer:在 Swift 中播放“即时”转码音频文件

雷蒙德山

我正在开发一个快速实现 OpenHome 库的项目。我在渲染器提供方工作,这意味着代理在同一网络内发送媒体项目 URL 以进行播放。获取到url后的app需要设置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 实际上会自己处理它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

AVPlayer无法播放FFMPEG的音频文件

来自分类Dev

使用Swift 2.0播放AVPlayer

来自分类Dev

使用Swift播放随机音频文件

来自分类Dev

Swift3 使用 AVPlayer 播放多个视频文件

来自分类Dev

Swift:另一个类文件中的播放器音频文件

来自分类Dev

Swift AVPlayer到耳机

来自分类Dev

Swift Radio Streaming AVPlayer

来自分类Dev

Swift AVPlayer seekToTime问题

来自分类Dev

在Swift中连接两个音频文件并播放它们

来自分类Dev

AVPlayer播放ts文件

来自分类Dev

将AVPlayerItem与Swift中的新AVPlayer关联吗?

来自分类Dev

如何在Swift 5中点击以关闭AVPlayer?

来自分类Dev

如何删除在 Swift 中自动创建的触摸栏 AVPlayer

来自分类Dev

如何快速遍历目录中的多个(音频/ mp3)文件?-Swift,iOS8音板AVPlayer

来自分类Dev

在Cocoa OS X AVPlayer中播放HLS(m3u8)-Swift

来自分类Dev

在Swift 2中按下UINavigation控制器上的“后退”按钮时,让AVPlayer继续播放

来自分类Dev

在Cocoa OS X AVPlayer中播放HLS(m3u8)-Swift

来自分类Dev

Swift Avplayer-轻按“播放”时,停止播放所有其他tableviewcell

来自分类Dev

使用AVPlayer播放CMSampleBufferRef

来自分类Dev

检测何时播放AVPlayer

来自分类Dev

AVPlayer自动播放

来自分类Dev

AVPlayer播放准确的时间

来自分类Dev

检测何时播放AVPlayer

来自分类Dev

暂停/播放 AVPlayer 的问题

来自分类Dev

AVPlayer 无法播放视频

来自分类Dev

如何仅在AVPlayer中的视频文件中播放音频

来自分类Dev

在AVPlayer中显示播放控件

来自分类Dev

如何更改AVPlayer中播放音频的速度?

来自分类Dev

在AVPlayer中录制当前播放视频的流音频