HLS流URL将不会在AVPlayer中播放

时间:2019-11-03 16:34:18

标签: ios swift avplayer http-live-streaming

我正在尝试从看起来像这样的URL播放hls实时流:“ http://ip.address:port/my%20video.m3u8”。只要网址不包含任何空格,视频就可以正常播放,否则就无法播放。播放器没有记录任何错误,但播放器本身只是一个黑屏。我启用了“允许任意加载”,但仍然没有骰子。当我尝试在Safari浏览器中加载带有空格的网址时,将播放视频。这是我用于加载和播放视频的代码:

DispatchQueue.main.async {
    var player = AVPlayer(url: url!)
    var playerLayer: AVPlayerLayer!

    playerLayer = AVPlayerLayer(player: player)

    playerLayer.videoGravity = .resize
    self.videoView.layer.addSublayer(playerLayer)
    playerLayer.frame = self.videoView.bounds
    player.play()
}

我也觉得奇怪的是,当我尝试将流发送到AVPlayerViewController时,播放器弹出但没有播放。这是我将其发送到视图控制器的方式:

DispatchQueue.main.async {
    let player = AVPlayer(url: urlTwo)
    let playerController = AVPlayerViewController()
    playerController.player = player
    present(playerController, animated: true) {
    player.play()
    }
}

1 个答案:

答案 0 :(得分:0)

请检查m3u8文件是否可能是m3u8中的内容存在某些目录问题。 m3u8文件中提到了.ts段和.key文件。当您将m3u8传递给avplayer时,它会自动获取密钥和.ts文件,并使用提及的密钥解密.ts。只需交叉检查m3u8中的密钥和.ts文件即可。

此外,.key和.ts文件必须与m3u8放在同一文件夹中,否则它将无法获取并且播放器会继续寻找密钥和ts。

#EXTM3U
#EXT-X-TARGETDURATION:12
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-VERSION:4
#EXT-X-KEY:METHOD=AES-128,URI="title.key"
#EXTINF:10.0100,
#EXT-X-BYTERANGE:943584@0
title.ts

类似这样的东西。

注意:有时m3u8和密钥文件具有附加的加密,您需要在运行时对其进行解密。我建议在文本编辑器中将其打开,看看是否可以看到类似上面给定结构的内容。如果它不可读,则需要在运行时首先对其进行解密。如果您正在使用本地服务器并从缓存中加载文件,则在使用Encoding.utf8解密并使用Encoding.macOSRoman解密.key文件之后,保存m3u8文件。否则它将无法正常工作。干杯。