文档中心

iOS短视频SDK使用指南

1.名词解释

录制:支持可配置参数摄像头录制

预览:支持录制视频和导入视频的预览,暂时支持美颜和水印的实时预览

合成:将预览视频效果导出

上传:sdk内置ks3上传

播放:金山云播放sdk

2.功能介绍

短视频SDK基于金山iOS融合库SDK 短视频SDK支持功能:

短视频录制

录制/导入视频预览编辑

录制实时美颜,滤镜

录制变声、混音、背景音

断点续拍、回删、多段合成

录制支持定时拍摄

录制支持变速功能

支持横屏录制

录制时添加MV主题包

编辑添加滤镜

编辑添加水印

编辑添加背景音

编辑添加贴纸、字幕

编辑添加音效、场景

编辑文件合成,支持VideoToolbox、libx264、H.265编码

编辑支持视频的时间段裁剪预览

编辑支持BGM的时间段裁剪预览

编辑支持倍速播放预览

支持添加片尾

合成支持输出GIF

合成文件上传KS3

上传后文件预览播放

3.关于SDK费用

KSYMediaEditorKit是一款免费的短视频编辑SDK,录制、编辑和播放功能都免费提供,可以用于商业集成和使用。

License说明请见wiki

3.1 鉴权

短视频SDK涉及两个鉴权,区别如下:

  • SDK鉴权免费,但是是必需的

  • KS3鉴权涉及费用,但是是可选择不用的

3.1.1 SDK鉴权

使用KSYMediaEditorKit短视频编辑SDK前需要注册金山云帐号,SDK需要使用开发者帐号鉴权。请在此注册开发者帐号。

SDK鉴权本身不会引入付费。

为了开始开发用于SDK鉴权所需要的鉴权串,提供了服务器端鉴权需要的代码。

请见SDK鉴权说明

3.1.2 KS3鉴权

使用KSYMediaEditorKit短视频编辑SDK将合成的短视频上传至ks3存储时,需要满足ks3的鉴权要求。

如果您的APP不使用金山云的对象存储服务或者使用其他家云存储提供的存储或者CDN服务,上传阶段置null即可。

如果使用金山云对象存储需要开通商务帐号(涉及付费业务),请直接联系金山云商务。

3.2 付费

KSYMediaEditorKit可以免费使用。涉及付费的包括:

  • 动态贴纸(可以不集成,如果需要集成需要向第三方供应商付费)
  • 云存储(可以不集成)
  • 点播CDN(可以不集成)

涉及的云存储和CDN,具体费用请参考金山云官网

4.SDK集成方法介绍

4.1 系统要求

最低支持iOS版本:iOS 8.0

最低支持iPhone型号:iPhone 4

支持CPU架构: armv7,armv7s,arm64(和i386,x86_64模拟器) 含有i386和x86_64模拟器版本的库文件,录制功能无法在模拟器上工作,合成、播放功能完全支持模拟器。

4.2 下载工程

4.2.1 cocoaPods集成方式

目录结构如下所示:

pod 'GPUImage', '~> 0.1.7'
pod 'libksygpulive', '~> 2.4.0'
pod 'KSYMediaEditorKit', '~> 0.7.4'
pod 'Ks3SDK', '~> 1.7.2'

4.2.2 从oschina clone

为了加速国内访问,oschinaKSYMediaEditorKit完整镜像,请在podfile中修改库地址

https://git.oschina.net/ksvc/ksymediaeditorkit_ios.git
4.3 GPUImage依赖

请参考官方cocoapods提供的GPUImage,当前我们测试通过的版本是0.1.7

4.4 开始运行demo工程

4.4.1 使用Cocoapod的的方式来运行demo

demo 目录中已经有一个Podfile, 指定了本地开发版的pod 在demo目录下执行如下命令, 即可开始编译运行demo

$ pod install
$ open demo.xcworkspace

注意:

更新pod之后, 需要打开 xcwrokspace, 而不是xcodeproj

5.短视频时序图

短视频

  • 视频录制 当前视频录制依赖金山云推流播放SDK融合版,具体请参考 https://github.com/ksvc/KSYLive_iOS/wiki/shortVideoRecord

  • 视频编辑 短视频sdk目前暴漏的类为

    • KSYAuth 短视频鉴权类,具体请联系商务获取
    • KSYFilterCfg filter参数管理类,sdk内置三种美颜(KSYFilter中定义),关于这3种美颜的更多信息,请移步https://github.com/ksvc/KSYLive_iOS/wiki/filter。 同时我们也支持使用GPUImage的美颜,需要客户传入,具体请参考demo
    • KSYMediaEditor 视频编辑的核心类,包含了视频预览编辑、合成的所有接口
    • KSYWaterMarkCfg 水印配置管理类

