Swift中的视频播放来自URL

时间:2017-11-21 14:51:18

标签: ios swift url video-streaming dropbox

我目前正在尝试通过Swift中的网址在iOS上播放视频。带有结尾的网址,例如" .mp4"或" .m4v"工作,但当我尝试从Dropbox播放共享视频链接时,它没有。 我已经将Dropbox链接的结尾更改为" dl = 1"但无论如何都没有发生。

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

有没有人知道如何从Dropbox播放网址,或者推荐使用云端服务?

谢谢!

1 个答案:

答案 0 :(得分:0)

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

当url具有自定义方案时,

AVAssetLoaderDelegate执行。 如果使用“foo”方案,将调用'shouldWaitForLoadingOfRequestedResource'。并且您应该再次请求具有相同http标头的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.
}