iOS Быстрый поток аудио из shoutcast или icecast с использованием AVFoundation - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь создать приложение для радио, которое получает звук от Shoutcast или Icecast. Мне удалось воспроизвести музыку c с URL-адреса http, который заканчивается на mp3 (например: https://soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3). Я не могу выполнять потоковую передачу с такого URL-адреса (например: http://hydra.shoutca.st: 8057 / autodj ). Должно быть что-то, чего мне не хватает.

import UIKit
import AVFoundation

class ViewController: UIViewController {

    var player: AVPlayer!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.

        //https://soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3 - this works
        let url = URL(string: "http://edge2-b.exa.live365.net/a36007")
        player = AVPlayer(url: url!)

    }

    @IBAction func playButtonPressed(_ sender: Any) {
        player.play()
    }

    @IBAction func stopButtonPressed(_ sender: Any) {
        player.pause()
    }
}

1 Ответ

0 голосов
/ 27 мая 2020

Посмотрев логи; Я нашел проблему. Если вы используете http, но у вас есть файл mp3 для воспроизведения, он будет воспроизводиться. Если у вас его нет, вам нужно использовать https для таких потоков, как Shoutcast и Icecast. Вот что говорится в журналах.

2020-05-27 10:42:11.562431-0400 HotcueRadio[5134:272722] App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.
2020-05-27 10:42:11.562576-0400 HotcueRadio[5134:272722] Cannot start load of Task <7AF598D9-A7AD-438C-99A1-8095A1F8CEC7>.<1> since it does not conform to ATS policy
2020-05-27 10:42:11.581133-0400 HotcueRadio[5134:272736] Task <7AF598D9-A7AD-438C-99A1-8095A1F8CEC7>.<1> finished with error [-1022] Error Domain=NSURLErrorDomain Code=-1022 "The resource could not be loaded because the App Transport Security policy requires the use of a secure connection." UserInfo={NSLocalizedDescription=The resource could not be loaded because the App Transport Security policy requires the use of a secure connection., NSErrorFailingURLStringKey=http://edge2-b.exa.live365.net/a36007, NSErrorFailingURLKey=http://edge2-b.exa.live365.net/a36007, _NSURLErrorRelatedURLSessionTaskErrorKey=(
    "LocalDataTask <7AF598D9-A7AD-438C-99A1-8095A1F8CEC7>.<1>"
), _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <7AF598D9-A7AD-438C-99A1-8095A1F8CEC7>.<1>, NSUnderlyingError=0x60000011c510 {Error Domain=kCFErrorDomainCFNetwork Code=-1022 "(null)"}}

Итак, я добавил https к URL-адресу, и он работает.

...