短视频 SDK 源码解读(iOS)

这篇档将介绍腾讯云小视频(UGC)iOS Demo 的运行方式与源码结构。Demo 基于腾讯云短视频 SDK(LiteAVSDK)构建,涵盖短视频的录制、编辑、合成、发布、播放,以及腾讯特效美颜等能力。通过阅读这篇档,可以以快速理解工程各模块的职责与代码组织方式。

相关产品
短视频 SDK 产品页,含版本规格、价格与购买入口。

一、如何运行 Demo

1. 下载 Demo,并解压。

2. 在 XiaoShiPin 目录下执行 pod install,完成后打开 XiaoShiPinApp.xcworkspace。

3. 在 XiaoShiPin/AppDelegate.m 的 setLicenceURL 方法中填写申请的短视频 License 和腾讯特效 License 信息:

·TXLiveBase / TXUGCBase 的 setLicenceURL:key::短视频 License 的授权地址与密钥。

·TELicenseCheck 的 setTELicense:key:completion::腾讯特效 License 的授权地址与密钥。

[TXLiveBase setLicenceURL:@"<License URL>" key:@"<License Key>"];[TXUGCBase setLicenceURL:@"<License URL>" key:@"<License Key>"];[TELicenseCheck setTELicense:@"<License URL>" key:@"<License Key>" completion:^(NSInteger authresult, NSString *_Nonnull errorMsg) { // authresult == TELicenseCheckOk 表示鉴权成功}];

4. 在 Xcode 中选中 TARGETS > XiaoShiPinApp > Signing & Capabilities,将 Bundle Identifier 修改为申请 License 时填写的 iOS 包名。

二、工程结构

小视频工程通过 Podfile 组织,业务模块与功能 Kit 划分如下:

模块 说明
XiaoShiPin 业务模块(账号、列表、播放、发布、短视频等),编译产物为 XiaoShiPinApp。
UGCKit 短视频 SDK 的高级封装(含 UI)。
BeautySettingKit 基础美颜模块。
TEBeautyKit 腾讯特效美颜接入模块(远程 Pod 依赖)。

三、XiaoShiPin

XiaoShiPin 模块目录结构参考如下:

文件/目录 说明
AppDelegate.h/.m 应用入口,负责 License 设置、网络状态监控、Bugly 初始化,并拉起主界面 TCMainViewController。
main.m 程序入口。
ViewController.h/.m 启动引导页。
TCConstants.h 全局常量(HTTP 服务地址、分享 AppID、App Group、错误码等)。
SDKHeader.h SDK 头文件统一入口。
Mem.h 内存辅助宏。
Info.plist 应用配置(权限声明等)。
AppViewControllers 各业务页面(账号、列表、播放、发布、个人资料等)。
Model 数据模型(登录、用户资料)。
Util 工具类。
TXBeautyRes 腾讯特效美颜使用的滤镜、动效、贴纸等资源。
Assets.xcassets / Assets 图片资源。
Base.lproj / en.lproj / zh-Hans.lproj 多语言资源。

业务功能按 AppViewControllers 下的子目录划分,下面分别介绍。

四、目录结构

文件/目录 说明
Account 账号模块,包括登录以及注册。
AccountInfo 个人资料模块,包括用户资料、设置、关于、注销账号、H5 承载页等。
MainList 小视频列表模块,包括列表数据与展示。
MainTab 小视频主界面(Tab 容器)。
NavigationController 自定义导航控制器。
Publish 短视频发布模块。
UGCKitWrapper 短视频录制/编辑流程的接入封装。
UGCVideoJoinDemo 短视频合成(多段拼接)预览。
VideoPlayer 点播播放模块。

五、账号模块

·负责处理用户登录、注册、登录刷新以及账号注销的逻辑。

·如果你已经有自己的账号体系,可以直接替换该模块。

·调用 TCLoginModel 的 registerWithUsername:password:succ:fail: 注册账号、loginWithUsername:password:succ:fail: 登录,登录成功后调用 scheduleRefreshLoginForExpireDate: 定时刷新登录态;退出登录调用 logout:;注销账号调用 deleteAccount:completion:。

相关代码:

类名 描述
TCLoginViewController 用户登录页面。
TCRegisterViewController 用户注册页面。
TXWechatInfoView 微信信息展示控件。
TCLoginModel 用户登录注册管理类。
TCLoginParam 登录参数与登录信息缓存。
TCUserInfoModel 用户资料管理类(单例),负责资料拉取、保存与本地缓存。

六、主界面和列表管理模块

·主界面 TCMainViewController 继承自 UITabBarController,主要负责短视频列表、短视频拍摄/编辑和个人资料三个一级功能的切换。

·登录成功后,默认展示列表界面;单击「+」号按钮后,弹出对话框让你选择录制小视频或编辑本地小视频;单击个人资料按钮,跳转到个人资料页面。

·列表管理包含列表的拉取和展示,数据层为 TCLiveListMgr(定义在 TCLiveListModel.h 中),负责列表数据的拉取、缓存和更新,列表拉取采用分页模式,拉取到第一页后即通知界面刷新。

相关代码:

类名 描述
TCMainViewController 主界面,用于呈现短视频列表、短视频拍摄/编辑、用户信息页。
TCNavigationController 自定义导航控制器。
TCLiveListMgr 列表管理类,提供接口获取本地内存列表及从服务器更新列表。
TCVideoListViewController 列表展示界面,负责呈现短视频的数据。
TCVideoListCell 短视频列表适配层(Cell)。
TCLiveListModel 视频数据(TCLiveInfo、TCLiveUserInfo)。

七、短视频录制模块

·小视频提供 短视频录制 功能,可录制一分钟以内的短视频,支持多段拍摄(在录制页删除片段),并支持分屏合拍/三屏合拍模式。

·录制页通过 UGCKitWrapper 创建并展示 UGCKitRecordViewController。

相关代码:

类名 描述
UGCKitWrapper 短视频录制/编辑流程的接入封装,负责按主题创建并展示录制页与编辑页。
UGCKitRecordViewController 短视频录制页面。
UGCKitRecordConfig 录制参数配置(画面比例、分辨率、码率、最小时长/最长时长、fps、水印、合唱视频、合拍模式等)。

八、文件选择模块

·提供本地媒体选择功能,支持从系统相册中挑选视频(或图片),并可在选择后自动拼接多个视频。

·媒体选择页通过 UGCKitMediaPickerViewController 实现,同时可配合 TCVideoEditPrevViewController 做拼接前的预览。

相关代码:

类名 描述
UGCKitMediaPickerViewController 本地媒体选择界面。
UGCKitMediaPickerConfig 媒体选择参数(可选数量、媒体类型、列数、是否拼接视频等)。
TCVideoEditPrevViewController 短视频合成预览界面。

九、编辑模块

视频编辑 包括视频裁剪、慢动作、滤镜、音乐混音、贴纸、添加字幕等功能。

·裁剪页 UGCKitCutViewController 负责选择视频区间。

·裁剪后进入编辑页 UGCKitEditViewController,底部有音乐、滤镜、速度、特效、贴纸、字幕等功能。

·编辑页的贴纸、字幕、时间特效等由 UGCKitVideoEffectManager 统一管理。

相关代码:

类名 描述
UGCKitCutViewController 短视频裁剪界面。
UGCKitEditViewController 短视频裁剪后编辑界面,底部有音乐、滤镜、速度、特效、贴纸、字幕等功能。
UGCKitVideoEffectManager 编辑特效(贴纸、字幕、时间特效等)管理类。
UGCKitEditConfig 编辑参数配置(旋转角度、压缩分辨率、码率、水印、片尾水印、生成模式等)。

十、短视频合成模块

·UGCVideoJoinDemo/ 目录与 UGCKit 中的合成能力负责短视频合成相关功能。

·多段视频的拼接(combineVideos)在选择阶段由 UGCKitMediaPickerViewController + UGCKitAssetLoader 完成,录制页也实现了 TXVideoJoinerListener 以支持合拍、多段合成场景。

相关代码:

类名 描述
TCVideoEditPrevViewController 短视频合成/拼接预览界面。
UGCKitAssetLoader 媒体资源加载与拼接类。

十一、短视频发布模块

将录制的文件发布到腾讯云视频分发平台(点播系统)中。

相关代码:

类名 描述
TCVideoPublishController 短视频发布界面。
TCUploadHelper 上传辅助类。

十二、短视频播放模块

播放已经发布到点播系统中的视频,在小视频列表页面上下滑动可快速切换上/下一个视频。

相关代码:

类名 描述
TCBasePlayViewController 播放页基类。
TCVodPlayViewController 短视频点播播放界面。
TCPlayDecorateView 播放页装饰层(点赞、评论、分享等控件)。
TCPlayViewCell 播放列表 Cell。

十三、UGCKit

UGCKit 是对短视频 SDK 的高级封装(包含 UI),以本地 Pod 形式引入,方便快速接入。

UGCKit 目录结构参考如下:

文件/目录 说明
UGCKit/Classes/Source 源码目录,按功能划分为 Common、Record、Edit、VideoCut、MediaPicker、Music、upload、Model、Theme、Report。
UGCKit/Assets UI 图片与动效资源。
UGCKit/Localizable 多语言资源。
UGCKitRecordViewController 短视频录制模块 View Controller。
UGCKitEditViewController 短视频编辑模块 View Controller。
UGCKitCutViewController 短视频裁剪模块 View Controller。
UGCKitMediaPickerViewController 视频/图片选择模块 View Controller。
UGCKitBGMListViewController 背景音乐列表界面。
UGCKitTheme 主题配置(图标、颜色、本地化字符串等)。
UGCKitMedia / UGCKitResult / UGCKitWatermark 媒体、结果与水印数据模型。
UGCKitReporter 数据上报接口。
UGCKit.h 框架公共头文件入口。
UGCKitConstants.h 常量配置信息(缓存路径等)。

十四、上传模块(含 QUIC 加速)

上传模块负责短视频上传(含 QUIC 协议探测与加速):

文件/目录 说明
TXUGCPublish 短视频上传入口。
QuicClient QUIC 客户端封装,负责连接、请求、取消与回调转发。
TVCQuicConfigProxy QUIC 配置代理。
TVCClient / TVCConfig / TVCReport 上传客户端、配置与数据上报。
TXUGCPublishOptCenter / TXUGCPublishUtil 上传优化中心与辅助工具。

注意:说明:

注意:该模块通过 QCloudQuic 与 QCloudCOSXML 依赖提供底层 QUIC 与对象存储能力。上传前会探测 QUIC 链路是否连通,从而提升上传速度与成功率;当业务无需 QUIC 加速时,可移除相关依赖而不影响上传主流程。

十五、TEBeautyKit

此模块是腾讯特效美颜 Kit,用于快速接入腾讯特效美颜。Demo 中将其接入在 UGCKit 的录制控制器 UGCKitRecordViewController 中,你可以参考该方式快速接入。

文件/目录 说明
XiaoShiPin/TXBeautyRes 存放腾讯特效中使用的滤镜和贴纸,以及 TEBeautyKit 中美颜面板需要使用的配置文件。
TEBeautyKit 腾讯特效美颜 Kit(Pod 依赖),负责 SDK 初始化与纹理处理。
TEPanelView 腾讯特效美颜面板视图。
TEUIConfig 美颜面板资源配置。
TEUIProperty 美颜属性数据模型。
XMagic 腾讯特效渲染引擎。
UGCKitRecordViewController 美颜接入位置。

十六、BeautySettingKit(基础美颜)

此模块是短视频中的基础美颜模块。如果客户选择使用基础美颜,可以使用此模块进行快速集成。

文件/目录 说明
Filter 滤镜定义。
Interfaces 美颜面板动作协议。
Model 美颜动作代理与动态贴纸管理。
View 美颜面板视图与主题。
Assets 美颜面板 UI 与滤镜资源。
TCBeautyPanel 美颜面板组件。
TCBeautyPanelView 美颜面板视图。
TCBeautyPanelActionPerformer 美颜参数设置协议,由 TCBeautyPanelActionProxy 代理给 SDK 对象。
TCBeautyPanelActionProxy 美颜动作代理。
TCFilter 滤镜定义与资源管理。
TCPituMotionManager 动态贴纸(P 图)管理。
TCBeautyPanelTheme 美颜面板主题配置。
TCMenuView 美颜面板菜单视图。
TCBeautyPanel.h 框架公共头文件入口。
赞 (0)
上一篇 4天前
下一篇 4天前