编辑: 赵志强 2019-11-26
短视频 SDK 设计实践 王思宇 Movieous ?首席架构师 联合创始?人1议程 ? Movieous 简介 ? 短视频发展史和?行?业现状 ? 为什?么要做短视频 SDK ? SDK 需求分析 ? SDK 设计原则 ? SDK 架构设计 ? SDK 对外接?口设计 ? Q&A

1 Movieous 简介

1 Movieous 是?一家年?轻的科技公司,成员主要 来?自?一线互联?网公司的?音视频团队.

我们对 ?音视频在未来各个场景下的应?用充满了?好奇 ?心,既探索?音视频的底层技术?又注重接?入使 ?用的产品体验.我们深?入理?解?音视频技术的 每?一个细节,并且把技术转化成产品交付给 ?用户. https://movieous.cn

1 短视频服务 直播服务 RTC 服务 IAAS 致?力?于将?音视频技术变成和?水电煤?一样的基础设施,让 所有企业都可以简单接?入且?无需维护. ?用户

1 短视频发展史和?行?业现状 短视频发展史

2004 2012

2016 2017 ・ 视频?网站时代,?长视频的补充形式;

・ 强媒体属性,重在传递信息;

・ 搬运国外优质内容,或对?长视频进 ?行?加?工和改编. 萌芽期 ・ 基于移动端短视频?用户习惯, 逐渐养成,短视频价值独显;

・ 三?大营销事件推动短视频的 ?用户规模;

・ ?手机成为短视频拍摄?工具. 探索期 ・ 短视频APP数量?爆发式增?长;

・ 各?大互联?网巨头全?面布局短 视频领域;

・ 短视频内容创业?风?口崛起;

・ ?用户积累阶段. 探索期 ・ 市场竞争格局逐渐稳定;

・ ?行?业监督制度完善,产业运作机制规范;

・ 形成稳定的商业变现模式;

・ 垂直领域内容崛起. 成熟期 ・ 国内最早的视频分享?网站?土?豆?网成?立・国内最早的恶搞短视频《?一个馒头引发的?血案》出现 ・ 国内第?一家专业视频?网站 乐视?网成?立…・2014.05 美拍上线 ・ 2013.08 微博内置短视频应?用-秒拍 ・ 2012.11 快?手转型短视频社区 ・ 2011.03 GIF快?手诞?生…・2016.03 抖?音短视频上线 ・ 2016.11 梨?视频上线 ・ 2016.07 ?一条 获1亿?人?民币融资 ・ 2016.09 腾讯和今?日头条公布短视频 内容10亿补贴计划 … ・ 2017.04 ?土?豆?网全?面转型为短视频平台 ・ 2017.06 头条视频升级为?西?瓜视频 ・ 2017.08 ?二更? 获1亿?人?民币融资 … *数据来?自 艾瑞 PC时代 移动时代

1 2017-2018短视频?行?业DAU趋势 (来?自Trustdata) 短视频产业链 监管部?门 ?用户MCN PGC UGC 短视频平台 ?工具类 资讯类 社区类 社交?网络 资讯媒体 视频平台 ?支持服务 ?广告主 内容提供商 分发渠道 *数据来?自 易?观?大数据

1 为什?么要做短视频 SDK

1 ? 国内外短视频市场迎来爆发式增?长??音视频领域学习成本?高?图形图像处理??门槛?高?软硬件兼容问题多 ? 特?色玩法层出不?穷 ? 性能优化费时费?力?

1 SDK 设计原则

1 ? 与UI 层解耦,让业务层能够?自定义 UI ? 接?口简单且灵活性?高?合理?划分模块,提?高模块复?用率 ? 尽量?使?用系统 API 实现,减少三?方依赖 ? 合理?利??用硬件资源(GPU,编解码器?,神经?网络引 擎等) ? 去掉不?必要的数据拷?贝等操作,优化资源占?用率

1 SDK 需求分析

1 视频拍摄 ? 分段拍摄并拼接 ? 纯?音频录制 ? 纯视频录制 ? 最?小最?大时?长??支持外部数据源 ? 保存草稿 ? 美颜 ? ?水印 ? 滤镜 ? 贴纸 ? 变声 ? 混?音?合拍 ? 配?音?…1视频编辑 ? 裁剪 ? 拼接 ? 切割 ? 复制?片段 ? 删除?片段 ? 美颜 ? ?水印 ? 滤镜 ? 贴纸 ? 转场 ? ?音效 ? 快慢速 ? 反复 ? 倒放 ? …

