V3.17.0

功能更新

  • 优化萝莉音效、新增方言音效。
  • 修复裁剪和编辑模块导入iPhone 12自带相机拍摄的视频后出现的绿屏问题。

V3.16.2

功能更新

  • 修复高斯模糊背景问题。

V3.16.1

功能更新

  • 修复录制时长大于视频时长时不能合成问题。

V3.16.0

功能更新

  • 恢复主流动画功能。
  • 修复线上反馈偶现崩溃问题。
  • 修复长视频可能出现的播放卡顿问题。
  • 修复横屏录制水印方向问题。

V3.15.0

功能更新

  • 修复合成视频播放卡顿问题。
  • 修复多段视频变速失效问题。
  • 新增基于自定义特效制作规范的两组转场、滤镜效果转场与滤镜效果。

接口变动

  • 新增自定义特效参数调节接口,支持实时调节特效参数。
  • 支持自定义滤镜、转场特效,自定义特效制作规范请参考官方文档。

V3.14.0

功能更新

  • 优化裁剪模块,保证反复裁剪颜色不失真。
  • 优化录制实现,针对退后台、硬件资源占用等异常情况提升稳定性。
  • 修复已知几处内存泄漏并优化部分性能。

问题修复

  • 修复录制过程中退后台偶现卡死问题。
  • 修复录制过程中音频资源被占用导致异常的问题。
  • 修复编辑设置背景颜色不生效问题。
  • 修复iOS编辑功能变化视图后播放画面局部放大问题。
  • 修复部分内存泄漏和其他已知问题。

接口变动

  • AliyunVideoSDKPro.framework(动态库)拆分为AliyunVideoSDKPro.framework(静态库)和AliyunVideoCore.framework(动态库)两部分。如果您采用手动方式集成SDK。

    详情请参考工程配置

V3.13.0

功能更新

  • 录制模块稳定性,性能全面优化。
  • 录制模块支持基于RACE的美颜美型功能。
  • 编辑模块提升H265视频流畅性。

接口变动

  • 录制模块废弃mv接口,去除添加mv功能。

V3.12.0

功能更新

  • 增加日志分析功能提供开关日志分析的接口[AliyunVideoSDKInfo setDebugLogLevel:]提供三个等级供用户设置:
    AlivcDebugLogClose 关闭日志分析功能
    AlivcDebugLogNormal 能分析warning,error级别的日志,建议使用这个等级来做日志分析
    AlivcDebugLogAll 全量log分析,只建议在定位疑难问题时开启,不建议在正式发版中使用以上功能只会做sdk的日志分析
                            
  • 编辑模块性能提升。

问题修复

  • 录制模块修复线程未退出问题。

接口变动

  • 编辑模块废除applyRunningDisplayMode接口,去除动态切换内容模式功能。

V3.11.0

功能更新

  • 提升片段录制起停的速度和录制合成的速度,分段录制更加流畅。
  • 优化录制进度回调粒度和精准度。
  • 精准控制gop,提升部分场景下的转码速度。
  • 优化切换摄像头耗时。

问题修复

  • 修复gif帧数解析不准确的问题。
  • 修复特定视频倒播开始播放时卡顿问题。
  • 修复录制生成视频时长不精准的问题。
  • 修复多段录制输出视频音视频不同步。

接口变动

  • 对外错误码统一所有错误码统一到AliyunVideoCoreError。
  • 新增NSString* AlivcErrorMessage(int code)方法获取错误描述。

V3.10.5

功能更新

  • 新增录制合拍功能(AliyunMixRecorder)。
  • 新增多轨道视频拼接(可以实现画中画,左右分屏等效果)(AliyunMixComposer)。

V3.10.0

功能更新

  • 编辑新增大魔王,小黄人音效。
  • 编辑新增mjpeg视频格式支持。
  • 编辑播放提升对部分损坏视频文件的兼容性。
  • 编辑新增draw方法支持强制绘制一帧。

问题修复

  • 录制修复小段录制视频时长不准确问题。
  • 录制修复添加水印后退后台水印消失的问题。
  • 录制修复切换前后摄像头卡顿的问题。
  • 编辑修复合成导出退后台可能导致崩溃的问题。

V3.9.0

功能更新

  • 新增音效接口,提供萝莉,大叔,混响,回声四种音效。
  • 提升编辑模块seek性能。
  • 提升SDK稳定性。

V3.8.0

