我正在尝试从看起来像这样的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()
}
}
答案 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文件。否则它将无法正常工作。干杯。