从服务器视频网址swift中提取缩略图

时间:2017-10-24 13:06:39

标签: ios swift video video-thumbnails

想要从视频网址获取缩略图我遵循此代码,建议在大多数SO问题中使用:

import AVFoundation

private func thumbnailForVideoAtURL(url: NSURL) -> UIImage? {

    let asset = AVAsset(URL: url)
    let assetImageGenerator = AVAssetImageGenerator(asset: asset)

    var time = asset.duration
    time.value = min(time.value, 2)

    do {
        let imageRef = try assetImageGenerator.copyCGImageAtTime(time, actualTime: nil)
        return UIImage(CGImage: imageRef)
    } catch let error {
        print(error)
        return nil
    }
}

然后我的viewdidload方法是这样的:

override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        let url = NSURL(string: "https://www.youtube.com/watch?v=HrKwx8EdSAE")

        if let thumbnailImage = generateThumnail(url!) {
            print("hello");
            self.imageView.image = thumbnailImage;
        }


        self.view.addSubview(imageView);
    }

但是我的所有视频网址都出现了此错误:

Error Domain=AVFoundationErrorDomain Code=-11850 "Operation Stopped" UserInfo={NSUnderlyingError=0x7fb4a3c04870 {Error Domain=NSOSStatusErrorDomain Code=-12939 "(null)"}, NSLocalizedFailureReason=The server is not correctly configured., NSLocalizedDescription=Operation Stopped}

任何人都可以建议我在哪里做错了或者此代码只适用于本地视频?如果有任何替代方案,请建议。

1 个答案:

答案 0 :(得分:0)

我去了很多地方找到了解决方案。

基本上,您必须首先获取视频ID的列表(如果需要),然后使用以下内容获取返回返回带有实际缩略图链接的json的页面。

以下是缩略图的api链接: https://api.dailymotion.com/video/x26ezrb?fields=thumbnail_medium_url,thumbnail_small_url,thumbnail_large_url

在上述URL中,“ x26ezrb”是视频ID,“ fields”属性定义缩略图的大小。使用视频ID获取各自的缩略图。

如果您点击此链接“ https://api.dailymotion.com/video/x26ezrb?fields=thumbnail_large_url”,将得到如下所示的json:

{“ thumbnail_large_url”:“ http://s1.dmcdn.net/HRnTi/x240-oi8.jpg”}

现在您要做的就是解析这个json以获取链接,然后使用该链接获取缩略图。

  • 注意:您必须将缩略图链接从“ http”转换为“ https”,否则将不会返回任何内容。 从JSON中获取url,将其拆分为带有分隔符“:”的组件,然后将“ https:”与拆分后的URL字符串的第二部分结合。