全部产品
弹性计算 会员服务 网络 安全 移动云 数加·大数据分析及展现 数加·大数据应用 管理与监控 云通信 阿里云办公 培训与认证 智能硬件
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 更多
视频点播

标准版

更新时间:2018-02-02 16:15:03

一、版本要求

iOS支持iOS8.0以上

二、开发环境配置

SDK开发环境为macOS High Sierra 10.13.2 Xcode9.2及以上

三、使用说明

  • 导入SDK

    先下载SDK,详见SDK下载页面
    直接引入SDK的framework,名称为 AliyunVideoSDKPro
  1. 开发者打开工程,选中目标target,依次选择”Build Phases”->”Link Binary With Libraries”,点击”+”号,点击“Add Other…”,导入AliyunOSSiOS.frameworkVODUpload.framework
  2. 开发者打开工程,选中目标target,依次选择”General”->”Embededed Binaries”,点击”+”号,点击“Add Other…”,导入QUCore-ThirdParty.frameworkAliyunVideoSDKPro.framework

  3. 同时,还需依赖libz.tbdlibc++.tbdlibiconv.tbdlibresolv.tbdImageIO.frameworkCoreMedia.frameworkCoreVideo.frameworkSystemConfiguration.frameworkPhotos.frameworkOpenAL.frameworkVideoToolbox.framework请一并加上。截图如下:依赖库示例图.png

  4. 配置 Build Setting -- Build Options -- Enable Bitcode 选项为NO

  5. 配置 Build Setting -- Linking -- Other Linker Flags 添加 -ObjC选项
  • 添加用户权限

打开工程的 info.Plist 文件,添加如下字段:

  1. `Privacy - Camera Usage Description`
  2. `Privacy - Microphone Usage Description`
  3. `Privacy - Photo Library Usage Description`

