【问题标题】:AVFoundation loading Google Drive VideoAVFoundation 加载 Google Drive 视频
【发布时间】:2018-06-19 19:22:06
【问题描述】:

任何人成功地使用 AVFoundation、AVPlayer 播放 Google Drive 视频?

Objective-c 或 swift,ios 或 osx 都适合我。

我尝试了什么?

我试过了:

  • iOS Stream video from Google drive Swift 。在这里,如果它尝试从 url 中提取链接,我会被拒绝访问(视频是公开的)。

  • 从谷歌驱动器中提取链接并使用该链接,例如。 video link,但是当我在应用程序中使用它时,什么都没有加载。

  • 在查看其他网络和其他解决方案后尝试了this 之类的方法,但没有成功

链接到video

提前致谢!

【问题讨论】:

  • 你能从这些网址中的任何一个下载视频吗(我的意思是从你的应用程序)
  • 主要思想是流式传输-但我还没有下载。
  • 检查是否可以下载。如果可以的话,我会告诉你如何流式传输它。 ;)
  • 你能给我一些代码吗?感谢您的帮助
  • 您必须确保网址首先指向视频。如果您可以在应用程序中下载可执行的视频文件,则可以流式传输此文件,而不是使用 AVAssetResourceLoaderDelegate 一次性下载所有文件。获取 URL,确保它从您的应用程序下载有效的视频文件可执行文件,然后我将测试并发布代码以流式传输它。如果它不起作用,我编写此代码并发布答案是没有意义的。

标签: ios swift macos avfoundation avplayer


【解决方案1】:

Gdrive 不支持视频流,但支持下载时恢复。

您需要使用带有有效视频 URL 的自定义 AVAssetResourceLoaderDelegate

class GDriveLoader: NSObject, AVAssetResourceLoaderDelegate {
    public func resourceLoader(_ resourceLoader: AVAssetResourceLoader, shouldWaitForLoadingOfRequestedResource loadingRequest: AVAssetResourceLoadingRequest) -> Bool {
        //Here you will put your code to download the bytes requested by AVPlayer. 
        //You can find this info in the loadingRequest.dataRequest.
    }
}

在这个sample project 中,目标c 中有3 个自定义AVAssetResourceLoaderDelegate 的实现。

基本上,一旦您拥有下载 url si 以将其架构替换为自定义架构,您将要做的事情。类似gdrive:// 而不是https://

当您使用此 url 创建您的 AVURLAsset 时,您可以访问新创建的对象的属性 resourceLoader 并调用方法 setDelegate 传递您的 GDriveLoader

使用自定义架构时,AVFoundation 不知道如何获取视频数据,并且会询问资产的资源加载器要做什么。 AVPlayer当前读取的每个数据块都会多次查询resourceLoader(_ resourceLoader: AVAssetResourceLoader, shouldWaitForLoadingOfRequestedResource loadingRequest: AVAssetResourceLoadingRequest)方法。

【讨论】:

  • 但是话又说回来,这会将视频下载到硬盘而不删除?
  • 没有。它只会在内存中下载 avplayer 所需的字节。使用 DataTask,您必须决定如何处理获取的数据。如果您不将它们保存在磁盘上,它们将不会在磁盘上。阅读方法中的 cmets。您必须编写请求以获取资源加载器请求的字节。在 loadingRequest.dataRequest 你会找到你需要的字节的偏移量和长度。
猜你喜欢
  • 1970-01-01
  • 2016-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多