功能更新

  • 提升录制稳定性。
  • 提升了选择裁剪时间的准确性。
  • 优化了编辑播放能力,流畅播放不卡顿。
  • 优化了编辑合成的速度。
  • 修复了一些bug。
  • 合成支持退后台返回继续合成。
  • 考虑到SDK稳定性监控和未来数据相关需求,短视频目前必须要依赖库: 手动集成需要添加 AlivcConan.framework cocoaPods集成 ‘pod ‘AlivcConan’, ‘0.9.0’ 可以参考demo。

V3.7.7

功能更新

  • SDK稳定性提升。
  • 裁剪,合成清晰度提升。

V3.7.5

功能更新

  • 修复导入iOS12系统生成的HEVC视频倒播显示异常的bug。
  • 修复编辑使用第三方渲染接口可能导致crash的bug。
  • 时间特效播放流畅度提升。
  • 导入GIF图片适配性增强。
  • 支持导入奇数分辨率视频。
  • 优化了多段录制音视频同步。
  • 提升稳定性。

V3.7.0

功能更新

  • 新增转场功能,包含淡入淡出、多边形转场、百叶窗等主流效果。
  • 新增特技效果接口,包含基本动画(旋转、平移、缩放、透明度)和自定义动画效果(线性擦除)。
  • 新增指定流、指定时间段添加高斯模糊效果。
  • 新增指定流、指定时间段添加显示模式(填充、裁剪)。
  • 新增配音接口,支持多段配音和变速。
  • 新增多段视频加多个变速时间特效(反复和倒放还是只支持单段视频的)。

接口变动

  • 编辑预览播放结束后需要调用replay接口,以前调用play接口。
  • 编辑新增prepare预加载数据接口,此接口在startEdit之后调用。
  • 水印的位置大小的参考坐标修改为输出分辨率坐标。
  • 在调用转场效果时,需要先调用stopEdit,然后调用转场,再调用startEdit。
  • AliyunPasterController删除delegate属性。
  • AliyunEditor删除destroyAllEffect接口。
  • QuCore-ThirdParty.framework改为alivcffmpeg.framework。

V3.6.5.5

功能更新

  • 兼容Xcode10.x。

V3.6.5.3

功能更新

  • 修复偶现录制添加mv锁屏导致的crash。
  • 修复倒播加特效滤镜时间不准确。
  • 修复部分视频色域显示不准确。
  • 支持aac sbr格式音频。

V3.6.5

功能更新

  • 修复偶现导出crash的bug。
  • 提升视频倒播流畅度。

V3.6.0

功能更新

  • 包大小和基本问题
    包名称 包大小(单位M)
    AliyunVideoSDKPro.framework3.5.0 release 4.9M
    AliyunVideoSDKPro.framework3.5.0 debug 10.1M
    AliyunVideoSDKPro.framework3.6.0 release 7.6M
    AliyunVideoSDKPro.framework3.6.0 debug 15.7M
    QuCore-ThirdParty.framework3.5.0 release 9.3M
    QuCore-ThirdParty.framework3.5.0 debug 23.1M
    QuCore-ThirdParty.framework3.6.0 release 10.2M
    QuCore-ThirdParty.framework3.6.0 debug 23.2M
    说明 需要同时替换AliyunVideoSDKPro.framework和QuCore-ThirdParty.framework 否则会产生异常(如合成crash等)