按需添加字段描述。

  • 录制

  • 录制模块功能接口调用顺序图:iOS录制接口

  • 初始化参数

    使用录制功能,需要初始化AliyunIRecorder对象,初始化方法如下:

    1. - (instancetype)initWithDelegate:(id)delegate videoSize:(CGSize)videoSize;

    参数说明,delegate传入代理对象,用于录制的回调信息,videoSize为设置的视频分辨率。

    AliyunIRecorder对象提供了preview属性,为用于播放视频的预览view,必需进行设置,即

    1. _recorder.preview = yourView;
  • 录制视频管理

    我们提供了视频录制片段的管理类—AliyunClipManager,该类可以对拍摄的视频进行设置,为AliyunIRecorder的属性,通过:

    1. _recorder.clipManager;

    获取。

    该类提供如下方法:

  1. @property (nonatomic, assign) CGFloat maxDuration; //视频最大时长 默认8
  2. @property (nonatomic, assign) CGFloat minDuration; //视频最小时长 默认0.5
  3. @property (nonatomic, assign, readonly) CGFloat duration;//视频总时长
  4. @property (nonatomic, assign, readonly) NSInteger partCount;//视频段数
  5. - (void)deleteAllPart;//删除所有视频片段
  6. - (void)deletePart;//删除最后一个视频片段
  7. - (void)deletePart:(NSInteger)index; //删除某一个视频段
  • 开始预览&结束预览

    开始预览如下方法:

    1. - (void)startPreviewWithPositon:(AliyunIRecorderCameraPosition)cameraPosition;
    2. - (void)startPreview;

    建议在ViewController- (void)viewWillAppear:(BOOL)animated时调用。

    结束预览如下方法:

    1. - (void)stopPreview;

    建议在ViewController- (void)viewDidDisappear:(BOOL)animated时调用。

  • 开始录制&结束录制&完成录制

    在录制之前,确保已设置录制文件的输出路径,通过AliyunIRecorderoutputPath属性进行设置。

    开始录制接口:

    1. - (void)startRecording;

    结束录制接口:

    1. - (void)stopRecording;

    完成录制接口:

    1. - (void)finishRecording;

    注:结束录制和完成录制的区别在于完成录制相当于录制流程的结束。这种场景可以出现在多段视频录制场景中,例如用户按下录制按钮,则开始录制,松开按钮,则结束录制,若不想再继续录制而想进入下一页,则调用完成录制。

  • 释放资源

    ViewController销毁时,我们也需要释放录制资源,在dealloc中调用:

    1. - (void)destroyRecorder;
  • 回调接口

    录制功能提供了一些回调函数:

    1. @required
    2. - (void)recorderDeviceAuthorization:(AliyunIRecorderDeviceAuthor)status;

    该接口开发必须调用,用来回调系统级别的权限,检测是否具有拍摄权限等。

    以下为非必需调用接口:

    1. - (void)recorderOutputVideoRawSampleBuffer:(CMSampleBufferRef)sampleBuffer;

    该接口回调视频的原始数据,开放这个接口的目的是让开发者可以使用摄像头数据来完成开发者自己的业务,如人脸识别。

    1. - (void)recorderVideoDuration:(CGFloat)duration;

    录制实时时长

    1. - (NSInteger)recorderOutputVideoTextureName:(NSInteger)textureName textureSize:(CGSize)textureSie;

    需要对视频纹理做渲染等二次加工时使用该回调。摄像头返回的原始视频纹理,摄像头数据格式为BGRA、YUV时都需实现

    1. - (NSInteger)recorderOutputVideoUVTextureName:(NSInteger)textureName;

    需要对视频纹理做渲染等二次加工时使用该回调。摄像头返回的原始视频纹理,摄像头数据格式仅为YUV时须实现,反之不实现

    1. - (void)recorderDidStopWithMaxDuration;

    录制到最大时长时的回调

    1. - (void)recorderDidStopRecording;

    停止录制回调

    1. - (void)recorderDidFinishRecording;

    录制结束的回调。

    1. - (void)recoderError:(NSError *)error;

    录制异常。

  • 其他

    • 设置效果

      录制过程中可以添加效果,这些效果目前包含滤镜,水印,人脸动图三种类型。效果的基类是AliyunEffect类。三种类型具体对应如下类:

      1. `AliyunEffectFilter`--滤镜
      2. `AliyunEffectPaster`--贴图
      3. `AliyunEffectImage` --静态图片(水印)

      添加效果的接口:

      1. - (void)addEffect:(AliyunEffect *)effect;

      移除效果的接口:

      1. - (void)deleteEffect:(AliyunEffect *)effect;

      录制配乐与调速接口:

      1. AliyunEffectMusic *effectMusic = [[AliyunEffectMusic alloc] initWithFile:`设置音乐路径`];
      2. effectMusic.startTime = 5; // 配乐开始时间点,从5秒开始
      3. effectMusic.duration = 15; // 配乐持续时长,持续15秒
      4. [_recorder applyMusic:effectMusic];
      5. [_recorder setRate:2]; // 两倍速

      配乐建议使用AAC编码格式。如果是MP3格式的音乐,会增加处理时间

      音乐设置需要在录制前,开始录制后禁止调用配乐接口

      录制速率大小在0.5~2之间,超过此区间无效

    • 其他接口

      1. 切换摄像头

        -(AliyunIRecorderCameraPosition)switchCameraPosition;

      2. 照片模式下,循环切换闪光灯

        (AliyunIRecorderFlashMode)switchFlashMode;

      3. 照片模式下,切换为指定闪光灯模式

        -(BOOL)switchFlashWithMode:(AliyunIRecorderFlashMode)flashMode;

      4. 视频模式下,循环切换手电筒模式

        (AliyunIRecorderTorchMode)switchTorchMode;

      5. 视频模式下,切换为指定手电筒模式

        -(BOOL)switchTorchWithMode:(AliyunIRecorderTorchMode)torchMode;

      6. 设置美颜开关

        -(void)setBeautifyStatus:(BOOL)beautifyStatus;

      7. 设置美颜度

        -(void)setBeautifyValue:(int)beautifyValue;

      8. 追踪识别的人脸点

        -(void)faceTrack:(NSArray<AliyunFacePoint *> *)facePoints;

      9. 设置摄像头采集数据格式

        1. /**
        2. 提供三种格式:
        3. kCVPixelFormatType_420YpCbCr8BiPlanarFullRange,
        4. kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange,
        5. kCVPixelFormatType_32BGRA,
        6. 默认kCVPixelFormatType_420YpCbCr8BiPlanarFullRange格式
        7. */
        8. @property (nonatomic, assign) AliyunIRecorderVideoOutputPixelFormatType outputType;
        1. 获取framework版本号

          + (NSString *)version;

  • 导入裁剪

  • 裁剪模块功能接口调用顺序图:iOS裁剪流程

  • 初始化参数

    使用裁剪功能,需要初始化AliyunCrop对象,初始化方法如下:

    1. - (instancetype)initWithDelegate:(id<AliyunCropDelegate>)delegate;

    各实例变量说明:

    1. float startTime 截取时间起点 (单位:秒)
    2. float endTime 截取时间终点 (单位:秒)
    3. float fadeDuration 视频片段过渡动画时间 (单位:秒)
    4. int cropMode 0 填充黑边 1 裁剪画面
    5. NSString *videoPath 视频资源路径
    6. NSString *outputPath 裁剪完成后的文件存放路径
    7. CGSize outputSize 裁剪后的视频尺寸
    8. int fps 帧率
    9. int gop 关键帧间隔
    10. AliyunVideoQuality videoQuality 视频质量
    11. CGRect rect 保留的视频尺寸 (cropMode 0 无效)
  • 开始裁剪

    1. - (int)startCrop;
    2. 返回值为0时表示配置正确
  • 取消裁剪

    1. - (void)cancelCutVideo;
  • 版本号

    1. + (NSString *)version;
  • 其他接口
  1. /**
  2. 删除文件
  3. */
  4. - (BOOL)deleteFile:(int) index;
  5. /**
  6. 清除上传列表
  7. */
  8. - (BOOL)clearFiles;
  9. /**
  10. 获取上传文件列表
  11. */
  12. - (NSMutableArray<UploadFileInfo *> *)listFiles;
  13. /**
  14. 取消单个文件上传,文件保留在上传列表中
  15. */
  16. - (BOOL)cancelFile:(int)index;
  17. /**
  18. 恢复已取消的上传文件
  19. */
  20. - (BOOL)resumeFile:(int)index;
  21. /**
  22. 停止上传
  23. */
  24. - (BOOL)stop;
  25. /**
  26. 暂停上传
  27. */
  28. - (BOOL)pause;
  29. /**
  30. 恢复上传
  31. */
  32. - (BOOL)resume;
  33. /**
  34. 使用Token恢复上传
  35. */
  36. - (BOOL)resumeWithAuth:(NSString *)uploadAuth;
  37. /**
  38. 使用Token恢复上传
  39. */
  40. - (BOOL)resumeWithToken:(NSString *)accessKeyId
  41. accessKeySecret:(NSString *)accessKeySecret
  42. secretToken:(NSString *)secretToken
  43. expireTime:(NSString *)expireTime;
  44. /**
  45. 设置上传凭证
  46. */
  47. - (BOOL)setUploadAuthAndAddress:(UploadFileInfo *)uploadFileInfo
  48. uploadAuth:(NSString *)uploadAuth
  49. uploadAddress:(NSString *)uploadAddress;

