【问题标题】:HLS video is not playing on simulator and real deviceHLS 视频无法在模拟器和真实设备上播放
【发布时间】:2018-10-26 08:31:51
【问题描述】:

我正在开发一个 iOS 应用,它只播放 HLS 直播视频。

我的问题是我已经使用 AVPlayer 和视图控制器来设置操场,一切正常,视图控制器已启动,播放器也已启动,但流未启动。该流是一种 .m3u8 类型,在 safari 和 chrome 中工作得非常好。 iOS 不会在模拟器或真实设备上显示视频。

我还搜索了其他 SO 解决方案,但它们都没有对我有用。

 /* Button to play live news streaming */
@IBAction func liveNews(_ sender: Any)
{
    guard let NewsUrl = URL(string: "http://cdn39.live247stream.com/A1TVuk/tv/playlist.m3u8")
        else {
            return }

    /* Create an AV PLAYER and passed the HLS URL to it */
    let player = AVPlayer(url: NewsUrl)
    player.allowsExternalPlayback = true

    /* Setup a player view controller to handle the stream */
    let playerViewController = AVPlayerViewController()
    playerViewController.player = player

    /* Using method of play() to load and play the stream  */
    present(playerViewController, animated: true){
    playerViewController.player?.play()
    }

【问题讨论】:

  • 查看编辑帖
  • 一切似乎都井然有序。你试过检查玩家的error 属性吗?另外,尝试在玩家的status 属性上放置一个观察者。

标签: ios swift xcode avplayer http-live-streaming


【解决方案1】:

我使用的是不受保护的 HTTP URL,因此它不允许设备或模拟器播放它。我放了一个例外,允许不安全的协议让 iOS 流畅地流式传输 HLS。

 <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
        <key>NSExceptionDomains</key>
        <true/>
        <key>NSExceptionAllowsInsecureHTTPLoads</key>
        <true/>
        <key>NSIncludesSubdomains</key>
        <true/>
    </dict>

【讨论】:

  • 根据苹果关于 ATS 的文档,它不可能工作(再读一遍)
【解决方案2】:

在我的情况下,接受的答案似乎不正确,我遇到了同样的问题,并添加了 ATS 特定的所有任意负载配置都可以工作。

在我尝试了一切之后,解决方法是如果 url 从“http”开始,ATS 很容易停止一个 url,所以如果我们有非安全的“http”url,将 http 替换为 url 中的 https 工作对我来说。

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>some.url.to.com.countrycode</key>
        <dict>
            <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
            <false/>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

斯威夫特:

let httpsurl = httpURLString.stringByReplacingOccurrencesOfString("http", withString: "https")

对象-C:

NSString *httpsurl = [httpURLString stringByReplacingOccurrencesOfString:@“http” withString:@“https”];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多