gpt4 book ai didi

ios - 在 Swift 中从 URL 播放视频

转载 作者:行者123 更新时间:2023-11-30 11:59:36 25 4
gpt4 key购买 nike

我目前正在尝试通过 Swift 中的 URL 在 iOS 上播放视频。带有“.mp4”或“.m4v”等结尾的 URL 可以正常工作,但当我尝试播放 Dropbox 中的共享视频链接时却无法正常工作。我已经将 Dropbox 链接的结尾更改为“dl=1”,但无论如何都没有发生。

在 WebView 中播放 Youtube 视频对我来说不是一个解决方案,因为我想要原生 iOS 播放器。

有人知道如何播放 Dropbox 中的 URL,或者推荐可行的云服务吗?

谢谢!

最佳答案

我不知道 Dropbox 流媒体规范。但如果 dropbox url 没有像 mp4 一样播放的提示,您可以像代理服务器一样使用 AVAssetLoaderDelegate。

当 url 具有自定义方案时,AVAssetLoaderDelegate 执行。如果您使用“foo”方案,则会调用“shouldWaitForLoadingOfRequestedResource”。并且您应该使用相同的 http header 对 Dropbox 发出另一个请求。

尝试这样

func play() {
let url = URL(string: "foo://bar.mp4")!
let asset = AVURLAsset(url: url)
let playerItem = AVPlayerItem(asset: asset)
asset.resourceLoader.setDelegate(self, queue: nil)
player.replaceCurrentItem(with: playerItem)

player.play()
}

func resourceLoader(_ resourceLoader: AVAssetResourceLoader, shouldWaitForLoadingOfRequestedResource loadingRequest: AVAssetResourceLoadingRequest) -> Bool {
var newRequest = URLRequest(url: URL(string: "dropbox url")!)
newRequest.allHTTPHeaderFields = loadingRequest.request.allHTTPHeaderFields

let sessionTask = URLSession.shared.dataTask(with: newRequest) { data, response, error in
if let responseData = data {
loadingRequest.dataRequest?.respond(with: responseData)
}
loadingRequest.finishLoading() // Let player know that finish loding
}

sessionTask.resume()

return true // Wait for sessionTask response.
}

关于ios - 在 Swift 中从 URL 播放视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47415986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com