编辑模块

  • 接口说明

阿里视频云短视频SDK提供视频编辑核心接口,详细定义如下:

头文件 功能说明
AliyunEditor.h 视频编辑核心类,编辑界面的播放器、各类特效(滤镜、音乐、水印)、视频的导出都通过此类来管理。
AliyunIPlayer.h 播放器控制类,实现播放控制相关的功能。
AliyunIPlayerCallback.h 播放器相关触发的回调类,包含开始、结束、播放进度、seek和异常状态的回调。
AliyunImporter.h 视频导入类,用来构建编辑界面需要json文件,目前是进入编辑界面前的必要条件。
AliyunEffect.h 各类特效(滤镜、音乐、水印)的基类、各类特效的初始化都是通过资源文件地址来创建的。
AliyunEffectFilter.h 添加滤镜(含特效滤镜)的类,通过加载滤镜文件即可实现实时滤镜
AliyunEffectImage.h 添加水印的类,通过加载水印文件即可实现实时水印,支持水印位置设置
AliyunEffectMusic.h 实现音乐效果类,通过此类添加音乐,静音、音量调节等功能通过编辑的edit来控制。
AliyunIExporter.h 视频合成导出的类,主要用于编辑界面视频导出,片尾水印也通过此类提供的方法来合成。
AliyunIExporterCallback.h 视频合成导出的回调了,用来监听导出视频时的各种状态。
AliyunVideoParam.h 视频参数类,主要用户视频录制、导入、导出对视频相关参数的控制。
  • 编辑模块功能接口调用顺序图:(注:标准版无MV、动图、字幕功能)

