SWIFT:加快视频下载速度的技巧?

nic*_*rno 6 video ios firebase swift firebase-storage

我有一个 iOS 应用程序,可以从 Firebase (Cloud Firestore) 下载视频,其提要类似于 Instagram/TikTok。但是,在用户滚动到视频之前,我无法让视频随时可用。任何提示都会非常有帮助。抖音是如何做到的?他们是否会在加载时将一大堆视频保存到后台文件中?

我当前的视频下载管理器:

  1. 检查视频是否已加载到临时缓存或本地文件中,如果没有:
  2. 下载视频url(查看Firebase的downloadURL)
  3. 返回视频 url 以供立即使用(在播放之前仍然有一些缓冲延迟)
  4. 将视频 URL 存储在临时缓存中(以防用户滚动离开并返回)
  5. 开始将视频写入文件并在完成后从临时缓存中删除视频

在当前设置下,视频下载后可以高效播放。但是,如果视频尚未下载并且用户滚动到该视频,则上面的 (#1/2) 需要很长时间才能完成并缓冲足够的播放时间。我已经在使用操作队列并将当前视频优先于任何其他背景视频 - 但这仍然不够快。

当用户滚动时,TikTok 视频几乎总是随时可用。有什么秘密?

感谢您的帮助!

Saj*_*obi 2

我有一些建议给你:

1-当您加载流时,您应该开始在后台线程中预热视频 URL。

2-尽量不要下载完整的文件,而只缓存或缓冲少量文件,例如1MB。

3- 使用 .mp4 文件,即使视频未完全下载,您也可以播放它们。

4-当视频开始播放时,根据缓冲速率或视频长度开始完全下载。

5-尝试使用文件大小和比特率最小的视频。当您创建它们时,尝试将它们转换为方便的格式。我的建议是:

Video:
video bit rate -> 12.5
video size -> 960x540
conversion format -> h264

Sound:
rate -> 44100
encoding bit rate -> 96000
Run Code Online (Sandbox Code Playgroud)

6-开始播放时检查视频的缓冲范围是否超过 25%。

7-不要忘记在临时文件夹中进行下载并定期清理该文件夹。这有助于避免应用程序体积过大,不这样做的后果可能会导致用户删除您的应用程序!

对于 iOS 开发者:这是我的videoConverter。另外,您可以使用这个缓存视频播放器GSPlayer