iPhone MPMoviePlayerController :在流式传输时下载文件并在本地播放它们

Posted

技术标签:

【中文标题】iPhone MPMoviePlayerController :在流式传输时下载文件并在本地播放它们【英文标题】:iPhone MPMoviePlayerController : download files while streaming en play them locally 【发布时间】:2011-07-22 04:13:14 【问题描述】:

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

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

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

【问题讨论】:

好问题 - afaik,MPMoviePlayerController 无法从本地 URL(文件系统)播放 m3u8 流,因为 MPMoviePlayerController 的网络部分将始终尝试从 m3u8 sn 协商“正确”带宽/配置文件-p - 该部分似乎无法在本地工作并成为阻碍。如果这是正确的(正如我所假设的那样),那么您将必须在您的服务器上提供替代文件 -> MP4。 【参考方案1】:

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

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

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

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

但要小心,Apple's docs 说,

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

【讨论】:

谢谢,我注定要下载 mp4。它将是 2 次下载,一个完整的 mp4 文件和其他分段文件,具体取决于客户的意愿

以上是关于iPhone MPMoviePlayerController :在流式传输时下载文件并在本地播放它们的主要内容,如果未能解决你的问题,请参考以下文章

苹果手机型号对应表

在 iphone 5 和 iphone 6 中动态设置字体大小

Surface Pro4链接不上iphone手机的热点

iphone13和12外观的区别 iphone13和iphone12对比哪个好

为 iPhone 和 iPhone 4 开发之间有啥变化?

iPhone 5 与 iPhone 4 的图像命名