SDK3.0编辑接口调用流程

  • 生成配置文件

编辑模块支持对一段或多段视频的编辑与导出。首先,需要生成包括视频片段路径和输出分辨率等信息的配置文件。这个工作由AliyunImporter提供。初始化方法如下:

  1. ```
  2. - (instancetype)initWithPath:(NSString *)taskPath outputSize:(CGSize)outputSize;
  3. ```

注:taskPath是文件夹路径,由调用者提供给SDK使用。SDK将配置文件和视频片段等存放在taskPath文件夹中,SDK模块间通过taskPath传递视频相关信息。

  1. 我们可以通过如下方法添加一段或多段视频片段或者图片片段:
  1. /**
  2. 添加视频路径
  3. @param videoPath 视频路径
  4. @param animDuration 转场动画时长,单位秒
  5. duartion为当前视频片段和上段视频片段间的转场时长,不能小于视频本身时长
  6. 添加的第一段视频没有转场,duartion需要设为0
  7. */
  8. - (void)addVideoWithPath:(NSString *)videoPath animDuration:(CGFloat)animDuration;
  1. /**
  2. 添加视频路径并指定编辑视频开始点和结束点
  3. @param videoPath 视频路径
  4. @parma startTime 视频开始时间
  5. @parma duration 视频持续时间
  6. @param animDuration 转场动画时长,单位秒
  7. duartion为当前视频片段和上段视频片段间的转场时长,不能小于视频本身时长
  8. 添加的第一段视频没有转场,duartion需要设为0
  9. */
  10. - (void)addVideoWithPath:(NSString *)videoPath startTime:(CGFloat)startTime duration:(CGFloat)duration animDuration:(CGFloat)animDuration;
  1. /**
  2. 增加图片
  3. @param image 照片
  4. @param duration 播放时间
  5. @param animDuration 动画过渡时间
  6. @return 图片路径
  7. */
  8. - (NSString *)addImage:(UIImage *)image duration:(CGFloat)duration animDuration:(CGFloat)animDuration;
  1. 最后,调用如下方法生成配置文件:
  1. - (void)generateProjectConfigure;
  1. 这样,SDK会在taskPath文件夹中生成一个配置文件。编辑模块初始化时只需要传递taskPath路径,SDK内部会自动读取配置文件内容。

