iOS实时相机App的实践
2018年4月21日keyishen@陆家嘴软件园
目录
1 2
3 4
5 背景 实时 3D 视频 总结 介绍 相机实践 拼接 实时相机&视频能力展示 •丰富的实时动效能力•首家支持FaceTrack的App•AR功能荣获AppStore推荐•多人合演(视频拼接) 语音吐字人像分割 3D 抠五官 多格动感MV 多人合演 App流程图 技术方案选型 OpenGLES2.0 •优点:平台通用性。
OpenGLES是基于C语言的,与平台无关•缺点:可扩展性差,不易于各个功能的组合 GPUImage •优点:基于OpenGLES的封装,方便开发,高可复用和扩展性•缺点:性能没有裸写的OpenGL好 Metal •优点:基于现代GPU抽象了API,损耗低,性能是OpenGLES的10倍•缺点:仅iPhone5SiOS8及以上手机才支持 提问? 在iPhone上如何看GPU调用?视频如何支持透明通道?3D人脸如何重建并运用?两个视频如何快速拼接? 目录
1 2
3 4
5 背景 实时 3D 视频 总结 介绍 相机实践 拼接 实时相机的具体实现 •实时相机的逆向调试 •Demo •实时相机的正向设计 实时相机的流程 相机 人脸 滤镜 人脸 实时 实时 流 AI 磨皮 贴纸 瘦脸 妆容 3D 滤镜 •滤镜LUT(LookUpTable) •优点:LUT速度快•缺点:400KB一个滤镜 人像贴纸 •在人像点上贴素材•Demo 人像贴纸支持的格式 •序列帧:Sprite雪碧图•PVR:减少内存•视频:如何支持透明通道? 人像贴纸支持的格式 •Q:如何让视频支持透明通道?•设计理念 •普适•简单•快速 •支持透明的视频格式 •mov封装了一组png,太大•webm无硬件解码 •带透明色的视频 •有边缘毛刺 13 视频支持透明通道 •alpha视频+rgb视频方案 相机流 裁剪 美容 特效 字幕台标 Blend滤镜 特效RGB视频 3inputblend MovieWriter 特效Alpha视频 缺点: •双路解码压力大(低端机跑不动)•多路之间要同步 14 视频支持透明通道 •两倍高alpha视频方案(480*960) 相机流 裁剪 美容 特效 字幕台标 Blend滤镜 两倍高特效视频 转RGBAshader 2inputblend MovieWriter 优点: •支持硬件解码,速度快•解码压力小 •改动小,容易实现 15 目录
1 2
3 4
5 背景 实时 3D 视频 总结 介绍 相机实践 拼接 人脸的3D模型 人脸3D建模对比 Snapchat Youtu iPhoneX 换脸网格 •自动算法+手动调节•MeshLab 3D难点 •3D框架选择 •OpenGL•SceneKit •和现有GPUImage共存 •Untiy •克服遮挡问题 目录
1 2
3 4
5 背景 实时 3D 视频 总结 介绍 相机实践 拼接 视频的录制 相机流 裁剪 美容 特效字幕台标 Blend滤镜 MovieWriter •兼容安卓 –25fps,1280kbps,480*480,H.264BaselineProfile30(iOS上可调的视频参数少) •低端机流畅录制 –按机型开启美容磨皮、特效滤镜–非固定帧率 22 对口型级视频的精准拼接 •方案1:保证录制视频所有参数一样?
•安卓和iOS视频的sps、pps很难完全一致 •方案2:视频重新解码,再统一编码?
•编码速度很慢,体验差 •方案3:MP4V2快速拼接 •多组sps,pps Notes: MP4box •H.264每一个slice中公用的编码参数,决定了如何解 FTYP 码 •SequenceParameterSet •Profile,level,帧率等 •PictureParameterSet •图像相关参数,如量化初始值等 MDAT MOOV 23 对口型视频的精准拼接 MP4V2快速拼接 Stage1:A0 MP4v2合并 分段视频 B1 An-1Bn A0 Stage2: MP4v2合并 音视频 A0 B1 … An-
1 Bn Audioadts B1 … An-
1 Bn Audioadts iOS视频pps_id=0安卓视频pps_id=1拍档视频下载模块 素材解析 24 对口型视频的精准拼接 iPhone6iOS9录制的MP4sps_id=0,pps_id=
0 FTYPMOOV MDAT iPhone5siOS9录制的MP4sps_id=0,pps_id=
0 FTYPMOOV MDAT Sliceppsid:
0 Sliceppsid:
0 Sliceppsid:
0 Sliceppsid:
0 Sliceppsid:
0 Sliceppsid:
0 Sliceppsid:
0 Sliceppsid:
0 sps0x6742…spsid:0 pps0x28ce1f0c ppsid:0spsid:
0 Decoder:sps_table[32]SequenceParameterSet sps[0]sps[1] … pps_table[256]PictureParameterSet pps[0]pps[1] … 25 sps0x6742…spsid:0 pps0x28ce1f0c ppsid:0spsid:0 25 对口型视频的精准拼接 iPhone6iOS9录制的MP4sps_id=0,pps_id=
0 FTYPMOOV MDAT iPhone5siOS9录制的MP4sps_id=1,pps_id=
1 FTYPMOOV MDAT Sliceppsid:
0 Sliceppsid:
0 Sliceppsid:
0 Sliceppsid:
0 Sliceppsid:
1 Sliceppsid:
1 Sliceppsid:
1 Sliceppsid:
1 sps0x6742…spsid:0 pps0x28ce1f0c ppsid:0spsid:
0 Decoder:sps_table[32]SequenceParameterSet sps[0]sps[1] … pps_table[256]PictureParameterSet pps[0]pps[1] … 26 sps0x6742…spsid:1 pps0x28ce1f0c ppsid:1spsid:1 26 目录
1 2
3 4
5 背景 实时 3D 视频 总结 介绍 相机实践 拼接 回顾 在iPhone上如何看GPU调用?视频如何支持透明通道?3D人脸如何重建并运用?两个视频如何快速拼接?
1 2
3 4
5 背景 实时 3D 视频 总结 介绍 相机实践 拼接 实时相机&视频能力展示 •丰富的实时动效能力•首家支持FaceTrack的App•AR功能荣获AppStore推荐•多人合演(视频拼接) 语音吐字人像分割 3D 抠五官 多格动感MV 多人合演 App流程图 技术方案选型 OpenGLES2.0 •优点:平台通用性。
OpenGLES是基于C语言的,与平台无关•缺点:可扩展性差,不易于各个功能的组合 GPUImage •优点:基于OpenGLES的封装,方便开发,高可复用和扩展性•缺点:性能没有裸写的OpenGL好 Metal •优点:基于现代GPU抽象了API,损耗低,性能是OpenGLES的10倍•缺点:仅iPhone5SiOS8及以上手机才支持 提问? 在iPhone上如何看GPU调用?视频如何支持透明通道?3D人脸如何重建并运用?两个视频如何快速拼接? 目录
1 2
3 4
5 背景 实时 3D 视频 总结 介绍 相机实践 拼接 实时相机的具体实现 •实时相机的逆向调试 •Demo •实时相机的正向设计 实时相机的流程 相机 人脸 滤镜 人脸 实时 实时 流 AI 磨皮 贴纸 瘦脸 妆容 3D 滤镜 •滤镜LUT(LookUpTable) •优点:LUT速度快•缺点:400KB一个滤镜 人像贴纸 •在人像点上贴素材•Demo 人像贴纸支持的格式 •序列帧:Sprite雪碧图•PVR:减少内存•视频:如何支持透明通道? 人像贴纸支持的格式 •Q:如何让视频支持透明通道?•设计理念 •普适•简单•快速 •支持透明的视频格式 •mov封装了一组png,太大•webm无硬件解码 •带透明色的视频 •有边缘毛刺 13 视频支持透明通道 •alpha视频+rgb视频方案 相机流 裁剪 美容 特效 字幕台标 Blend滤镜 特效RGB视频 3inputblend MovieWriter 特效Alpha视频 缺点: •双路解码压力大(低端机跑不动)•多路之间要同步 14 视频支持透明通道 •两倍高alpha视频方案(480*960) 相机流 裁剪 美容 特效 字幕台标 Blend滤镜 两倍高特效视频 转RGBAshader 2inputblend MovieWriter 优点: •支持硬件解码,速度快•解码压力小 •改动小,容易实现 15 目录
1 2
3 4
5 背景 实时 3D 视频 总结 介绍 相机实践 拼接 人脸的3D模型 人脸3D建模对比 Snapchat Youtu iPhoneX 换脸网格 •自动算法+手动调节•MeshLab 3D难点 •3D框架选择 •OpenGL•SceneKit •和现有GPUImage共存 •Untiy •克服遮挡问题 目录
1 2
3 4
5 背景 实时 3D 视频 总结 介绍 相机实践 拼接 视频的录制 相机流 裁剪 美容 特效字幕台标 Blend滤镜 MovieWriter •兼容安卓 –25fps,1280kbps,480*480,H.264BaselineProfile30(iOS上可调的视频参数少) •低端机流畅录制 –按机型开启美容磨皮、特效滤镜–非固定帧率 22 对口型级视频的精准拼接 •方案1:保证录制视频所有参数一样?
•安卓和iOS视频的sps、pps很难完全一致 •方案2:视频重新解码,再统一编码?
•编码速度很慢,体验差 •方案3:MP4V2快速拼接 •多组sps,pps Notes: MP4box •H.264每一个slice中公用的编码参数,决定了如何解 FTYP 码 •SequenceParameterSet •Profile,level,帧率等 •PictureParameterSet •图像相关参数,如量化初始值等 MDAT MOOV 23 对口型视频的精准拼接 MP4V2快速拼接 Stage1:A0 MP4v2合并 分段视频 B1 An-1Bn A0 Stage2: MP4v2合并 音视频 A0 B1 … An-
1 Bn Audioadts B1 … An-
1 Bn Audioadts iOS视频pps_id=0安卓视频pps_id=1拍档视频下载模块 素材解析 24 对口型视频的精准拼接 iPhone6iOS9录制的MP4sps_id=0,pps_id=
0 FTYPMOOV MDAT iPhone5siOS9录制的MP4sps_id=0,pps_id=
0 FTYPMOOV MDAT Sliceppsid:
0 Sliceppsid:
0 Sliceppsid:
0 Sliceppsid:
0 Sliceppsid:
0 Sliceppsid:
0 Sliceppsid:
0 Sliceppsid:
0 sps0x6742…spsid:0 pps0x28ce1f0c ppsid:0spsid:
0 Decoder:sps_table[32]SequenceParameterSet sps[0]sps[1] … pps_table[256]PictureParameterSet pps[0]pps[1] … 25 sps0x6742…spsid:0 pps0x28ce1f0c ppsid:0spsid:0 25 对口型视频的精准拼接 iPhone6iOS9录制的MP4sps_id=0,pps_id=
0 FTYPMOOV MDAT iPhone5siOS9录制的MP4sps_id=1,pps_id=
1 FTYPMOOV MDAT Sliceppsid:
0 Sliceppsid:
0 Sliceppsid:
0 Sliceppsid:
0 Sliceppsid:
1 Sliceppsid:
1 Sliceppsid:
1 Sliceppsid:
1 sps0x6742…spsid:0 pps0x28ce1f0c ppsid:0spsid:
0 Decoder:sps_table[32]SequenceParameterSet sps[0]sps[1] … pps_table[256]PictureParameterSet pps[0]pps[1] … 26 sps0x6742…spsid:1 pps0x28ce1f0c ppsid:1spsid:1 26 目录
1 2
3 4
5 背景 实时 3D 视频 总结 介绍 相机实践 拼接 回顾 在iPhone上如何看GPU调用?视频如何支持透明通道?3D人脸如何重建并运用?两个视频如何快速拼接?
声明:
该资讯来自于互联网网友发布,如有侵犯您的权益请联系我们。