同时流式传输和保存视频?

时间:2009-05-25 15:54:20

标签: iphone video-streaming mpmovieplayercontroller

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

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

我想避免和下载然后播放场景。有什么想法吗?

3 个答案:

答案 0 :(得分:11)

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

  1. 使用线程下载数据并将其附加到文件,然后从另一个线程播放该文件。现在,这要求您可以在MPMoviePlayerController中处理EOF事件并暂停播放,直到缓存文件被追加到然后恢复到同一点。
  2. 到目前为止,我看到人们这样做是不行的,因为MPMoviePlayerController无法处理EOF事件。 (尚未对我自己进行测试)[Caching videos to disk after successful preload by MPMoviePlayerController

    1. 从文件中跳过播放并设置本地HTTP服务器并从中传输(在localhost上)。这也没有经过测试。 这个想法是MPMoviePlayerController会更好地从HTTP流中处理丢失数据的事件,然后直接读取文件。 下行可能是效率较低,但我认为这是CPU的小幅增长。我不知道网络接口是否会处理它,但我认为它不是问题。
    2. 我把这个答案留作维基,因为我没有可行的解决方案,但我也想要一个。

答案 1 :(得分:2)

有一种方法可以使这项工作,但您必须编写自己的HTTP Live Streaming下载程序。

基本上,你解析.m3u8文件(这是一个非常简单的标准,但是对于备用流可能会变得棘手,并且流可能会丢失并需要新的播放列表才能继续),然后下载块。 ts格式到本地存储,比如Documents文件夹或Caches等。

然后你必须设置一个本地HTTP服务器,允许MPMoviePlayerController或AVPlayer通过HTTP访问文件(因为它们不会触及本地文件路径),包括一个重新编码的播放列表文件,指向本地文件,您必须自己从原始播放列表中创建。 CocoaHTTPServer非常适用于此。

一旦你完成了所有这些,它就会很棒。在向电影播放器​​呈现本地HTTP URL之前下载第一个或第二个块时,您不可避免地会有一点延迟,但之后您可以无缝下载,录制和预览播放。

祝你好运!

答案 2 :(得分:1)

iPhone正在使用渐进式下载,因此无法保存在设备上。为此,您需要明确下载它,然后播放本地文件夹中的视频。