导入代码示例:

  1. //创建导入对象
  2. AliyunImporter *importer = [[AliyunImporter alloc] initWithPath:‘用户设置的存放配置文件和视频片段的目录文件夹地址’ outputSize:‘用户设置的输出视频的分辨率’];
  3. //添加需要导入的视频,可以导入多个文件。转场效果仅支持淡入淡出效果,设置为0表示没有转场效果,每一个视频直接都可以设置转场时间。设置了转场效果后两个视频会叠加,叠加后视频总时长会减少。
  4. [importer addVideoWithPath:‘需要导入的视频文件地址’ animDuration0];
  5. //创建并设置视频参数,主要设置视频以裁剪模式还是填充模式进入编辑界面
  6. AliyunVideoParam * videoParam = [[AliyunVideoParam alloc] init];
  7. videoParam.scaleMode = AliyunCropCutModeScaleAspectFill;
  8. [importer setVideoParam:videoParam];
  9. //生成配置文件,生成配置文件后在edit的初始化使用
  10. [importer generateProjectConfigure];
  11. //导入后自己完成界面跳转
  • 初始化参数

    使用编辑功能,需要初始化AliyunIEditor对象,初始化方法如下:

    1. - (instancetype)initWithPath:(NSString *)taskPath size:(CGSize)outputSize preview:(UIView *)preview;

    参数说明: taskPath 文件夹路径 preview 编辑预览视图

  • 视频预览

    视频预览需要获取播放器,调用AliyunIEditor的如下接口获取一个播放器实例:

    1. /**
    2. 获取播放器接口实例
    3. @return AliyunIPlayer
    4. */
    5. - (id<AliyunIPlayer>)getPlayer;

    获取到一个AliyunIPlayer类的实例后,可以做如下操作

    开始播放

    1. - (void)play;

    seek接口

    1. -(void)seek:(float)time;

    暂停播放

    1. - (void)pause;

    继续播放

    1. - (void)resume;

    获取是否正在播放

    1. - (BOOL)isPlaying;

    重新开始播放

    1. - (void)replay;

    停止播放

    1. - (void)stop;

    获取总时长

    1. - (double)getDuration;

    获取当前播放时间

    1. - (double)getCurrentTime;

    设置播放器的刷新频率 默认30帧/s 最大60帧/s 建议不低于20帧/s

    1. - (void)setRefreshFps:(int)fps;

    播放器状态及生命周期图:

    SDK3.0play_self_life播放器的使用示例:

    1. //创建播放器预览视图
    2. UIView * preview = [[UIView alloc] init];
    3. //设置preview的大小,需要和viewSize保持一致比例,比如是9:16全屏播放可设置为
    4. preview.frame = CGRectMake(0,0,UIScreen.mainScreen.bounds.width,UIScreen.mainScreen.bounds.height);
    5. [self.view.addSubview preview];
    6. //创建编辑器,viewWillAppear里面实现
    7. AliyunIEditor *edit = [[AliyunIEditor alloc] initWithPath:'录制/导入时设置的taskPath' size:‘输出视频的分辨率’ preview:preview];
    8. //设置编辑的代理,然后实现AliyunIPlayerCallback, AliyunIExporterCallback代理方法
    9. edit.delegate = self
    10. //获取播放器
    11. AliyunIPlayer *player = [edit getPlayer];
    12. //接下来根据自己的需求调用播放器的控制方法
  • 视频特效使用

