最近开发遇到一个点击按钮实现直播视频流截屏的功能,去网上查了一下资料,总结了一下iOS中截屏相关的知识,然后自己做了个demo。
demo主要实现了3种截屏方法,分别对应三种不同的应用场景。
1、imageView截图,这个截图方法可以用来实现截取项目中的控件,可截取的控件可包括UIImageView、UIView等。截图方法如下:

-(UIImage *)screenshotsWithView:(UIView *)view{UIGraphicsBeginImageContextWithOptions(view.frame.size, NO, 0.0);[view.layer renderInContext:UIGraphicsGetCurrentContext()];UIImage *image = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();return image;
}

2、MP4格式的视频流截图,即获取MP4格式视频流中的某一帧。截取方法如下:

-(UIImage *)screenshotsMP4WithCurrentTime:(CMTime)currentTime videoUrl:(NSString *)url{AVURLAsset * asset = [[AVURLAsset alloc] initWithURL:[NSURL URLWithString:url] options:nil];AVAssetImageGenerator * gen = [[AVAssetImageGenerator alloc] initWithAsset:asset];gen.appliesPreferredTrackTransform = YES;gen.requestedTimeToleranceAfter = kCMTimeZero;gen.requestedTimeToleranceBefore = kCMTimeZero;CMTime time = CMTimeMakeWithSeconds(CMTimeGetSeconds(currentTime), 600);NSError * error = nil;CMTime actualTime;CGImageRef imageRef = [gen copyCGImageAtTime:time actualTime:&actualTime error:&error];UIImage * image = [[UIImage alloc] initWithCGImage:imageRef];return image;
}

这个方法是不是仅限于MP4格式的视频我不是很清楚,但是可以确定的是,MP4截取某一帧的方法不适用于m3u8格式的视频流。
3、m3u8格式视频流截图。方法如下:

-(UIImage *)screenshotsm3u8WithCurrentTime:(CMTime)currentTime playerItemVideoOutput:(AVPlayerItemVideoOutput *)output{CVPixelBufferRef pixelBuffer = [output copyPixelBufferForItemTime:currentTime itemTimeForDisplay:nil];CIImage *ciImage = [CIImage imageWithCVPixelBuffer:pixelBuffer];CIContext *temporaryContext = [CIContext contextWithOptions:nil];CGImageRef videoImage = [temporaryContext createCGImage:ciImagefromRect:CGRectMake(0, 0,CVPixelBufferGetWidth(pixelBuffer),CVPixelBufferGetHeight(pixelBuffer))];UIImage *frameImg = [UIImage imageWithCGImage:videoImage];CGImageRelease(videoImage);CVBufferRelease(pixelBuffer);return frameImg;
}

需要特别指出来的那两个release方法,不调用的话会造成内存泄漏(可用Instruments调试)。
另外还有一点需要注意,m3u8格式的视频流在截取时需要传入一个AVPlayerItemVideoOutput对象,这个对象一定要在AVPlayerItem初始化的时候设置好,如果以临时变量的形式传入或导致截取失败。
在截屏事件里直接调用以上方法即可获取到截取的image。demo链接地址:https://github.com/zhanqin/screenshots

