我正在编写一个应用程序,其中一部分允许用户流/播放视频。我想限制功能,以便他们只有在有WiFi连接时才能流式传输视频。然后,我将保存视频,以便当他们只有3G(或更少)连接时,他们无法流式传输视频,只能重播手机上保存的视频。
理想情况下,我想让MPMoviePlayerController播放/播放电影,然后访问电影数据并保存。但是,MPMoviePlayerController api似乎不支持访问电影数据。
我想避免和下载然后播放场景。有什么想法吗?
答案 0 :(得分:11)
我想到了两个解决方案。 这两种解决方案都要求文件采用可以渐进式播放的格式,例如:你不需要整个文件来播放它(但这无论如何都是先决条件)。
到目前为止,我看到人们这样做是不行的,因为MPMoviePlayerController无法处理EOF事件。 (尚未对我自己进行测试)[Caching videos to disk after successful preload by MPMoviePlayerController
我把这个答案留作维基,因为我没有可行的解决方案,但我也想要一个。
答案 1 :(得分:2)
有一种方法可以使这项工作,但您必须编写自己的HTTP Live Streaming下载程序。
基本上,你解析.m3u8文件(这是一个非常简单的标准,但是对于备用流可能会变得棘手,并且流可能会丢失并需要新的播放列表才能继续),然后下载块。 ts格式到本地存储,比如Documents文件夹或Caches等。
然后你必须设置一个本地HTTP服务器,允许MPMoviePlayerController或AVPlayer通过HTTP访问文件(因为它们不会触及本地文件路径),包括一个重新编码的播放列表文件,指向本地文件,您必须自己从原始播放列表中创建。 CocoaHTTPServer非常适用于此。
一旦你完成了所有这些,它就会很棒。在向电影播放器呈现本地HTTP URL之前下载第一个或第二个块时,您不可避免地会有一点延迟,但之后您可以无缝下载,录制和预览播放。
祝你好运!答案 2 :(得分:1)
iPhone正在使用渐进式下载,因此无法保存在设备上。为此,您需要明确下载它,然后播放本地文件夹中的视频。