3

我正在尝试让 AVPlayer 播放作为本地文件的 m3u8 播放列表。

我使用 Apple 的示例播放列表之一将其缩小为一个简单的测试用例:

https://tungsten.aaplimg.com/VOD/bipbop_adv_fmp4_example/master.m3u8

如果我从远程 url 播放这个播放列表,AVPlayer 播放得很好。但是,如果我将此播放列表下载到本地文件,然后将本地文件 URL 交给 AVPlayer,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 不会播放本地播放列表的任何限制吗?

谢谢你。

4

2 回答 2

7

m3u/m3u8 文件必须存储在服务器上并流式传输才能播放(我知道这听起来不合理,但 Apple 又这样做了)。您必须使用HLS,这基本上意味着您应该将文件存储在服务器上并从那里直接访问它。您也可以使用GCD WebServer 之类的框架在您的应用程序中创建本地服务器。

于 2017-01-05T22:05:46.593 回答
4

从 iOS 10 开始,您可以使用AVAssetDownloadURLSession下载 HLS 流。这将导致可以离线播放的本地资产路径。

如果您尝试在您的应用程序包中嵌入视频,您最好只创建一个 MP4。

于 2017-01-05T22:33:39.453 回答