使用特效之前确保播放器已经就绪,处于onPrepared的状态。可以使用的特效主要有滤镜,音乐,水印。 滤镜,音乐特效均使用特效类AliyunEffect,注:该类为Base基类,具体特效有对应得子类

  • 滤镜,特效滤镜,音乐,MV特效使用

    1. 使用音乐
    2. @param music music配置文件路径
    3. @return 错误码
    4. */
    5. - (int)applyMusic:(AliyunEffectMusic *)music;
    6. /**
    7. 使用滤镜
    8. @param filter filter配置文件路径
    9. @return 错误码
    10. */
    11. - (int)applyFilter:(AliyunEffectFilter *)filter;
    12. /**
    13. 添加特效滤镜
    14. @param filter 滤镜
    15. @return 返回值
    16. */
    17. - (int)applyAnimationFilter:(AliyunEffectFilter *)filter;
  • 设置音量、混音权重

    1. /**
    2. 设置是否静音
    3. @param mute 静音
    4. */
    5. - (void)setMute:(BOOL)mute;
    6. /**
    7. 设置音量
    8. @param volume 音量:0-200
    9. */
    10. - (void)setVolume:(int)volume;
    11. /**
    12. 设置混音权重
    13. @param weight 混音权重0-100
    14. */
    15. - (void)setAudioMixWeight:(int)weight;

    注:一般在使用了音乐或MV后调用混音权重接口,如果没有音乐资源则调用该接口无效。

  • 水印特效

    1. /**
    2. 添加视频水印
    3. @param imagePath 视频水印路径
    4. @param frame 水印frame
    5. */
    6. - (void)setWaterMark:(NSString *)imagePath frame:(CGRect)frame;

    注:水印frame的宽高比需要与水印图片的真实宽高比相同。例如:一张100*200的图片在设置frame的时候需要width/height = 0.5;同时请用户确保imagePath真实存在水印图片示例:

    1. [self.editor setWaterMark:[UIImage imageNamed:@"watermark"] frame:CGRectMake(20, 20, 40, 40)];
  • 渲染背景颜色

    1. /**
    2. 视频渲染最底层背景颜色 在填充模式下具有效果
    3. @param color 颜色
    4. */
    5. - (void)setRenderBackgroundColor:(UIColor *)color;
  • 修改单段视频转场时长

    1. /**
    2. 设置转场时长
    3. @param fadeDuration 转场时长
    4. @param inDuration 暂时无效
    5. @param outDuration 暂时无效
    6. @param index 视频index
    7. @return 返回结果
    8. 第一段视频设置无效,转场时长不能超过最短视频时长的一半
    9. */
    10. - (int)setClipFadeDuration:(CGFloat)fadeDuration inDuration:(CGFloat)inDuration outDuration:(CGFloat)outDuration atIndex:(NSInteger)index;
  1. 音乐使用示例:
  1. //根据MP3文件创建音乐效果对象
  2. AliyunEffectMusic *music = [[AliyunEffectMusic alloc]initWithFile:'音乐文件的mp3地址'];
  3. //应用音乐效果
  4. [edit applyMusic:music];
  5. //对音乐和原音比例调整
  6. [edit setAudioMixWeight:50];
  7. //设置音量
  8. [edit setVolume:100];
  1. 滤镜使用示例:
  1. //创建滤镜对象
  2. AliyunEffectFilter *filter = [[AliyunEffectFilter alloc] initWithFile:‘设置滤镜目录地址’];
  3. //应用滤镜效果,可实时作用于录制画面。
  4. [edit applyFilter:filter];
  1. 静态贴图功能使用实例如下:
  1. AliyunEffectStaticImage *staticImage = [[AliyunEffectStaticImage alloc] init];
  2. NSString *path = [[NSBundle mainBundle] pathForResource:@"yuanhao8" ofType:@"png"];
  3. staticImage.startTime = 0;
  4. staticImage.endTime = [self.player getDuration];
  5. staticImage.path = path;
  6. CGSize displaySize = self.editZoneView.bounds.size;
  7. CGFloat scale = [[UIScreen mainScreen] scale];
  8. staticImage.displaySize = CGSizeMake(displaySize.width * scale, displaySize.height * scale);//displaySize需要进行scale换算
  9. staticImage.frame = CGRectMake(_staticImage.displaySize.width /2 - 200, _staticImage.displaySize.height / 2 -200, 400, 400);//图片自身宽高
  10. [self.editor applyStaticImage:_staticImage];

涂鸦

SDK提供了涂鸦功能,用户可以根据自身业务选择此功能。涂鸦主要涉及有两个类:AliyunIPaintAliyunICanvasViewAliyunIPaint可以理解为画笔,AliyunICanvasView可以理解为画布。

画笔AliyunIPaint提供的方法有:

  1. /**
  2. 线条颜色
  3. */
  4. @property (nonatomic, strong) UIColor *lineColor;
  5. /**
  6. 线条宽度
  7. */
  8. @property (nonatomic, assign) CGFloat lineWidth;
  9. /**
  10. 线条阴影颜色
  11. */
  12. @property (nonatomic, strong) UIColor *shadowColor;
  13. /**
  14. 线条阴影宽度
  15. */
  16. @property (nonatomic, assign) CGFloat shadowWidth;
  17. /**
  18. init
  19. @param lineWidth 线条宽度
  20. @param lineColor 线条颜色
  21. @return self
  22. */
  23. - (instancetype)initWithLineWidth:(CGFloat)lineWidth
  24. lineColor:(UIColor *)lineColor;