接口变动

  • 水印接口
    -(void)setWaterMark: frame接口废弃,启用 -(void)setWaterMark示例:
    NSString watermarkPath = [[NSBundle mainBundle] pathForResource:@”watermark” ofType:@”png”]; 
    AliyunEffectImage effectImage = [[AliyunEffectImage alloc] init];
    effectImage.frame = CGRectMake(10, 10, 28, 20);
    effectImage.path = watermarkPath;
    [self.editor setWaterMark:effectImag];
  • 片尾接口
    3.6支持预览时查看需要设置-(void)setTailWaterMark:示例:
    NSString tailWatermarkPath = [[NSBundle mainBundle] pathForResource:@”tail” ofType:@”png”]; 
    AliyunEffectImage tailWatermark = [[AliyunEffectImage alloc] initWithFile:tailWatermarkPath];
    tailWatermark.frame = CGRectMake(CGRectGetMidX(self.movieView.bounds) - 84 / 2, CGRectGetMidY(self.movieView.bounds) - 60 / 2, 84, 60);
    tailWatermark.endTime = 2;
    [self.editor setTailWaterMark:tailWatermark];
  • 添加音乐接口
    • 3.6版本支持多路音频混流,如果只需要加一路音频 需要调用remove接口示例:
      AliyunEffectMusic *music = [[AliyunEffectMusic alloc] initWithFile:path];
      [self.editor removeMusics];//只要一路音频的情况下可以调用
      [self.editor applyMusic:music];
    • 在加音乐的时候需要调用 -(void)removeMVMusic 如:AliyunEffectMusic *music = [[AliyunEffectMusic alloc] initWithFile:path]。
      [self.editor removeMVMusic];
      [self.editor removeMusics];
      [self.editor applyMusic:music];
    • 3.6版本支持音乐选取自身的时间段进行播放如:
      AliyunEffectMusic music = [[AliyunEffectMusic alloc] initWithFile:path];
      music.startTime = startTime; //音乐本身的开始播放时间
      music.duration = duration; //音乐本身的播放持续时间
      music.streamStartTime = streamStart [_player getStreamDuration]; //音乐在播放时间轴上的开始播放时间
      music.streamDuration = streamDuration * [_player getStreamDuration]; //音乐在播放时间轴上的持续播放时间
  • 新增时间特效显示。
    • Demo中接口 -(void)addTimelineTimeFilterItem; 具体代码参见demo。
    • 时间特效和特效滤镜的相互影响
      例如在全程变速的情况下加特效滤镜或者倒播的情况下加滤镜这个交互需要注意添加的时间段显示是否正确这部分的代码集中在3.6的:
      (void)didBeganLongPressEffectFilter:(AliyunEffectFilterInfo *)animtinoFilterInfo ;
      (void)didTouchingProgress;
      (void)didEndLongPress;
      三个函数中,用户可以直接参考代码:
      AliyunEffectFilter *animationFilter = [[AliyunEffectFilter alloc] initWithFile:[animtinoFilterInfo localFilterResourcePath]];
      float currentSec = [self.player getCurrentTime];
      float currentStreamSec = [self.player getCurrentStreamTime];
      animationFilter.startTime = currentSec;
      animationFilter.endTime = [self.player getDuration];
      animationFilter.streamStartTime = currentStreamSec;  //新增 streamStartTime 如果在有时间特效的情况下需设置
      animationFilter.streamEndTime = [self.player getStreamDuration];//新增 如果在有时间特效的情况下需设置
      [self.editor applyAnimationFilter:animationFilter];

      为了兼容老版本,如果在没有时间特效的情况下 仍然可以直接设置startTime和endTime 无需设置streamStartTime和streamEndTime。

  • 新增时间特效接口
    接入到3.5不会产生兼容问题具体代码参见3.6Demo示例:
    AliyunEffectTimeFilter *timeFilter = [[AliyunEffectTimeFilter alloc] init];
    timeFilter.startTime = [_player getCurrentStreamTime];
    timeFilter.endTime = timeFilter.startTime + 1;
    timeFilter.type = TimeFilterTypeSpeed;
    timeFilter.param = 0.5;
    [self.editor applyTimeFilter:timeFilter];
  • 播放状态和接口调用的调整(如前后台切换,页面切换)
    相比较3.5版本,3.6版本在内部对前后台切换和页面切换进行了处理,具体表现在:
    • -(void)setActive 弃用。
    • viewWillAppear与viewWillDisappear的处理:viewWillDisappear时不需要stopEdit销毁整个AliyunEdit,只需要调用stop停止播放。同理,viewWillAppear时,只需要调用play重新播放。
    • 退后台与返回前台的处理:

      退后台sdk会停止播放或导出,回前台默认会重新播放(或暂停)

      发生错误处理:

      3.6版本播放或导出发生错误时,会停止播放或导出,同时通过playError或exportError返回,用户可以根据情况处理。

  • AliyunImporter类接口调整,以下三个接口废弃。 ——兼容老版本 调用暂时不会产生问题。
    • (void)addVideoWithPath:(NSString *)videoPath animDuration:(CGFloat)animDuration。
    • (void)addVideoWithPath:(NSString *)videoPath startTime:(CGFloat)startTime duration:(CGFloat)duration animDuration:(CGFloat)animDuration。
    • (NSString )addImage:(UIImage )image duration:(CGFloat)duration animDuration:(CGFloat)animDuration。

    新的接口通过构建 AliyunClip对象,调用 -(void)addMediaClip:(AliyunClip*)clip以添加视频片段示例:

    AliyunImporter *importor = [[AliyunImporter alloc] initWithPath:root outputSize:_compositionConfig.outputSize];
    AliyunClip *clip = [[AliyunClip alloc] initWithVideoPath:info.sourcePath startTime:info.startTime duration:info.duration animDuration:i == 0 ? 0 : 1];
    [importor addMediaClip:clip];
