一、产品概述
CNLiveRDVESDK 是视讯云推出的iOS平台上使用软件开发工具包(SDK),支持短视频的录制,编辑,导出等功能。
二、更新记录
当前版本:v1.0;
三、SDK功能特性
录制
美颜/脸萌/特效
编辑
分割/裁剪/旋转
变速
配乐/配音
字幕/动画
多样式转场动画
MV
四、系统要求
- 最低支持iOS版本:iOS 8.0;
- 支持的CPU架构:armv7、arm64;
五、SDK集成方式
- 下载短视频编辑SDK;
- 导入SDK “ CNLiveRDVESDK.framework ” ;
- 导入资源文件: faceAuthpack.h、RDVECore.bundle、RDVEUISDK.bundle、VideoRecord.bundle
- 引用头文件:
#import <CNLiveRDVESDK/CNLiveRDVESDK.h> - 添加依赖库: libz.1.2.8.tbd, libstdc++.tbd, Foundation.framework, UIKit.framework, AVFoundation.framework, OpenGLES.framework 如果要使用FaceU功能还需添加Accelerate.framework。
六、系统权限
<key>NSAppleMusicUsageDescription</key>
<string></string>
<key>NSCameraUsageDescription</key>
<string></string>
<key>NSMicrophoneUsageDescription</key>
<string></string>
<key>NSPhotoLibraryUsageDescription</key>
<string></string>
七、SDK使用
初始化SDK
/** 初始化对象
*
* @param appId appId description
* @param appKey appKey description
* @param resultFailBlock 返回错误信息
*/
- (instancetype)initWithAppId:(NSString *)appId
AppKey:(NSString *)appKey
resultFail:(CnVEFailBlock )resultFailBlock;
设置相关配置信息
/**
* 设置相机采集配置信息
*/
- (void)setCameraConfiguration:(CNLiveCameraConfiguration *)cameraConfiguration;
/**
* 设置视频编辑配置信息
*/
- (void)setEditConfiguration:(CNLiveEditConfiguration *)editConfiguration;
/**
* 设置导出相关配置信息
*/
- (void)setExportConfiguration:(CNLiveExportConfiguration *)exportConfiguration;
相机采集配置:CNLiveCameraConfiguration 视频编辑配置:CNLiveEditConfiguration 导出相关配置:CNLiveExportConfiguration
注:当配置信息发生改变时,请重新 set 相关配置;
打开相册
/**选择视频或图片
* @param viewController 源控制器
* @param albumType 选择相册类型(仅选图片,仅选视频,两者皆可)
* @param callbackBlock 相册选择完成返回一个NSURL数组 NSMutableArray <NSURL *> *List
* @param cancelBlock 取消选择相册资源
*/
- (BOOL)onCnVEAlbumWithSuperController:(UIViewController *)viewController
albumType:(CNLiveALBUMTYPE)albumType
callBlock:(OnAlbumCallbackBlock) callbackBlock
cancelBlock:(CnVECancelBlock) cancelBlock;
截取视频
- 通过传入视频对象 AVUrlAsset 截取
/** 截取视频 通过传入视频对象 AVUrlAsset
* @param viewController 源控制器
* @param title 导航栏标题
* @param backgroundColor 背景色
* @param cancelButtonTitle 取消按钮文字
* @param cancelButtonTitleColor 取消按钮标题颜色
* @param cancelButtonBackgroundColor 取消按钮背景色
* @param otherButtonTitle 完成按钮文字
* @param otherButtonTitleColor 完成按钮标题颜色
* @param otherButtonBackgroundColor 完成按钮背景色
* @param urlAsset 数据源
* @param outputVideoPath 视频输出路径
* @param callbackBlock 截取完成回调
* @param failback 截取失败回调
* @param cancelBlock 取消截取回调
*/
- (void)trimVideoWithSuperController:(UIViewController *)viewController
controllerTitle:(NSString *) title
backgroundColor:(UIColor *) backgroundColor
cancelButtonTitle:(NSString *) cancelButtonTitle
cancelButtonTitleColor:(UIColor *) cancelButtonTitleColor
cancelButtonBackgroundColor:(UIColor *) cancelButtonBackgroundColor
otherButtonTitle:(NSString *) otherButtonTitle
otherButtonTitleColor:(UIColor *) otherButtonTitleColor
otherButtonBackgroundColor:(UIColor *) otherButtonBackgroundColor
urlAsset:(AVURLAsset *) urlAsset
outputPath:(NSString *) outputVideoPath
callbackBlock:(CnVE_TrimAssetCallbackBlock) callbackBlock
failback:(CnVEFailBlock ) failback
cancel:(CnVECancelBlock ) cancelBlock;
- 通过传入路径 path 截取
/** 截取视频 通过传入路径 path
* @param viewController 源控制器
* @param title 导航栏标题
* @param backgroundColor 背景色
* @param cancelButtonTitle 取消按钮文字
* @param cancelButtonTitleColor 取消按钮标题颜色
* @param cancelButtonBackgroundColor 取消按钮背景色
* @param otherButtonTitle 完成按钮文字
* @param otherButtonTitleColor 完成按钮标题颜色
* @param otherButtonBackgroundColor 完成按钮背景色
* @param assetPath 数据源
* @param outputVideoPath 视频输出路径
* @param callbackBlock 截取完成回调
* @param failback 截取失败回调
* @param cancelBlock 取消截取回调
*/
- (void)trimVideoWithSuperController:(UIViewController *)viewController
controllerTitle:(NSString *) title
backgroundColor:(UIColor *) backgroundColor
cancelButtonTitle:(NSString *) cancelButtonTitle
cancelButtonTitleColor:(UIColor *) cancelButtonTitleColor
cancelButtonBackgroundColor:(UIColor *) cancelButtonBackgroundColor
otherButtonTitle:(NSString *) otherButtonTitle
otherButtonTitleColor:(UIColor *) otherButtonTitleColor
otherButtonBackgroundColor:(UIColor *) otherButtonBackgroundColor
assetPath:(NSString *) assetPath
outputPath:(NSString *) outputVideoPath
callbackBlock:(CnVE_TrimVideoPathCallbackBlock) callbackBlock
failback:(CnVEFailBlock ) failback
cancel:(CnVECancelBlock ) cancelBlock;
编辑视频
- 编辑短视频MV
/** 编辑短视频MV
*
* @param viewController 源控制器
* @param urlAsset 视频源
* @param clipTimeRange 时间段
* @param crop crop范围 default :CGRectMake(0, 0, 1, 1)
* @param outputVideoPath 视频输出路径
* @param callbackBlock 完成编辑回调
* @param cancelBlock 取消编辑回调
*/
- (void)editVideoWithSuperController:(UIViewController *)viewController
urlAsset:(AVURLAsset *)urlAsset
clipTimeRange:(CMTimeRange )clipTimeRange
crop:(CGRect)crop
outputPath:(NSString *)outputVideoPath
callback:(CnVECallbackBlock )callbackBlock
cancel:(CnVECancelBlock )cancelBlock;
- 编辑视频(传入URL数组)
/** 编辑视频(传入URL数组)
*
* @param viewController 源控制器
* @param foldertype 缓存文件夹类型 (Documents、Library、Temp,None)
* @param appAlbumCacheName 需扫描的缓存文件夹名称
* @param urlsArray 视频/图片路径(NSMutableArray <NSURL*>)如:相册视频 assets-library://asset/asset...
* @param outputVideoPath 视频输出路径
* @param callbackBlock 完成编辑回调
* @param cancelBlock 取消编辑回调
*/
- (void)editVideoWithSuperController:(UIViewController *)viewController
foldertype:(CNLiveFolderType)foldertype
appAlbumCacheName:(NSString *)appAlbumCacheName
urlsArray:(NSMutableArray *)urlsArray
outputPath:(NSString *)outputVideoPath
callback:(CnVECallbackBlock )callbackBlock
cancel:(CnVECancelBlock )cancelBlock;
录制视频
/** 录制视频 参数设置(cameraConfiguration)
* @param source 源视图控制器
* @param callbackBlock 完成录制回调(result :0 表示MV 1表示视频)
* @param imagebackBlock 拍照完成回调
* @param cancelBlock 取消录制回调
*/
- (void)videoRecordAutoSizeWithSourceController: (UIViewController*)source
callbackBlock: (CnVERecordCallbackBlock)callbackBlock
imagebackBlock: (CnVECallbackBlock)imagebackBlock
faileBlock: (CnVEFailBlock)failBlock
cancel: (CnVECancelBlock)cancelBlock;
获取视频信息
/**获取视频信息 字典 width height fps bitrate
*
*/
- (NSDictionary *) getVideoInformation:(AVURLAsset *)urlAsset;
压缩视频
/** 压缩视频 参数设置(ExportConfiguration)
* @param size 压缩输出分辨率
* @param bitrate 压缩输出比特率
* @param progressBlock 压缩进度回调
* @param callbackBlock 压缩完成回调
* @param failBlock 压缩失败回调
*/
- (void)compressVideoAsset:(AVURLAsset *)urlAsset
outputPath:(NSString *)outputPath
startTime:(CMTime )startTime
endTime:(CMTime )endTime
outputSize:(CGSize) size
outputBitrate:(float) bitrate
supperView:(UIViewController *)supperView
progressBlock:(void (^)(float progress))progressBlock
callbackBlock:(void (^)(NSString *videoPath))callbackBlock
fail:(void (^)(NSError *error))failBlock;
TS 、AVI 转MP4
/** TS 、AVI 转MP4
*
* @param sourcePath 源文件路径
* @param outputFilePath 输出文件路径
* @param keepAudio 是否需要音频
* @param progressBlock 输出进度
* @param completedBlock 转换完成的回调[error:转换失败的错误码]
*/
- (void)TSAVItoMP4:(NSString *)sourcePath
outputFilePath:(NSString *)outputFilePath
keepAudio:(bool)keepAudio
progressBlock:(void(^)(float progress))progressBlock
completedBlock:(void(^)(NSError *error))completedBlock;
自定义资源
自定义MV资源
通过以下配置启用自定义云音乐,并设置获取云音乐资源的url
_editCfg.cloudMusicResourceURL = CloudMusicResourceURL;//若不设置url自动隐藏该功能
获取云音乐资源的url需满足以下定义:
请求格式:
| URL | http://** |
| 支持格式 | JSON |
| HTTP 请求验证 | POST/GET |
| 请求次数限制 | 否 |
请求参数:
| 参数名 | 必选 | 类型及范围 | 说明 |
|---|---|---|---|
| type | 是 | string | android iOS |
正常返回结果:
| 返回键 | 类型 | 返回值 | 说明 |
|---|---|---|---|
| state | Boolean | 请求状态 | true |
| code | int | 请求状态码 | 200正常 |
| message | String | 请求状态文本 | |
| result | JsonObject | 请求返回参数 | |
| mvlist | JsonArray | mv列表 | |
| name | String | mv名称 | 不能为null且唯一 |
| img | String | mv图片 | 不能为null且唯一 |
| url | String | mv链接 | 不能为null且唯一 |
| enname | String | 英文名称 | 不能为null且唯一 |
示例:
{
"code": 200,
"message": "获取成功",
"state": true,
"result": {
"mvlist": [
{
"name": "风景",
"enname": "fengjing",
"img": "http://d.56show.com/dianbookupload/shortvideo/mv/fengjing.png",
"url": "http://d.56show.com/dianbookupload/shortvideo/mv/fengjing.zip"
},
{
"name": "搞怪",
"enname": "gaoguai",
"img": "http://d.56show.com/dianbookupload/shortvideo/mv/gaoguai.png",
"url": "http://d.56show.com/dianbookupload/shortvideo/mv/gaoguai.zip"
},
{
"name": "萌可爱",
"enname": "mengkeai",
"img": "http://d.56show.com/dianbookupload/shortvideo/mv/mengkeai.png",
"url": "http://d.56show.com/dianbookupload/shortvideo/mv/mengkeai.zip"
},
{
"name": "人像",
"enname": "relax",
"img": "http://d.56show.com/dianbookupload/shortvideo/mv/relax.png",
"url": "http://d.56show.com/dianbookupload/shortvideo/mv/relax.zip"
},
{
"name": "自拍",
"enname": "zipai",
"img": "http://d.56show.com/dianbookupload/shortvideo/mv/zipai.png",
"url": "http://d.56show.com/dianbookupload/shortvideo/mv/zipai.zip"
}
]
}
}
自定义人脸贴纸资源
请求格式:
| URL | http://** |
| 支持格式 | JSON |
| HTTP 请求验证 | POST/GET |
| 请求次数限制 | 否 |
请求参数:
| 参数名 | 必选 | 类型及范围 | 说明 |
|---|---|---|---|
| type | 是 | string | android iOS |
正常返回结果:
| 返回键 | 类型 | 返回值 | 说明 |
|---|---|---|---|
| state | Boolean | 请求状态 | |
| code | int | 请求状态码 | |
| message | String | 请求状态文本 | |
| result | JsonObject | 请求返回参数 | |
| bundles | JsonArray | 贴纸列表 | |
| name | String | 贴纸名称 | |
| img | String | 贴纸图片 | |
| url | String | 贴纸链接 |
示例:
{
"code": "000000",
"message": "获取成功",
"state": true,
"result": {
"bundles": [
{
"name": "arale",
"enname": 0,
"img": "http://d.56show.com/dianbookupload/shortvideo/face_android/arale_300x300xxx2.png",
"url": "http://d.56show.com/dianbookupload/shortvideo/face_android/arale1.mp3"
},
{
"name": "blackcat",
"enname": 1,
"img": "http://d.56show.com/dianbookupload/shortvideo/face_android/blackcat_300x300xxx1.png",
"url": "http://d.56show.com/dianbookupload/shortvideo/face_android/blackcat4.mp3"
},
.
.
.
{
"name": "wcat",
"enname": 18,
"img": "http://d.56show.com/dianbookupload/shortvideo/face_android/wcat.png",
"url": "http://d.56show.com/dianbookupload/shortvideo/face_android/wcat.mp3"
}
]
}
}
自定义Music资源
通过以下配置可以启用自定义 music 并设置获取 music 资源的 url
_editCfg.musicResourceURL = MusicResourceURL;//若不设置 url 就是使用默认的网络配乐
获取 Music 资源的 url 需满足以下定义: 请求格式:
| URL | http://** |
| 支持格式 | JSON |
| HTTP 请求验证 | POST/GET |
| 请求次数限制 | 否 |
请求参数:
| 参数名 | 必选 | 类型及范围 | 说明 |
|---|---|---|---|
| type | 是 | string | android iOS |
正常返回结果:
| 返回键 | 类型 | 返回值 | 说明 |
|---|---|---|---|
| state | Boolean | 请求状态 | true |
| code | int | 请求状态码 | 200正常 |
| message | String | 请求状态文本 | |
| result | JsonObject | 请求返回参数 | |
| bgmusic | JsonArray | music列表 | |
| name | String | 名称 | 不能为null且唯一 |
| icon | String | 图片 | 不能为null且唯一 |
| url | String | music链接 | 不能为null且唯一 |
示例:
{
"code": 200,
"message": "获取成功",
"state": true,
"result": {
"bgmusic": [
{
"name": "撒野",
"icon": "http://d.56show.com/dianbookupload/shortvideo/bgmusic/saye.png",
"url": "http://d.56show.com/dianbookupload/shortvideo/bgmusic/saye.mp3"
},
{
"name": "清新",
"icon": "http://d.56show.com/dianbookupload/shortvideo/bgmusic/qingxin.png",
"url": "http://d.56show.com/dianbookupload/shortvideo/bgmusic/qingxin.mp3"
},
{
"name": "旅行",
"icon": "http://d.56show.com/dianbookupload/shortvideo/bgmusic/lvxing.png",
"url": "http://d.56show.com/dianbookupload/shortvideo/bgmusic/lvxing.mp3"
},
.
.
.
{
"name": "潮玩",
"icon": "http://d.56show.com/dianbookupload/shortvideo/bgmusic/chaowan.png",
"url": "http://d.56show.com/dianbookupload/shortvideo/bgmusic/chaowan.mp3"
}
]
}
}
自定义-云音乐资源
通过以下配置可以启用自定义 music 并设置获取 music 资源的 url
_editCfg.cloudMusicResourceURL = CloudMusicResourceURL;
获取 Music 资源的 url 需满足以下定义: 请求格式:
| URL | http://** |
| 支持格式 | JSON |
| HTTP 请求验证 | POST/GET |
| 请求次数限制 | 否 |
请求参数:
| 参数名 | 必选 | 类型及范围 | 说明 |
|---|---|---|---|
| type | 是 | string | android iOS |
正常返回结果:
| 返回键 | 类型 | 返回值 | 说明 |
|---|---|---|---|
| state | Boolean | 请求状态 | true |
| code | int | 请求状态码 | 200正常 |
| message | String | 请求状态文本 | |
| result | JsonObject | 请求返回参数 | |
| bgmusic | JsonArray | music列表 | |
| name | String | 名称 | 不能为null且唯一 |
| icon | String | 图片 | 不能为null且唯一 |
| musiclist | JsonArray | 单个类型下的音乐 | 不能为null且唯一 |
| name | String | 歌曲名 | 不能为null且唯一 |
| times | int | 音乐时长 | 单位:秒>0 |
| url | String | music链接 | 不能为null且唯一 |
示例:
{
"code": 200,
"message": "获取成功",
"state": "true",
"result": {
"bgmusic": [
{
"name": "摇滚",
"icon": "http://d.56show.com/dianbookupload/shortvideo/cloudmusic/caiyi.png",
"musiclist": [
{
"name": "Boys(摇滚合唱版)",
"url": "http://d.56show.com/dianbookupload/shortvideo/cloudmusic/boys.mp3",
"times": "262"
},
{
"name": "Crocodile Rock - 鳄鱼摇滚",
"url": "http://d.56show.com/dianbookupload/shortvideo/cloudmusic/crocodile.mp3",
"times": "228"
},
{
"name": "谢谢老师(摇滚版)",
"url": "http://d.56show.com/dianbookupload/shortvideo/cloudmusic/xxls.mp3",
"times": "150"
}
]
},
.
.
.
{
"name": "动漫",
"icon": "http://d.56show.com/dianbookupload/shortvideo/cloudmusic/huwai.png",
"musiclist": [
{
"name": "冰菊物语",
"url": "http://d.56show.com/dianbookupload/shortvideo/cloudmusic/bjwy.mp3",
"times": "293"
}
]
}
]
}
}
详细接口使用请参考demo