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