【iOS】控件截图、MP4格式视频流和m3u8格式视频流截取某一帧功能的实现
最近开发遇到一个点击按钮实现直播视频流截屏的功能,去网上查了一下资料,总结了一下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格式视频流截取某一帧功能的实现相关推荐
- iOS控件之UILabel
原文链接: iOS控件之UILabel 简书主页:http://www.jianshu.com/users/37f2920f6848 Github主页:https://github.com/Major ...
- aspx创建控件时出错,服务器标记的格式不正确
aspx创建控件时出错,服务器标记的格式不正确 找了半天 原来是多了个'号
- 【 WinForm】全屏截图,控件截图,句柄截图
代码 #region 全屏截图private Bitmap ScreenshotFull() {Bitmap bmp = new Bitmap(Screen.PrimaryScreen.Bounds. ...
- 如何设计一个 iOS 控件?(iOS 控件完全解析)
前言 一个控件从外在特征来说,主要是封装这几点: 交互方式 显示样式 数据使用 对外在特征的封装,能让我们在多种环境下达到 PM 对产品的要求,并且提到代码复用率,使维护工作保持在一个相对较小的范围内 ...
- sketch里的ios控件_30个让你眼前一亮的iOS Swift UI控件!
前言 笔者接触 iOS 开发有一段时间了,尤其特别喜欢UI部分,特意收集整理了30个让你惊艳的第三方开源控件(swift),无论是应用到项目中还是用来学习都能让你大呼过瘾,废话不多说,直接上图上链接! ...
- ios 控件切圆_iOS中 切圆角,任意几个角(带边框,不带边框)__OC和Swift版本 韩俊强的博客...
需求: 1.日常我们在切控件圆角时会遇到想切任意圆角? 2.切过圆角带边框和不带边框的选择? 那么今天我们就用Objective-C和Swift都给它实现了: OC代码: UILabel *myLab ...
- IOS控件学习:UILabel常用属性与用法
#import "ViewController.h" #import <CoreText/CoreText.h>@interface ViewController () ...
- IOS控件学习:UILabel常用属性与用法(转)
原文链接:http://duchengjiu.iteye.com/blog/2041391 保存下来随时查看,感谢分享. 参考网站: http://shijue.me/show_text/521c39 ...
- iOS控件——UITableView详解
iOS开发中经常会用到UITableView,我们平时使用的软件中到处都可以看到它,比如微信.QQ.微博等软件基本上随处都是UITableView.最主要到还有iOS设置. 一 基本介绍 UITab ...
最新文章
- centos6.8下安装pythondjango
- 由mysql分区想到的分表分库的方案
- 缓存与库先删哪个(转自网络,侵删)
- 【深度学习】基础知识 | 超详细逐步图解 Transformer
- uva10050-罢工
- Citrix XenApp应用虚拟化之RTX串号问题解决
- 最优化理论与算法笔记
- win 2016 ssh_多台WIN10之间的SSH免密登录
- java复制arraylist_Java - 复制ArrayList
- 【java笔记】异常处理
- 查找存储过程中的错误位置
- 「工具箱」套模板让项目管理更容易
- 梅科尔工作室-于天姿-鸿蒙笔记4
- ios开发面试常见问题及答案
- Uncaught Error: @electron/remote is disabled for this WebContents
- 厚物科技定制三屏加固便携机HW-8700TS
- Vue 和 React 的区别
- 庄股高手和你谈选股绝招(2)
- 李沐精读论文:ViT 《An Image Is Worth 16x16 Words: Transformers For Image Recognition At Scale》
- require https rid: 5f30fa30-76a72ecb-495cddc1
热门文章
- AI一分钟 | 谷歌租下北京 6000 平米写字楼,或将发展AI项目;工信部就个人信息保护约谈百度、支付宝、今日头条
- AI一分钟 | 马斯克再放豪言:我要造的AI的芯片“全球最棒”;刚上路就被叫停,可能是美国对快递机器人最严厉的打击
- 前后端分离的接口规范
- 春节假期是弯道超车的好机会!
- AAAI 2021 顶会论文开源,OCR方向最火开源项目已超1万 star!
- CV入门赛最全思路上分技巧汇总!
- KDD Cup 2020 推荐系统赛道:数据分析
- 【廖雪峰python入门笔记】list_倒序访问
- 这位北大CS硕士小老弟,简直是“卷怪”!
- 关于NLP相关技术全部在这里:预训练模型、图神经网络、模型压缩、知识图谱、信息抽取、序列模型、深度学习、语法分析、文本处理...