1 视频导出 ? ?支持 mp3, flv, mp4, flv 等常?见?音视频容器?格式 ? ?支持 AAC, H.264, H.265 等常?见?音视频编码格式 ? 分辨率可配置 ? 码率可配置 ? …

1 视频转码 ? 容器?格式变换 ? 编码格式变换 ? ?音视频压缩 ? 声道转换 ? 分辨率转换 ? …

1 SDK 架构设计

1 MSVRecorder 系统相册或 本地?文件 MSVEditor 系统相册或 本地?文件 MSVExporte r MSVDraft MSVDraft MSVUpload er 系统相册或 本地?文件 ?音视频?文件 整体框架 系统 API AVCaptureSession AudioUnit AVComposition AudioUnit AVPlayer AVExportSession OpenGL ES … SDK 内核 Logger Cache CameraSource MicrophoneSource Codec Render A&V Processing … SDK 对外接?口MSVRecorder MSVEditor MSVExporter MSVDraft MSVMainTrackClip MSVAudioClip MSVRepeatEffect … 组件层次

1 应?用层 第三?方组件

1 SDK 对外接?口设计

1 MSVDraft 主轨?片段1 主轨?片段2 主轨?片段3 背景?音效1 背景?音效2 背景?音效3 特效1(反复特效) 特效2(外部特效) 特效3(快慢速特效) 转场 转场

1 MSVDraft @property (nonatomic, strong, readonly) NSArray *mainTrackClips;

@property (nonatomic, strong, readonly) NSArray *audioClips;

@property (nonatomic, strong, readonly) NSArray *effects;

@property (nonatomic, assign) CGSize videoSize;

@property (nonatomic, assign) MovieousTimeRange timeRange;

1 MSVMainTrackClip @property (nonatomic, strong, readonly) NSURL *URL;

@property (nonatomic, assign, readonly) MSVMainTrackClipType type;

@property (nonatomic, assign) NSTimeInterval transitionDuration;

@property (nonatomic, assign) MSVVideoTransitionType videoTransitionType;

@property (nonatomic, assign) float speed;

@property (nonatomic, assign) float volume;

- (void)setReverse:(BOOL)reverse progressHandler:(void(^)(float progress))progressHandler completionHandler:(void(^)(NSError *error))completionHandler;

1 MSVAudioClip @property (nonatomic, strong, readonly) NSURL *URL;

@property (nonatomic, assign) NSTimeInterval startTimeAtMainTrack;

@property (nonatomic, assign) MovieousTimeRange timeRange;

@property (nonatomic, assign) float speed;

@property (nonatomic, assign) float volume;

1 特效 @property (nonatomic, assign) MovieousTimeRange timeRangeAtMainTrack;

? MSVImageStickerEffect ? MSVLUTFilterEffect ? MSVExternalFilterEffect ? MSVRepeatEffect ? MSVSpeedEffect

1 外部特效 @property (nonatomic, assign) Class externalFilterClass;

@protocol MSVExternalFilter + (instancetype)sharedInstance;

- (CVPixelBufferRef)processPixelBuffer:(CVPixelBufferRef)pixelBuffer sampleTimingInfo:(CMSampleTimingInfo)sampleTimingInfo;

@end

1 MSVRecorder MSVDraft MSVRecorder Camera Source Microphone Source Preview

1 MSVRecorder @property (nonatomic, strong, readonly) MSVDraft *draft;

@property (nonatomic, strong, readonly) UIView *preview;

- (BOOL)startRecordingWithError:(NSError **)outError;

- (void)finishRecordingWithCompletionHandler:(void(^) (MSVMainTrackClip *clip, NSError *error))completionHandler;

1 MSVEditor MSVDraft MSVEditor MSVDraft Preview

1 MSVEditor @property (nonatomic, strong, readonly) MSVDraft *draft;

@property (nonatomic, strong, readonly) UIView *preview;

- (void)play;

- (void)pause;

- (void)seekToTime:(NSTimeInterval)time completionHandler:(void (^)(BOOL finished))completionHandler;

1 MSVExporter MSVDraft MSVExporter Media file

1 MSVExporter @property (nonatomic, strong, readonly, nullable) MSVDraft *draft;

@property (strong, nonatomic, nullable) NSURL *outputURL;

- (void)startExport;

- (void)cancelExport;

1 Q & A THANKS

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题