【iOS】控件截图、MP4格式视频流和m3u8格式视频流截取某一帧功能的实现相关推荐

  1. iOS控件之UILabel

    原文链接: iOS控件之UILabel 简书主页:http://www.jianshu.com/users/37f2920f6848 Github主页:https://github.com/Major ...

  2. aspx创建控件时出错,服务器标记的格式不正确

    aspx创建控件时出错,服务器标记的格式不正确  找了半天 原来是多了个'号

  3. 【 WinForm】全屏截图,控件截图,句柄截图

    代码 #region 全屏截图private Bitmap ScreenshotFull() {Bitmap bmp = new Bitmap(Screen.PrimaryScreen.Bounds. ...

  4. 如何设计一个 iOS 控件?(iOS 控件完全解析)

    前言 一个控件从外在特征来说,主要是封装这几点: 交互方式 显示样式 数据使用 对外在特征的封装,能让我们在多种环境下达到 PM 对产品的要求,并且提到代码复用率,使维护工作保持在一个相对较小的范围内 ...

  5. sketch里的ios控件_30个让你眼前一亮的iOS Swift UI控件!

    前言 笔者接触 iOS 开发有一段时间了,尤其特别喜欢UI部分,特意收集整理了30个让你惊艳的第三方开源控件(swift),无论是应用到项目中还是用来学习都能让你大呼过瘾,废话不多说,直接上图上链接! ...

  6. ios 控件切圆_iOS中 切圆角,任意几个角(带边框,不带边框)__OC和Swift版本 韩俊强的博客...

    需求: 1.日常我们在切控件圆角时会遇到想切任意圆角? 2.切过圆角带边框和不带边框的选择? 那么今天我们就用Objective-C和Swift都给它实现了: OC代码: UILabel *myLab ...

  7. IOS控件学习:UILabel常用属性与用法

    #import "ViewController.h" #import <CoreText/CoreText.h>@interface ViewController () ...

  8. IOS控件学习:UILabel常用属性与用法(转)

    原文链接:http://duchengjiu.iteye.com/blog/2041391 保存下来随时查看,感谢分享. 参考网站: http://shijue.me/show_text/521c39 ...

  9. iOS控件——UITableView详解

    iOS开发中经常会用到UITableView,我们平时使用的软件中到处都可以看到它,比如微信.QQ.微博等软件基本上随处都是UITableView.最主要到还有iOS设置. 一  基本介绍 UITab ...

最新文章

  1. centos6.8下安装pythondjango
  2. 由mysql分区想到的分表分库的方案
  3. 缓存与库先删哪个(转自网络,侵删)
  4. 【深度学习】基础知识 | 超详细逐步图解 Transformer
  5. uva10050-罢工
  6. Citrix XenApp应用虚拟化之RTX串号问题解决
  7. 最优化理论与算法笔记
  8. win 2016 ssh_多台WIN10之间的SSH免密登录
  9. java复制arraylist_Java - 复制ArrayList
  10. 【java笔记】异常处理
  11. 查找存储过程中的错误位置
  12. 「工具箱」套模板让项目管理更容易
  13. 梅科尔工作室-于天姿-鸿蒙笔记4
  14. ios开发面试常见问题及答案
  15. Uncaught Error: @electron/remote is disabled for this WebContents
  16. 厚物科技定制三屏加固便携机HW-8700TS
  17. Vue 和 React 的区别
  18. 庄股高手和你谈选股绝招(2)
  19. 李沐精读论文:ViT 《An Image Is Worth 16x16 Words: Transformers For Image Recognition At Scale》
  20. require https rid: 5f30fa30-76a72ecb-495cddc1

热门文章

  1. AI一分钟 | 谷歌租下北京 6000 平米写字楼,或将发展AI项目;工信部就个人信息保护约谈百度、支付宝、今日头条
  2. AI一分钟 | 马斯克再放豪言:我要造的AI的芯片“全球最棒”;刚上路就被叫停,可能是美国对快递机器人最严厉的打击
  3. 前后端分离的接口规范
  4. 春节假期是弯道超车的好机会!
  5. AAAI 2021 顶会论文开源,OCR方向最火开源项目已超1万 star!
  6. CV入门赛最全思路上分技巧汇总!
  7. KDD Cup 2020 推荐系统赛道:数据分析
  8. 【廖雪峰python入门笔记】list_倒序访问
  9. 这位北大CS硕士小老弟,简直是“卷怪”!
  10. 关于NLP相关技术全部在这里:预训练模型、图神经网络、模型压缩、知识图谱、信息抽取、序列模型、深度学习、语法分析、文本处理...