我正在编写一个应用程序,其中一部分允许用户流/播放视频。我想限制该功能,以便他们只能在有 WiFi 连接的情况下传输视频。然后我将保存视频,以便当他们只有 3G(或更少)连接时,他们无法流式传输视频,只能重播手机上保存的视频。

理想情况下,我想让 MPMoviePlayerController 来流/播放电影,然后访问电影数据并保存它。但是,MPMoviePlayerController api 似乎不支持访问电影数据。

我想避免下载然后播放的情况。有任何想法吗?

有帮助吗?

解决方案

我想到了两种解决方案。这两种解决方案都要求文件采用可以渐进播放的格式,例如您不需要整个文件就可以播放它(但这无论如何都是先决条件)。

  1. 使用一个线程下载数据并将其附加到文件中,然后从另一个线程播放该文件。现在,这要求您可以在 MPMoviePlayerController 中处理 EOF 事件并暂停播放,直到附加缓存文件,然后在同一点恢复播放。

到目前为止,我看到人们这样做是行不通的,因为 MPMoviePlayerController 无法处理 EOF 事件。(我自己还没测试过)[MPMoviePlayerController 成功预加载后将视频缓存到磁盘

  1. 跳过从文件播放并设置本地 HTTP 服务器并从中进行流传输(在本地主机上)。这也没有经过测试。这个想法是 MPMoviePlayerController 可以比直接读取文件更好地处理 HTTP 流中丢失数据的事件。缺点可能是效率较低,但我认为这只是 CPU 的轻微增加。我不知道网络接口是否可以处理它,但我假设这不是问题。

我将此答案保留为维基百科,因为我没有可行的解决方案,但我也想要一个。

其他提示

有一种方法,使这项工作,但你必须编写自己的HTTP实时流下载。

基本上,你解析.m3u8文件(这是一个非常简单的标准,但可能很麻烦交替流和输出流将简单地退出,需要一个新的播放列表,继续的可能性),然后下载块英寸TS格式到本地存储,说文档文件夹或高速缓存等。

然后你必须建立一个本地HTTP服务器允许的MPMoviePlayerController或AVPlayer访问文件通过HTTP(因为他们不会碰本地文件路径),包括指向重新编码的播放列表文件本地文件,你将不得不从原来的播放列表创建自己。 CocoaHTTPServer这个伟大工程。

一旦你完成了这一切,它的伟大工程。这是不可避免的,而你介绍当地的HTTP URL的电影播放之前下载的第一块或两个,你得到一点点延迟,但在那之后你得到无缝下载,录制和预览播放。

祝你好运!

iPhone使用的渐进式下载,所以它不会在设备上保存。对于您需要显式下载,然后从本地文件夹播放视频。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top