4

我有包含所有 TS 文件的 m3u8 文件。MPMoviePlayerController 通过流服务器上的 http 请求播放它们。但我想在本地获取文件,以便稍后在没有任何连接的情况下再次播放它们。

我设法在我的设备上本地下载了 m3u8 文件和所有 TS 文件,我编辑了 m3u8 文件以指向本地 .ts 而不是 http 文件,但我无法从这个位置读取它们。(VLC可以做得很好)

有没有办法在播放时下载片段(以避免 2 次下载),然后使用 MPMoviePlayerController 或其他方式在本地播放它们。

4

1 回答 1

3

.m3u8 是 Apple HTTP Live Streaming,对吗?我认为您尝试做的事情与该技术的设计背道而驰。您应该公开原始文件并允许下载它。

据我了解,在流式传输的设计中,您无法显式访问这些片段以将它们重新组合在一起。例如,Netflix 通过 Silverlight 使用流媒体,其中一个好处(对 Netflix 而言)是它可以保护数据不会像下载一样被保存。此外,由于 HTTP Live Streaming 允许流在运行中切换比特率,因此它的设计使得每个时间片都可以以任意数量的比特率编码,并且它们都不是规范的。

理论上,可能有一种方法可以收集特定比特率的所有切片并将它们重新编码为单个视频。但是 Apple 的播放 API 不会给你这个机会。

考虑渐进式下载,而不是 HTTP Live Streaming。只需提供原始视频文件(如有必要,将其转码为 iPhone 喜欢的内容)。如果您的服务器配置正确,播放 API 将发出小请求以获取文件的特定块,而不是一次性获取全部内容,这与正确的流式传输非常接近。我希望我能找到我在哪里读到这个,这样我就可以给它起正确的名字。如果您需要快速的解决方案,Amazon S3 设置为以这种方式提供服务。

但请注意,Apple 的文档说,

如果您的应用通过蜂窝网络传输视频,并且视频在 5 分钟内超过 10 分钟的持续时间或超过 5 MB 的数据,则您需要使用 HTTP 实时流式传输。(渐进式下载可用于较小的剪辑。)

于 2011-03-24T21:02:59.183 回答