在ios平台上实现全功能视频处理 | 盛大微酷 赵志猛
TRANSCRIPT
iOS上开发视音频处理
微酷首席架构师 赵志猛
iOS DevCamp
Produced by CSDN
Website: http://devcamp.csdn.net
Weibo: http://weibo.com/cmdnclub
Thursday, August 2, 12
2000-2006
2006-2011
2011.5.
关于我
Thursday, August 2, 12
内容
什么是视音频处理
移动端的视音频处理
IRISTM引擎
微酷
Thursday, August 2, 12
什么是视音频处理
视音频处理就是增强视音频内容的可观赏性
转码
剪辑
滤镜和特效
视频叠层
音轨处理
Thursday, August 2, 12
视频转码
Thursday, August 2, 12
视频转码
文件格式
RMVB、AVI、WMV、MPG、DIVX、XVID、MOV、FLV/F4V、MP4、3GP ……
Thursday, August 2, 12
视频转码
文件格式
RMVB、AVI、WMV、MPG、DIVX、XVID、MOV、FLV/F4V、MP4、3GP ……
帧率
30fps、25fps、24fps、15fps、10fps ……
Thursday, August 2, 12
视频转码
分辨率和码率
SD 4:3、HD 16:9、IMAX 2.2:1 ……
CIF 352x288、480x360、VGA 640x480、1280x720、1920x1080、4096x3072 ……
互联网:流畅、标清、高清、超清
Thursday, August 2, 12
产品 视频码率@分辨率3.5~5Mbps@3072p, 3~4.3Mbps@1080p, 2~2.9Mbps@720p, 0.8~1Mbps@480p,
0.5Mbps@360p
1Mbps@622p, 500Kbps@378p, 300Kbps@288p
2Mbps@720p, 500Kbps@360p, 300Kbps@256p
1500Kbps@576p, 600Kbps@480p, 300Kbps@320p, 180Kbps@240p
上行1.4Mbps,分发800Kbps@360p
上行2.8Mbps,分发2.8Mbps或800Kbps@480p
上行512Kbps,分发512Kbps@360p
Thursday, August 2, 12
视频转码
编码算法
MPEG-2
DivX
MPEG-4 Part 10 H.264/AVC
VP8
AVS
Thursday, August 2, 12
音频转码
采样率
8K
44.1K、48K、96K
量化
8-bit、16-bit、24-bit、32-bit
·
人类听力范围:20Hz~20KHz
Thursday, August 2, 12
音频转码
声道
Mono、Stereo、5.1
码率
20Kbps~128Kbps、192Kbps
编码算法
PCM、WMA、MP3、AAC、AMR ……
Thursday, August 2, 12
剪辑
剪裁
拼接
Thursday, August 2, 12
滤镜和特效
颜色处理
图像处理
模板特效
变形特效
视频变速
Thursday, August 2, 12
颜色处理之颜色空间
RGB vs YUV
Thursday, August 2, 12
颜色处理之LOMO
LOMO公司,俄罗斯圣彼得堡
列宁格勒光学机械联盟
Lomographische AG公司,奥地利
过渡饱和、失衡曝光、模糊等
Thursday, August 2, 12
颜色处理之LOMO
LOMO公司,俄罗斯圣彼得堡
列宁格勒光学机械联盟
Lomographische AG公司,奥地利
过渡饱和、失衡曝光、模糊等
Thursday, August 2, 12
颜色处理之黑白
Thursday, August 2, 12
图像处理之马赛克
平均值法
随机采样法
各种让信号缺失的方法……
Thursday, August 2, 12
图像处理之马赛克
平均值法
随机采样法
各种让信号缺失的方法……
Thursday, August 2, 12
图像处理之马赛克
平均值法
随机采样法
各种让信号缺失的方法……
去马赛克可能吗?
Thursday, August 2, 12
图像处理之马赛克
平均值法
随机采样法
各种让信号缺失的方法……
死心吧去马赛克可能吗?
Thursday, August 2, 12
SOBEL算子边缘提取
图像处理之素描
Thursday, August 2, 12
SOBEL算子边缘提取
图像处理之素描
Thursday, August 2, 12
图像处理之色键
RGB空间 f(r, g, b) -> alpha
蓝屏或绿屏
YUV空间 f(y, u, v) -> alpha
完整色域的处理
Alpha Blending
Thursday, August 2, 12
图像处理之MotionBlur
Thursday, August 2, 12
图像处理之MotionBlur
Thursday, August 2, 12
模板特效之爆炸
Thursday, August 2, 12
模板特效之爆炸
Thursday, August 2, 12
模板特效之相框
Thursday, August 2, 12
变形特效之扭曲
Thursday, August 2, 12
变形特效之大眼
Thursday, August 2, 12
变形特效之鱼眼
Thursday, August 2, 12
视频变速之快慢放
改变视频播放的时长
10s
5s
15s
源视频:
快放:
慢放:
Thursday, August 2, 12
视频变速之快慢放
Thursday, August 2, 12
视频变速之快慢放
Thursday, August 2, 12
视频叠层
视频轨的概念
多轨合成
Video A
Video BVideo C
Thursday, August 2, 12
视频叠层之画中画
Thursday, August 2, 12
视频叠层之AlphaBlending
快速Blend
cr_C = cr_A * alpha_A + cr_B * (1 - alpha_A)
正片叠底
alpha_C = alpha_A + alpha_B - alpha_A * alpha_B
cr_C = (cr_A * alpha_A + cr_B * alpha_B * (1 - alpha_A)) / alpha_C
Thursday, August 2, 12
音轨处理
替换
混音
变速变调
自动增益
降噪
Thursday, August 2, 12
移动端的视音频处理
Thursday, August 2, 12
移动端的视音频处理
目标
实时拍摄、文件导入剪辑、实时渲染和预览360p、15fps、主观画质不能明显失真、要省流量全平台可播放:MP4 + AAC + AVC
Thursday, August 2, 12
移动端的视音频处理
目标
实时拍摄、文件导入剪辑、实时渲染和预览360p、15fps、主观画质不能明显失真、要省流量全平台可播放:MP4 + AAC + AVC
问题和挑战
不同的操作系统不同的硬件平台
Thursday, August 2, 12
性能
Thursday, August 2, 12
性能
15fps:每帧66ms内要完成拍摄/解码、特效、实时预览、编码、文件IO所有工作
Thursday, August 2, 12
性能
15fps:每帧66ms内要完成拍摄/解码、特效、实时预览、编码、文件IO所有工作
拍摄
解码特效 编码
1 2 31 2 3
缓冲队列 缓冲队列
Thursday, August 2, 12
性能
15fps:每帧66ms内要完成拍摄/解码、特效、实时预览、编码、文件IO所有工作
编解码⼀一定要用硬件,ffmpeg的实时性不给力
拍摄
解码特效 编码
1 2 31 2 3
缓冲队列 缓冲队列
Thursday, August 2, 12
性能
Thursday, August 2, 12
性能
特效渲染⼀一定要用GPU,Neon或类似SIMD指令是不够给力的
Thursday, August 2, 12
性能
特效渲染⼀一定要用GPU,Neon或类似SIMD指令是不够给力的
要尽可能 大化pipeline的并行性能,编解码硬件、CPU、GPU三者都是可以并行的
Thursday, August 2, 12
性能
特效渲染⼀一定要用GPU,Neon或类似SIMD指令是不够给力的
要尽可能 大化pipeline的并行性能,编解码硬件、CPU、GPU三者都是可以并行的
资源要复用,要做VideoFramePool、AudioFramePool、ShaderPool、VideoTexturePool、EffectPool等等
Thursday, August 2, 12
动态帧率
Thursday, August 2, 12
动态帧率
移动设备拍摄⼀一定会出动态帧率
iOS5以前只能设置 大帧率
iOS5以后可以同时控制 大 小帧率
Thursday, August 2, 12
动态帧率
移动设备拍摄⼀一定会出动态帧率
iOS5以前只能设置 大帧率
iOS5以后可以同时控制 大 小帧率
处理时的丢帧机制也会导致动态帧率
如果处理流水线在某个环节卡住,就需要丢帧
Thursday, August 2, 12
动态帧率
移动设备拍摄⼀一定会出动态帧率
iOS5以前只能设置 大帧率
iOS5以后可以同时控制 大 小帧率
处理时的丢帧机制也会导致动态帧率
如果处理流水线在某个环节卡住,就需要丢帧
解码时无法根据数学公式准确计算 后⼀一的位置或时间,需要做预测
Thursday, August 2, 12
像素格式
Thursday, August 2, 12
像素格式
YUV 4:2:0
视频编解码多基于这种格式,将Y和UV分片存储
Thursday, August 2, 12
像素格式
YUV 4:2:0
视频编解码多基于这种格式,将Y和UV分片存储
Y U V
Thursday, August 2, 12
像素格式
YUV 4:2:0
视频编解码多基于这种格式,将Y和UV分片存储
RGBA
数据连续,但数据量大,而且解码后要做⼀一次YUV到RGB的颜色转换
Thursday, August 2, 12
OpenGL ES
Thursday, August 2, 12
OpenGL ES
texture要按2^n对齐,显存利用率低
640x480 -> 1024x512,YUV⼀一帧768KB,RGBA⼀一帧2MB
Thursday, August 2, 12
OpenGL ES
texture要按2^n对齐,显存利用率低
640x480 -> 1024x512,YUV⼀一帧768KB,RGBA⼀一帧2MB
YUV4:2:0像素格式的texture管理方法
Luminance的Y + Luminance_alpha的UV
Thursday, August 2, 12
OpenGL ES
texture要按2^n对齐,显存利用率低
640x480 -> 1024x512,YUV⼀一帧768KB,RGBA⼀一帧2MB
YUV4:2:0像素格式的texture管理方法
Luminance的Y + Luminance_alpha的UV
下行不能直接用texture,要用render buffer
Thursday, August 2, 12
视频编码
AVC BaselineProfile
AVC MainProfile
理论上要比Baseline质量高出30%
Android部分低端机不支持
iOS的硬编码与Baseline没什么质量区别
Thursday, August 2, 12
音频编码
iOS4以后不再支持AMR
Android2.3以前Native只能录AMR,不能录AAC,但可以播AAC
Thursday, August 2, 12
剪辑
Thursday, August 2, 12
剪辑
逐帧剪,要做好解码控制
Thursday, August 2, 12
剪辑
逐帧剪,要做好解码控制
拼接点如果做过渡,比较难控制
视频总长会变短
A B
Thursday, August 2, 12
剪辑
逐帧剪,要做好解码控制
拼接点如果做过渡,比较难控制
视频总长会变短
拼接点附近音频要CrossFade,防止硬切换的爆音
A B
Thursday, August 2, 12
剪辑
逐帧剪,要做好解码控制
拼接点如果做过渡,比较难控制
视频总长会变短
拼接点附近音频要CrossFade,防止硬切换的爆音
拼接不同分辨率与幅面比的视频时要做好适配
A B
Thursday, August 2, 12
分辨率不统⼀一
Thursday, August 2, 12
分辨率不统⼀一各种移动端输出各种分辨率
iOS5以前只能出HighQuality、VGA640x480、MediumQuality、LowQuality,5以后多了1280x720、1920x1080两种
Thursday, August 2, 12
分辨率不统⼀一各种移动端输出各种分辨率
iOS5以前只能出HighQuality、VGA640x480、MediumQuality、LowQuality,5以后多了1280x720、1920x1080两种
各种分辨率与幅面比的适配
完全拉伸,图像或变胖或变瘦按高或宽适配,面临填黑边、裁剪的问题牛掰的seam carving,算不过来
Thursday, August 2, 12
视频慢放
邻近帧采样会⼀一蹦⼀一蹦
相邻帧插值会有重影
运动估计加非线性插值的运算量非常大
10s
15s
输出输入帧映射示意
Thursday, August 2, 12
音轨处理
采集的单声道和音乐双声道的混音问题
大 小值的自动增益算法会失效
需要统计期望平均值然后做非线性增益
Thursday, August 2, 12
码率问题
Thursday, August 2, 12
码率问题
iOS拍摄的视频文件码率很高
即使是VGA640x480的分辨率,码率仍然在2~3Mbps,30秒就要耗掉10MB,赶上蓝光
Thursday, August 2, 12
码率问题
iOS拍摄的视频文件码率很高
即使是VGA640x480的分辨率,码率仍然在2~3Mbps,30秒就要耗掉10MB,赶上蓝光
码率的选择
对于移动3G而言:W x H x (3~6)bps
我们的实验结果:512Kbps@480x360
Thursday, August 2, 12
文件格式
3GP格式逐渐不被支持iOS生成的mp4文件metadata在 后,部分Android设备不能播,flash如果要播则需要完全加载完文件才行,所以 后要把metadata换到文件前面去
MOV 3GP(*) flv/f4v mp4(*)
iOS Native YES YES - YES
Android Native - YES YES YES
Flash - YES YES YES
HTML5 YES YES - YES
PlayerFormat
Thursday, August 2, 12
HOME键/锁屏
Thursday, August 2, 12
HOME键/锁屏
线程即刻会被挂起,内存资源可能会被回收
Thursday, August 2, 12
HOME键/锁屏
线程即刻会被挂起,内存资源可能会被回收
要立刻交还所有的硬件资源
摄像头、麦克风、GPU、编解码器
Thursday, August 2, 12
HOME键/锁屏
线程即刻会被挂起,内存资源可能会被回收
要立刻交还所有的硬件资源
摄像头、麦克风、GPU、编解码器
如果是后期编辑在渲染,退入后台再回来,就需要从头开始渲染
Thursday, August 2, 12
HOME键/锁屏
线程即刻会被挂起,内存资源可能会被回收
要立刻交还所有的硬件资源
摄像头、麦克风、GPU、编解码器
如果是后期编辑在渲染,退入后台再回来,就需要从头开始渲染
程序逻辑与渲染流水控制极其麻烦
Thursday, August 2, 12
边播边存
MPMoviePlayer是不能边播边存的
要自己搭建本地的HttpServer做Proxy
主要是为用户省流量,提高二次观看体验
Thursday, August 2, 12
IRISTM引擎
Interactive Rendering Integrated System
全平台
Thursday, August 2, 12
Timeline Manager
Output
Preview
Encode Engine
Render Engine
Decode EngineInput
Effect Manager
Thursday, August 2, 12
技术 编解码 渲染 拍摄 后期制作
iOS硬件CPUGPU
硬件 GPU实时特效 实时
视频剪辑特效混音字幕
Android硬件CPUGPU
硬件解CPU编 GPU实时特效 实时 开发中
Web FlashHTML5 GPU GPU实时 实时 同iOS
Server CPU CPU CPU超实时 无 无
Thursday, August 2, 12
iOS模块实现框图
MMFoundation
RenderEngine EncodeEngineDecodeEngine
AudioDecoder VideoDecoder
CaptureManager
MMDataStructure
VideoFramePoolAudioFramePool
EffectManager
ShaderPool VideoTexturePool
ScreenRenderObjTimelineManager ThreadManager
Thursday, August 2, 12
iOS模块实现框图
MMFoundation
RenderEngine EncodeEngineDecodeEngine
AudioDecoder VideoDecoder
CaptureManager
MMDataStructure
VideoFramePoolAudioFramePool
EffectManager
ShaderPool VideoTexturePool
ScreenRenderObjTimelineManager ThreadManager
Thursday, August 2, 12
iOS模块实现框图
MMFoundation
RenderEngine EncodeEngineDecodeEngine
AudioDecoder VideoDecoder
CaptureManager
MMDataStructure
VideoFramePoolAudioFramePool
EffectManager
ShaderPool VideoTexturePool
ScreenRenderObjTimelineManager ThreadManager
Thursday, August 2, 12
微酷集成了IRIS引擎的移动微视频分享社区
特点
所见即所得的拍摄体验
512Kbps码率,接近专业标清画质
流畅的3G网络视频上传和观看体验
以话题、地点等聚合视频
基于用户兴趣的个性推荐
Thursday, August 2, 12
Thursday, August 2, 12
Thursday, August 2, 12
Q&A
微酷捕捉精彩 瞬间分享
主页:http://vku.sdo.com邮件:[email protected]微博:@vku微酷 http://weibo.com/vkuvku
Thursday, August 2, 12