我正在尝试让AVPlayer播放一个m3u8播放列表,这是一个本地文件。
我已经使用Apple的一个示例播放列表将其缩小到一个简单的测试用例:
https://tungsten.aaplimg.com/VOD/bipbop_adv_fmp4_example/master.m3u8
如果我从远程网址播放此播放列表,AVPlayer可以正常播放。但是,如果我将此播放列表下载到本地文件,然后手动AVPlayer本地文件URL,AVPlayer将无法播放它。它只显示划掉的游戏符号。
有趣的是,这也可以与Safari重复。 Safari将播放远程播放列表,但不播放本地文件。另外值得注意的是,AVPlayer的这种行为在iOS 10.2以及macOS 10.12.1上是相同的。此外,直接播放mp4媒体文件(未包含在播放列表中)似乎没有此问题,因为它既可以从远程URL也可以从本地文件播放。
检查AVPlayerItem.error也不会导致任何有用的事情:
An unknown error occurred (-12865)
The operation could not be completed
有人知道AVPlayer不会播放本地播放列表的任何限制吗?
谢谢。
答案 0 :(得分:3)
m3u / m3u8文件必须存储在服务器上并进行流式传输才能播放(我知道这听起来不合理,但Apple又做了一次)。您必须使用HLS,这基本上意味着您应该将文件存储在服务器上并直接从那里访问它。您也可以使用GCD WebServer等框架在应用内创建本地服务器。
答案 1 :(得分:2)
从iOS 10开始,您可以使用AVAssetDownloadURLSession 下载HLS流。这将导致可以离线播放的本地资产路径。
如果您尝试在应用套装中嵌入视频,那么最好只创建一个MP4。