Page History

Home

Last edited by 朱林

一、产品概述

CNLiveRDVESDK 是视讯云推出的iOS平台上使用软件开发工具包(SDK),支持短视频的录制,编辑,导出等功能。

二、更新记录

当前版本:v1.0;

三、SDK功能特性

录制

美颜/脸萌/特效

编辑

分割/裁剪/旋转

变速

配乐/配音

字幕/动画

多样式转场动画

MV

四、系统要求

  • 最低支持iOS版本:iOS 8.0;
  • 支持的CPU架构:armv7、arm64;

五、SDK集成方式

  1. 下载短视频编辑SDK;
  2. 导入SDK “ CNLiveRDVESDK.framework ” ;
  3. 导入资源文件: faceAuthpack.h、RDVECore.bundle、RDVEUISDK.bundle、VideoRecord.bundle
  4. 引用头文件: #import <CNLiveRDVESDK/CNLiveRDVESDK.h>
  5. 添加依赖库: 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