我做了一个演示,可以从视频URL上一堆加载缩略图.现在我想在tableview列表中显示所有加载的缩略图,但是问题是.如果我使用异步的话,tablview会挂起直到下载完所有缩略图线程比我的tableview工作正常(滚动),但是所有缩略图在20到25秒后加载.

这是我的代码

@IBOutlet weak var tableviewList:UITableView!

var listArray:[String] = ["https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4",

"http://techslides.com/demos/sample-videos/small.mp4",

"http://jplayer.org/video/m4v/Big_Buck_Bunny_Trailer.m4v",

"https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4",

"http://techslides.com/demos/sample-videos/small.mp4",

"http://jplayer.org/video/m4v/Big_Buck_Bunny_Trailer.m4v",

"https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4",

"http://techslides.com/demos/sample-videos/small.mp4",

"http://jplayer.org/video/m4v/Big_Buck_Bunny_Trailer.m4v"

]

override func viewDidLoad() {

super.viewDidLoad()

self.tableviewList.register(UINib(nibName: "ListTableViewCell", bundle: nil), forCellReuseIdentifier: "ListTableViewCell")

for aryString in self.listArray

{

self.createThumbnailOfVideoFromFileURL(aryString)

}

}

override func didReceiveMemoryWarning() {

super.didReceiveMemoryWarning()

// Dispose of any resources that can be recreated.

}

public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int

{

return self.listArray.count

}

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell

{

let cell = tableView.dequeueReusableCell(withIdentifier: "ListTableViewCell", for: indexPath) as! ListTableViewCell

let strUrl = self.listArray[indexPath.row]

DispatchQueue.global(qos: .userInitiated).async {

// Download file or perform expensive task

cell.imageviewThumb?.image = self.getThumbnailFrom(path: URL.init(string:strUrl )!)

DispatchQueue.main.async {

// Update the UI

}

}

cell.selectionStyle = UITableViewCellSelectionStyle.none

return cell

}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

let stringUrl:String = self.listArray[indexPath.row]

let videoUrl = NSURL(string:stringUrl)

let player = AVPlayer(url:videoUrl as! URL)

let playerviewController = AVPlayerViewController()

playerviewController.player = player

self.present(playerviewController, animated: true, completion: {

playerviewController.player?.play()

})

}

public func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat

{

return 300

}

func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {

return true

}

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {

if (editingStyle == UITableViewCellEditingStyle.delete) {

// handle delete (by removing the data from your array and updating the tableview)

}

}

func getThumbnailFrom(path: URL) -> UIImage? {

do {

let asset = AVURLAsset(url: path , options: nil)

let imgGenerator = AVAssetImageGenerator(asset: asset)

imgGenerator.appliesPreferredTrackTransform = true

let cgImage = try imgGenerator.copyCGImage(at: CMTimeMake(0, 1), actualTime: nil)

let thumbnail = UIImage(cgImage: cgImage)

return thumbnail

} catch let error {

print("*** Error generating thumbnail: \(error.localizedDescription)")

return nil

}

}

请给我可能需要的解决方案,例如SDWebImages,但它仅对图像有用而不对视频缩略图有用.我想要快速的3.0解决方案.在此先感谢

