【问题标题】:Playing a live TuneIn Radio URL iOS Swift播放现场 TuneIn Radio URL iOS Swift
【发布时间】:2018-10-11 07:09:42
【问题描述】:

我正在开发一个应用程序,该应用程序旨在通过使用 TuneIn URL 播放生活广播。在 TuneIn 中,API 中有一个 http get 请求,它提供了一个包含所有 URL 及其比特率的 JSON。

所以 http://opml.radiotime.com/Tune.ashx?id=s150147&formats=aac,mp3&render=json

会回来

{ "head": { "status": "200"}, "body": [
 { "element" : "audio", 
"url": "http://player.absoluteradio.co.uk/tunein.php?i=a664.aac",
"reliability": 95,
"bitrate": 64,
"media_type": "aac",
"position": 0,
"player_width": 529,
"player_height": 716,
"guide_id": "e89279187",
"is_direct": false }, { "element" : "audio", 
"url": "http://player.absoluteradio.co.uk/tunein.php?i=a6low.mp3",
"reliability": 78,
"bitrate": 48,
"media_type": "mp3",
"position": 0,
"player_width": 529,
"player_height": 716,
"guide_id": "e89279188",
"is_direct": false }, { "element" : "audio", 
"url": "http://player.absoluteradio.co.uk/tunein.php?i=a624.aac",
"reliability": 29,
"bitrate": 24,
"media_type": "aac",
"position": 0,
"player_width": 529,
"player_height": 716,
"guide_id": "e89279186",
"is_direct": false }] }

我的第一种方法是使用给定的 URL 设置一个 AVPlayer,但它没有播放。

此外,如果您在 chrome 浏览器中复制并粘贴 URL,它会开始下载一个需要很长时间的文件。

用wireshark检查,我终于发现streaming URL是一个不同的,并且在你第一次请求文件时提供了Header。

我知道这已经在 android 上通过拦截标头完成了,但是,是否可以在 iOS 上做同样的事情?

我一直在寻找一些库,MobileVLCKit 似乎是一个候选者,但不确定我如何冒着我的应用被拒绝的风险。

既然现在流媒体是非常流行的动作,我能否以“苹果方式”实现这一点

谢谢

【问题讨论】:

    标签: ios swift avfoundation avkit


    【解决方案1】:

    所有想要从 TUNEIN 流式传输的人

    事实证明,如果你这样设置 AVPlayer:

    class ViewController: UIViewController, AVAssetResourceLoaderDelegate {
    
        let urlFile = URL(string:"http://opml.radiotime.com/Tune.ashx?id=s150147&formats=aac,mp3")!
    
        private var avPlayer:AVPlayer!
        private var avAudioSession:AVAudioSession = AVAudioSession.sharedInstance()
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            try! avAudioSession.setCategory(.playback, mode: .default, options: [])
            try! avAudioSession.setActive(true)
    
            let audioURLAsset = AVURLAsset(url: urlFile)
            //audioURLAsset.resourceLoader.setDelegate(self, queue:DispatchQueue.init(label: "MY QUEUE"))
            avPlayer = AVPlayer(playerItem: AVPlayerItem(asset: audioURLAsset))
    
            avPlayer.play()
    
        }
    
    }
    

    它会播放,但您需要在 info.plist 中允许任意加载

    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>
    

    而且成功了!

    添加

    我还发现有些链接无法播放,特别是那些包含 .pls 文件的链接(尽管 URL 保持不变)。 iOS 和 safari 都尝试解决它们,但出现插件不兼容的错误。

    我发现如果我对 URL 进行 URL 请求,返回的数据是一个由换行符分隔的链接列表。

    所以: 我的连接助手类:

    class URLConnectionHelper: NSObject {
    
        static func getResponse(fromURL url:URL?)->Data?{
    
            guard let url = url else{ return nil }
    
            var result:Data? = nil
            let semaphore = DispatchSemaphore(value: 0)
    
            URLSession.shared.dataTask(with: url) { (data, response, error) in
    
                //guard let data = data else{ return nil}
                result = data
                semaphore.signal()
    
                }.resume()
    
            semaphore.wait()
    
            return result
    
        }
    
    }
    

    并且从类中调用函数:

    guard let dataRadioItem = URLConnectionHelper.getResponse(fromURL: urlFile) else {return}
    
        var urlArray = [URL]()
        if let stringData = String(data: dataRadioItem, encoding: String.Encoding.utf8){
            print("String Data: \(stringData)")
    
            stringData.enumerateLines { (line, _) -> () in
                if let urlLine = URL(string: line){
                    print("added = \(line)")
                    urlArray.append(urlLine)
                }
    
            }
    
        }
    
        if urlArray.count > 0{
            urlFile = urlArray.first!
        }
    

    字符串数据的结果:

    String Data: http://player.absoluteradio.co.uk/tunein.php?i=a664.aac
    http://player.absoluteradio.co.uk/tunein.php?i=a6.mp3
    http://player.absoluteradio.co.uk/tunein.php?i=a6low.mp3
    http://player.absoluteradio.co.uk/tunein.php?i=a624.aac
    

    【讨论】:

      猜你喜欢
      • 2017-06-01
      • 1970-01-01
      • 2016-04-06
      • 2014-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多