【发布时间】:2016-11-03 09:03:53
【问题描述】:
您好,我想使用 swift 播放 m3u8 文件。我的m3u8文件结构是这样的。
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM- INF:BANDWIDTH=814508,CODECS="avc1.66.51,mp4a.40.34",RESOLUTION=720x576 chunklist_w247403833.m3u8
但这不是在播放。但是,如果我在here 中使用苹果示例 m3u8 文件,它会播放。但上面的 m3u8 文件也在 android 应用程序和 windows vlc 播放器中播放。这会是什么原因?请帮我。 谢谢
代码
let videoURL = NSURL(string: "http://74.208.128.124:1935/live/myStream/playlist.m3u8")//http://devstreaming.apple.com/videos/wwdc/2016/102w0bsn0ge83qfv7za/102/hls_vod_mvp.m3u8
let player = AVPlayer(url: videoURL! as URL)
let playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = self.view.bounds
self.view.layer.addSublayer(playerLayer)
player.play()
}
添加 KVO
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath=="status"
{
if(player.status==AVPlayerStatus.readyToPlay)
{
print(player.status)
}
else if(player.status==AVPlayerStatus.failed)
{
print("ERROR-----------", player.status)
}
}
}
【问题讨论】:
-
你的代码是什么?你收到
AVPlayerStatus和相应的错误了吗? -
尝试添加KVO监听状态,就像那里stackoverflow.com/questions/5401437/…我想寻找“KVO + Swift”+这个问题可能会对你有所帮助。您也许可以得到失败的原因。
-
谢谢。我添加了 KVO,它从不打印我的错误日志,它进入 if(player.status==AVPlayerStatus.readyToPlay) 并且它只是在日志中打印 AVPlayerStatus
-
如果是
AVPlayerStatus.failed,请尝试阅读player.error?否则,看看那里 stackoverflow.com/questions/24004313/… 它可能会有所帮助。
标签: ios swift m3u8 avplayerviewcontroller