sdk内置ks3上传功能,用户无需关心复杂的上传逻辑,只需要简单的接口掉用即可上传视频到KS3,关于KS3服务,请联系商务

短视频sdk必须联系联系商务开通服务,客户端如果没有成功鉴权只能预览编辑,无法合成视频。

6.短视频sdk视频预览及合成

KSYMediaEditor类封装了一系列接口方便用户进行视频预览、编辑、合成

  • 添加一个待编辑的视频

- (KSYStatusCode)addVideo:(NSString *)path;

调用者需要判断[KSYStatusCode][KSYStatusCode]的状态以确保添加成功

  • 设置视频显示的view

- (void)setupPlayView:(UIView *)view;

该函数必先在调用了addView之后调用

  • 添加一个水印

- (void)setWaterMark:(KSYWaterMarkCfg *)waterMark;

你可以给你的视频添加一个水印,水印参数参考[KSYWaterMarkCfg][KSYWaterMarkCfg]

  • 添加一个滤镜 sdk支持添加内置滤镜和GPUImge提供的滤镜

    • 添加一个内置滤镜
    KSYFilterCfg *cfg = [[KSYFilterCfg alloc] init];
    cfg.filterKey = KSYFilterBeautifyFace;
    [_editor setupFilter:self.filterCfg];
    • 添加一个外置滤镜
GPUImageSepiaFilter  *filter = [[GPUImageSepiaFilter alloc] init];
KSYFilterCfg *cfg = [[KSYFilterCfg alloc] initWithFilter:filter];
cfg.filter = filter;
[_editor setupFilter:cfg];

用户也可以根据GPUImage的框架拓展其他滤镜

  • 播放控制
//开始预览视频
- (void)startPreview;
//暂停视频预览
- (void)pausePreview;
//停止预览视频
- (void)stopPreView;

以上3个函数控制视频的播放

  • 视频合成

在合成之前,必须设置视频输出参数,通过KSYMediaEditor的outputSettings属性设置,支持的值如下

// 输出视频的编码格式
FOUNDATION_EXPORT NSString *const KSYVideoOutputCodec;

// 输出视频的宽
FOUNDATION_EXPORT NSString *const kSYVideoOutputWidth;

// 输出视频的高
FOUNDATION_EXPORT NSString *const kSYVideoOutputHeight;

// 输出视频的视频频码率
FOUNDATION_EXPORT NSString *const KSYVideoOutputVideoBitrate;

// 输出视频的帧率
FOUNDATION_EXPORT NSString *const KSYVideoOutputFramerate;

// 输出视频的音频码率
FOUNDATION_EXPORT NSString *const KSYVideoOutputAudioBitrate;

调用下面的函数开始合成

- (void)startProcessVideo;

用户使用delegate接收sdk内部的状态回调 通过下面的属性设置delegate

[KSYMediaEditor sharedInstance].delegate

6、短视频sdk和ks3上传的逻辑衔接

SDK支持KS3上传逻辑,不设置bucketName将不会触发上传逻辑

  • 合成完成后,会收到onComposeFinish的回调, 合成之后用户需要向自己的服务器请求上传信息,包括 KSYUploadBucketName、KSYUploadObjKey2个字段

  • 然后调用setUploadParams设置ks3上传的信息

  • 上传还需要一个token,经过步骤2的设置后在setUploadParams的第二个参数block中返回一系列参数(HttpMethod、ContentType、Resource、Headers、ContentMd5),使用者拿着这些参数向自己的服务器请求token及Date信息

  • 当获取到token及Date信息之后通过KSYUploadWithTokenBlock block函数设置这些信息,sdk内部自动上传

  • 通过onUploadProgressChanged取得上传进度,当收到onKS3UploadFinish表明上传成功,收到onErrorOccur表明上传出错,具体的错误类型参考KSYStatusCode 参考代码

   KSYMediaEditor *editor = [KSYMediaEditor sharedInstance];
    editor.delegate = self;
    NSString *bundleId = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIdentifier"];
    NSString *objKey = [NSString stringWithFormat:@"%@/%ld.mp4",bundleId,time(NULL)];

    NSDictionary *uploadparams = @{KSYUploadBucketName : @"ksvsdemo",
                                   KSYUploadObjKey : objKey
                                   };
    __weak typeof(self) weakSelf = self;
    //设置上传参数 block
    [editor setUploadParams:uploadparams uploadParamblock:^(NSDictionary *params, KSYUploadWithTokenBlock block) {
        [weakSelf requestKS3TokenWith:params complete:^(NSString *ks3Token, NSString *strDate) {
            //客户获取到token及date信息后调用block设置这些信息,发起上传
            block(ks3Token, strDate);
        }];
    }];