3

我想使用 AVPlayer(在 Swift 中)播放 HLS 流。

此 HLS 流在 Safari 中播放,但在我想使用 AVPlayer 时不播放。

我的代码:

let hlsLink = 'http://thelinktomyHLSmovie'
let player = AVPlayer(URL: NSURL(string: hlsLink)!)

let playerVC = AVPlayerViewController()
playerVC.player = player
presentViewController(playerVC, animated: true) {
    playerVC.player?.play()
}

如果我对 HLS URL 进行 CURL 以找出其中包含哪些类型的流,我会得到:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2328000,CODECS="avc1.66.30,mp4a.40.2",RESOLUTION=1280x720
chunklist_w1751887550_b2328000.m3u8?smil=1
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=128000,CODECS="mp4a.40.2"
chunklist_w1751887550_b128000_ao.m3u8?smil=1

这对我来说似乎没问题。

如果我对其他一些更小更短的流做同样的事情,一切正常。

我已经尝试观察 AVPlayer 和 AVPlayerItem 的状态,但这并没有报告任何有用的信息。

我错过了什么?

更新:

正如我已经说过的,我添加了一个 AVPlayerItem。我还为所有通知的播放器、播放器视图控制器和播放器项目添加了一个通知观察器,并print编辑了输出。这给了我以下信息:

Optional(NSConcreteNotification 0x7fd272bcd600 {name = AVPlayerItemTimebaseChangedNotification; object = <AVPlayerItem: 0x7fd2714f6c40, asset = <AVURLAsset: 0x7fd27144e720, URL = http://hls.streamonecloud.net/vod/amlst:pwlsaeYN1ZuH/playlist.m3u8?smil=1>>})
Optional(NSConcreteNotification 0x7fd272bccaf0 {name = AVPlayerItemBecameCurrentNotification; object = <AVPlayerItem: 0x7fd2714f6c40, asset = <AVURLAsset: 0x7fd27144e720, URL = http://hls.streamonecloud.net/vod/amlst:pwlsaeYN1ZuH/playlist.m3u8?smil=1>>})
Optional(NSConcreteNotification 0x7fd272bcd710 {name = AVPlayerCurrentItemDidChangeNotification; object = <AVPlayer: 0x7fd27157ca60>; userInfo = {
    CurrentDuration =     {
        epoch = 0;
        flags = 17;
        timescale = 0;
        value = 0;
    };
    ReasonForCurrentItemDidChange = ReasonAdvanceAtEnd;
}})
Optional(NSConcreteNotification 0x7fd271759950 {name = AVPlayerItemTimebaseChangedNotification; object = <AVPlayerItem: 0x7fd2714f6c40, asset = <AVURLAsset: 0x7fd27144e720, URL = http://hls.streamonecloud.net/vod/amlst:pwlsaeYN1ZuH/playlist.m3u8?smil=1>>})

我还检查了该项目的accessLog()errorLog()。访问日志不包含任何条目(但确实存在)并且错误日志为零。

我不知道该怎么办了。我上面的日志包含我想要加载的 URL(如果有兴趣的话)(只是我们其中一台服务器上的 Big Buck Bunny)。

4

0 回答 0