android异步加载视频缩略图,swift-如何将视频URL的缩略图异步加载到tableview列表中...相关推荐

  1. Android关联文件类型,使得自己app支持打开【加入到“用其它应用打开”的列表中】

    ----稍作记录,避免下次忘了又得我去查官方文档---- 有时候,我们开发的app需要支持打开某些文件,如何才能使得打开文件时系统能把我们开发的app列出来呢? 例如, 1.我开发了一个浏览器,那用户 ...

  2. 如何将rmvb视频文件制作成DVD视频光盘

    最近,老婆迷上看电视剧了.本人只能大力支持.计算机在我每天晚上睡觉后就开始了繁忙的下载工作(上网包月费没白交啊),已经下载了很多电视剧,<金婚>,<胡雪岩>,<贞观长歌& ...

  3. Android技术分享| ViewPager2离屏加载,实现抖音上下视频滑动

    要实现类似抖音上下滑动小视频的丝滑效果,需要有一个预加载的功能.所谓的预加载, 就是需要在显示当前页的情况下,提前将当前页后面的内容加载,以保证用户滑动到下一个视频的时候, 可以减少等待时间,在正常网 ...

  4. Android官方开发文档Training系列课程中文版:高效显示位图之加载大位图

    原文地址:http://android.xsoftlab.net/training/displaying-bitmaps/index.html 引言 学习如何使用一种常规的手段来处理及加载Bitmap ...

  5. 视频直播m3u8协议以及跨域问题和Videojs加载m3u8视频汇总

    video.js支持m3u8格式直播 https://www.cnblogs.com/saysmy/p/6429835.html 为什么要使用video.js? 1. PC端浏览器并不支持video直 ...

  6. 获取视频帧图片,FFmpegMediaMetadataRetriever修改,优化,提高加载速度

    一.背景 因为工作需要制作视频预览功能,使用网上开源代码发现加载第一个视频时,比较耗时,差不多三秒左右,所以对其进行了部分修改,并重新编译使用新ffmpeg 4.1.3 https://github. ...

  7. 【Android 插件化】“ 插桩式 “ 插件化框架 ( 类加载器创建 | 资源加载 )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  8. Android项目:使用pulltorefresh开源项目扩展为下拉刷新上拉加载更多的处理方法,监听listview滚动方向...

    很多android应用的下拉刷新都是使用的pulltorefresh这个开源项目,但是它的扩展性在下拉刷新同时又上拉加载更多时会有一定的局限性.查了很多地方,发现这个开源项目并不能很好的同时支持下拉刷 ...

  9. UNITY所谓的异步加载几乎全部是协程,不是线程;MAP3加载时解压非常慢

    UNITY所谓的异步加载几乎全部是协程,不是线程;MAP3加载时解压非常慢 实践证明,以下东西都是协程,并非线程(thread): 1,WWW 2,AssetBundle.LoadFromFileAs ...

最新文章

  1. windows开了远程控制访问老提示密码账号不正确
  2. 什么是 MIME Type
  3. 【Python】Flask框架系列(一):安装、页面跳转/重定向、模板、逻辑语句、过滤器、继承/使用block、url链接/加载静态资源
  4. sql作业启停服务器
  5. 网站开启Gzip压缩-apache
  6. python数据字符_python数据清洗系列之字符串处理详解
  7. 云计算引入可能破坏之前建立的IT秩序
  8. 计算机越学越难不想学了,“我今年大一,学的专业是计算机,真的快崩溃了,什么都不懂”...
  9. 随意切换双卡流量,立即获取对应卡的SMIS
  10. 性能优化的 10 个技巧
  11. 计算机常用屏幕分辨率,pc端常用电脑屏幕 ((响应式PC端媒体查询)电脑屏幕分辨率尺寸大全)...
  12. mock_httpserver
  13. 走对路!在智能时代别捡了芝麻丢了西瓜!
  14. interview for chinaPay
  15. zzuoj 10400: B.海岛争霸
  16. 互联网测试校招系列2:准备越充分,机会越大!
  17. 有趣的Ruby-学习笔记5
  18. 关于谱图理论-图傅里叶变换-谱卷积等谱图领域知识的理解
  19. Redis持久化RDB/AOF详解与实践
  20. OpenLayers基础

热门文章

  1. 如何优化Jupyter Notebook
  2. 分布式团队_我们说的意思是:我们是一个分布式优先团队
  3. 如何使用Python的Flask和Google App Engine构建网络应用
  4. es6生成器_ES6生成器
  5. Spring DI注入规则
  6. CMakeLists.txt使用boost库
  7. k2pdfopt教程
  8. 关于JSP(Java Server Pages)的内置对象有哪些?
  9. $limit、$skip、$unwind
  10. ReportViewer教程(6)-将报表浏览器与报表联系