
基本流程
1初始化输入设备
2初始化输出设备
3创建AVCaptureSession,用来管理视频与数据的捕获
4创建预览视图
前面介绍了如何通过相机实时获取音视频数据,我们接下来就需要了解获取到的数据到底是什么样的,使用系统提供的接口获取到的音视频数据都保存在CMSampleBufferRef中,这个结构在iOS中表示一帧音频/视频数据,它里面包含了这一帧数据的内容和格式,我们可以把它的内容取出来,提取出/转换成我们想要的数据。
代表视频的CMSampleBufferRef中保存的数据是yuv420格式的视频帧(因为我们在视频输出设置中将输出格式设为:kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange)。
在下面的回调中,可以拿到最终的CMSampleBufferRef数据
视频是由一帧一帧的数据连接而成,而一帧视频数据其实就是一张。
yuv是一种储存格式,跟RGB格式类似。
RGB格式的很好理解,计算机中的大多数,都是以RGB格式存储的。
yuv中,y表示亮度,单独只有y数据就可以形成一张,只不过这张是灰色的。u和v表示色差(u和v也被称为:Cb-蓝色差,Cr-红色差),
为什么要yuv?
有一定历史原因,最早的电视信号,为了兼容黑白电视,采用的就是yuv格式。
一张yuv的图像,去掉uv,只保留y,这张就是黑白的。
而且yuv可以通过抛弃色差来进行带宽优化。
比如yuv420格式图像相比RGB来说,要节省一半的字节大小,抛弃相邻的色差对于人眼来说,差别不大。
一张yuv格式的图像,占用字节数为 (width height + (width height) / 4 + (width height) / 4) = (width height) 3 / 2
一张RGB格式的图像,占用字节数为(width height) 3
在传输上,yuv格式的视频也更灵活(yuv3种数据可分别传输)。
很多视频编码器最初是不支持rgb格式的。但是所有的视频编码器都支持yuv格式。
我们这里使用的就是yuv420格式的视频。
yuv420也包含不同的数据排列格式:I420,NV12,NV21
其格式分别如下,
I420格式:y,u,v 3个部分分别存储:Y0,Y1Yn,U0,U1Un/2,V0,V1Vn/2
NV12格式:y和uv 2个部分分别存储:Y0,Y1Yn,U0,V0,U1,V1Un/2,Vn/2
NV21格式:同NV12,只是U和V的顺序相反。
综合来说,除了存储顺序不同之外,上述格式对于显示来说没有任何区别。
使用哪种视频的格式,取决于初始化相机时设置的视频输出格式。
设置为kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange时,表示输出的视频格式为NV12;
设置为kCVPixelFormatType_420YpCbCr8Planar时,表示使用I420。
设置为kCVPixelFormatType_32RGBA时,表示使用BGRA。
GPUImage设置相机输出数据时,使用的就是NV12
为了一致,我们这里也选择NV12格式输出视频。
libyuv是Google开源的实现各种YUV与RGB之间相互转换、旋转、缩放的库。它是跨平台的,可在Windows、Linux、Mac、Android等 *** 作系统,x86、x64、arm架构上进行编译运行,支持SSE、AVX、NEON等SIMD指令加速
导入libyuv库,并设置头文件搜索路径,不然会报错
文章只介绍了使用AVFoundation进行视频采集和使用libyuv进行格式转换,音视频相关的知识还有很多,这里不再做详细介绍了。
不会。
手机中剪切过的视频经保存后是无法恢复的。如果你有备份文件并同步到itunes上,通过iTunes备份恢复找回。如没有备份,只能使用用恢复文件的工具软件来恢复或借助于数据服务公司来恢复视频。但iPhone的系统是IOS系统,IOS系统最注重的是客户的隐私和安全,所以数据恢复软件恢复会有一定难度。
剪辑(Filmediting),即将影片制作中所拍摄的大量素材,经过选择、取舍、分解与组接,最终完成一个连贯流畅、含义明确、主题鲜明并有艺术感染力的作品。从美国导演格里菲斯开始,采用了分镜头拍摄的方法,然后再把这些镜头组接起来,因而产生了剪辑艺术。
From: >
以上就是关于iOS音视频采集与格式转换(yuv转rgb)全部的内容,包括:iOS音视频采集与格式转换(yuv转rgb)、苹果手机剪辑短的视频发出去,能否被还原成以前的长度、iOS h5点播播放mp4视频遇到的坑,ios的h5不能播放视频等等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)