说明 由于有时间特效,播放器player有几个基本概念需要区别:
  • /* 获取总时长,单位:秒 @return 总时长 /

    (double)getDuration

  • /* 获取当前播放时间,单位:秒 /

    (double)getCurrentTime

  • /* 获取原始视频流时长,单位:秒 @return 总时长 /

    (double)getStreamDuration

  • /* 获取原始视频流播放时间,单位:秒 /

    (double)getCurrentStreamTime

举例:

  • 例如:一个视频原本是15s,加全程快速2倍播放。 那么,从效果上看这个视频会被按照2倍去快速播放,此时,getDuration为 7.5s getCurrentTime为当前播放的时间(假如为3.5s),getStreamDuration为15s getCurrentStreamTime为7s(在getCurrentTime为3.5s的情况下)。
  • 再比如,原本视频15s,全程慢速2倍播放,那么getDuration为30s getCurrentTime假定为10s,则getStreamDuration为15s getCurrentStreamTime为7.5s。
  • 再再比如,原本视频为15s,全程倒播,那么getDuration为15s, getCurrentTime假定为6s,则getStreamDuration为15s,getCurrentStreamTime为9s。

以上为全程的情况下 那么在局部(如局部变速和反复) 均按照以上的规则进行计算换算。

其他

ReleaseNote:

  • 新增时间特效功能接口
    • (int)applyTimeFilter:(AliyunEffectTimeFilter *)filter。
    • (int)removeTimeFilter。
  • AliyunImporter类接口进行调整废弃原本以下三个接口
    • (void)addVideoWithPath:(NSString *)videoPath animDuration:(CGFloat)animDuration。
    • (void)addVideoWithPath:(NSString *)videoPath startTime:(CGFloat)startTime duration:(CGFloat)duration animDuration:(CGFloat)animDuration。
    • (NSString )addImage:(UIImage )image duration:(CGFloat)duration animDuration:(CGFloat)animDuration
      新的接口通过构建 AliyunClip对象,调用 -(void)addMediaClip:(AliyunClip)clip以添加视频片段示例:
      AliyunImporter importor = [[AliyunImporter alloc] initWithPath:root outputSize:_compositionConfig.outputSize];
      AliyunClip *clip = [[AliyunClip alloc] initWithVideoPath:info.sourcePath startTime:info.startTime duration:info.duration animDuration:i == 0 ? 0 : 1];
      [importor addMediaClip:clip];
  • 播放状态和接口调用的调整相比较3.5版本,3.6版本在内部对前后台切换和页面切换进行了处理,具体表现在:

    (void)setActive 弃用。

    viewWillAppear与viewWillDisappear的处理:viewWillDisappear时不需要stopEdit销毁整个AliyunEdit,只需要调用stop停止播放。同理,viewWillAppear时,只需要调用play重新播放。

    退后台与返回前台的处理:退后台sdk会停止播放或导出,回前台默认会重新播放(或暂停)。

    发生错误处理:3.6版本播放或导出发生错误时,会停止播放或导出,同时通过playError或exportError返回,用户可以根据情况处理。

  • 播放器新增接口
    • (double)getStreamDuration; //获取原始视频流时长,单位:秒。
    • (double)getCurrentStreamTime; //获取原始视频流播放时间,单位:秒。
  • 水印
    • 废弃接口(void)setWaterMark: frame。
    • 新增接口 (void)setWaterMark:(AliyunEffect*)waterMark
    • 片尾水印支持预览 需调用-(void)setTailWaterMark接口
  • 音乐接口
    • 支持多路音频流 支持选择音频时间段播放 如果只需要加一路音频 需要调用remove接口。示例:
      AliyunEffectMusic *music = [[AliyunEffectMusic alloc] initWithFile:path];
      [self.editor removeMusics];//只要一路音频的情况下可以调用 
      [self.editor applyMusic:music];
    • 支持音乐选取自身的时间段进行播放。示例:
      AliyunEffectMusic music = [[AliyunEffectMusic alloc] initWithFile:path];
      music.startTime = startTime; //音乐本身的开始播放时间 
      music.duration = duration; //音乐本身的播放持续时间
      music.streamStartTime = streamStart [_player getStreamDuration]; //音乐在播放时间轴上的开始播放时间
      music.streamDuration = streamDuration * [_player getStreamDuration]; //音乐在播放时间轴上的持续播放时间