画笔目前支持线条颜色、宽度、线条阴影颜色和阴影宽度的设置。

画布AliyunICanvasView主要提供:

  1. /**
  2. 回调
  3. */
  4. @property (nonatomic, weak) id<AliyunICanvasViewDelegate> delegate;
  5. /**
  6. 是否允许越界画图,默认不允许
  7. */
  8. @property (nonatomic, assign) BOOL enableCrossBorder;
  9. /**
  10. 画笔
  11. */
  12. @property (nonatomic, strong) AliyunIPaint *paint;
  13. /**
  14. init
  15. @param frame 画板frame
  16. @param paint 画笔
  17. @return self
  18. */
  19. - (instancetype)initWithFrame:(CGRect)frame
  20. paint:(AliyunIPaint *)paint;
  21. /**
  22. 更改画笔配置
  23. @param paint 画笔
  24. */
  25. - (void)changePaint:(AliyunIPaint *)paint;
  26. /**
  27. 清空所有线条(不可恢复)
  28. */
  29. - (void)remove;
  30. /**
  31. 撤销上一步
  32. */
  33. - (void)undo;
  34. /**
  35. 恢复上一步
  36. */
  37. - (void)redo;
  38. /**
  39. 完成
  40. @return 涂鸦图片
  41. */
  42. - (UIImage *)complete;

画布提供了基本的功能,如撤销、恢复、修改画笔配置等功能。

画笔和画布的使用示例代码如下:

  1. AliyunIPaint *paint = [[AliyunIPaint alloc] initWithLineWidth:SizeWidth(5.0) lineColor:[UIColor whiteColor]];
  2. self.paintView = [[AliyunICanvasView alloc] initWithFrame:rect paint:paint];
  3. self.paintView.delegate = self;
  4. self.paintView.backgroundColor = [UIColor clearColor];
  5. [self addSubview:self.paintView];

上面的示例代码中,paintView加入到你的目标view上,即可进行涂鸦。

涂鸦完成后,通过调用complete接口可以生成图片,生成的图片再通过AliyunEditorapplyPaint:接口即可渲染到视频上。

  1. **导出**

通过AliyunIEditor的接口获取导出实例AliyunIExporter

  1. - (id<AliyunIExporter>)getExporter;

AliyunIExporter主要接口如下:

  1. /**
  2. 添加片尾水印
  3. @param image 水印图片
  4. */
  5. - (void)setTailWaterMark:(UIImage *)image frame:(CGRect)frame;
  6. /**
  7. 设置编码模式
  8. @param encodeMode 编码模式 0:软编 1:硬编
  9. */
  10. - (void)setEncodeMode:(int)encodeMode;
  11. /**
  12. 设置视频输出参数
  13. @param videoParam 视频输出参数
  14. */
  15. - (void)setVideoParam:(AliyunVideoParam *)videoParam;
  16. /**
  17. 开始导出视频
  18. @param outputPath 导出路径
  19. */
  20. - (void)startExport:(NSString *)outputPath;
  21. /**
  22. 取消导出视频
  23. */
  24. -(void)cancelExport;

导出视频使用示例:

  1. //获取导出对象
  2. AliyunIExporter * exporter = [edit getExporter];
  3. //设置导出视频的参数,这里的视频参数可以和导入的视频参数一致,导入的视频参数已经设置,这里也可以不用设置
  4. [exporter setVideoParam:videoParam];
  5. //片尾效果可以根据自己的需求来选择是否调用此方法
  6. [exporter setTailWaterMark:'水印图片UIImage类型',frame:CGRectMake(60, 150, 200,200)];
  7. //开始导出,可以监听导出的各种状态:开始导出、结束导出、取消导出、导出结束、导出进度和导出异常
  8. [exporter startExport:'输出后视频存放的文件地址'];

四、上传

SDK生成的mp4文件,可接入阿里云上传SDK上传文件,可跳转至阿里云上传SDK下载。点击iOS上传SDK获取使用文档。

本文导读目录