V3.17.1

Feature updates

  • The scaling mode is supported for front cameras.
  • The issue is fixed where Open Graphics Library (OpenGL) unexpectedly quits applications installed on specific phone models after a video is produced.

V3.17.0

Feature updates

  • The sound effect of lolita is optimized and the sound effects of Chinese dialects are added.
  • The issue is fixed where the screen becomes green when a video that is shot on iPhone 12 is imported to the cropping or editing module.

V3.16.2

Feature updates

  • The effect of the Gaussian blur background is optimized.

V3.16.1

Feature updates

  • The issue is fixed where a recorded video cannot be merged with an existing video whose length is shorter than that of the recorded video.

V3.16.0

Feature updates

  • The mainstream animation effects are added again.
  • The issue of intermittent unexpected quits that users report online is fixed.
  • The issue is fixed where stuttering may occur during the playback of long videos.
  • The issue is fixed where the watermark is displayed in a wrong direction when a video is recorded in landscape mode.

V3.15.0

Feature updates

  • The issue is fixed where stuttering occurs during the playback of produced videos.
  • The issue is fixed where the speed of multiple clips cannot be changed at the same time.
  • Two sets of transitions, filter effect transitions, and filters are added based on the specifications for producing custom effects.

SDK changes

  • An interface is added so that you can modify the parameters of custom effects in real time.
  • The features of custom filters and transitions are supported. For more information about the specifications for producing custom effects, see the official documentation.

V3.14.0

Feature updates

  • The cropping module is optimized to avoid chromatic distortion when a video is cropped multiple times.
  • The stability of the recording module is optimized to deal with exceptions, such as background execution and hardware resource occupation.
  • The known memory leaks are fixed and the performance of specific modules is optimized.

Issue fix

  • The issue is fixed where occasional quits occur when the application is switched to the background during recording.
  • The issue is fixed where exceptions occur when audio resources are occupied during recording.
  • The issue is fixed where the color setting of the background does not take effect.
  • The issue is fixed where a part of the playback image is enlarged after the view of the editing module is changed on iOS devices.
  • Some memory leaks and other known issues are fixed.

SDK changes

  • The AliyunVideoSDKPro.framework dynamic framework is split into AliyunVideoSDKPro.framework static framework and AliyunVideoCore.framework dynamic framework. If you want to manually integrate the short video SDK,

    see Project configuration.

V3.13.0

Feature updates

  • The stability and performance of the recording module are optimized.
  • The Render And Compute Everything (RACE) engine-based face filters are added to the recording module.
  • The fluency of H.265 videos is improved in the editing module.

SDK changes

  • The method used for the MV effect is deprecated and the feature of adding the MV effect is removed.

V3.12.0

Feature updates

  • The feature of log analysis is supported. The AliyunVideoSDKInfo setDebugLogLevel operation is added for specifying whether to enable the feature. The following three options are provided:
    AlivcDebugLogClose: Disable the feature of log analysis.
    AlivcDebugLogNormal: Analyze warning or error logs. We recommend that you use this option to analyze logs.
    AlivcDebugLogAll: Analyze all logs. We recommend that you use this option only for troubleshooting. We recommend that you do not use this option in the official release. You can only use this option to analyze logs of the SDK.
                            
  • The performance of the editing module is improved.

Issue fix

  • The issue is fixed where the recording process is stopped but the corresponding thread is still running.

SDK changes

  • The applyRunningDisplayMode method is deleted from the editing module.

V3.11.0

Feature updates

  • The start and stop speeds of clip recording and the video production speed are improved, which enables smoother clip recording.
  • The granularity and accuracy of the recording progress callback are improved.
  • The transcoding speed in specific scenarios is improved by precisely adjusting the group of pictures (GOP) size.
  • The time that is required to switch between cameras is reduced.

Issue fix

  • The issue is fixed where the number of frames in a GIF image is incorrectly parsed.
  • The issue is fixed where specific videos stutter when the videos are played reversely.
  • The issue is fixed where the duration of a recorded video is inaccurate.
  • The issue is fixed where the audio and image of a multi-clip video are not synchronized.

SDK changes

  • All error codes are integrated into AliyunVideoCoreError.
  • The NSString* AlivcErrorMessage(int code) method is added.

V3.10.5

Feature updates

  • The duet feature is supported.
  • The feature of producing a video with multiple videos is supported. The feature allows you to achieve effects such as picture-in-picture and left-right split-screen.

V3.10.0

Feature updates

  • The sound effects of the big devil and Minions are added to the editing module.
  • Videos in the MJPEG format can be edited.
  • The compatibility with specific damaged video files is improved for playback during editing.
  • The draw method is added to forcibly draw a frame during editing.

Issue fix

  • The issue is fixed where the duration is incorrectly displayed for a recorded video clip.
  • The issue is fixed where the watermark that is added during recording disappears when the application is switched to the background.
  • The issue is fixed where stuttering occurs when you switch between the front and rear cameras during recording.
  • The issue is fixed where an unexpected quit may occur when the application is switched to the background during production.

V3.9.0

Feature updates

  • The sound effect feature is supported. The sound effects include lolita, uncle, reverberation, and echo.
  • The seeking performance during editing is improved.
  • The stability of the SDK is improved.

V3.8.0

Feature updates

  • The recording stability is improved.
  • The accuracy of time selection during cropping is improved.
  • The playback capability during editing is optimized to ensure smooth playback.
  • The video production speed is improved for the editing module.
  • Some issues are fixed.
  • The production can be resumed after the application is switched to the foreground from the background.
  • To meet the requirement of SDK stability monitoring and data-related requirements in the future, the AlivcConan.framework is changed as a required dependency. Manual integration: Add AlivcConan.framework. CocoaPods integration: Add pod 'AlivcConan', '0.9.0' to Podfile. For more information, see the demo.

V3.7.7

Feature updates

  • The stability of the SDK is improved.
  • The resolution of cropped and produced videos is improved.

V3.7.5

Feature updates

  • The issue is fixed where a display exception occurs during the reverse playback of HEVC videos that are generated by iOS 12.
  • The issue is fixed where unexpected quits may occur when a third-party rendering interface is used in editing.
  • The playback smoothness of videos with time effects is improved.
  • The compatibility with GIF images is improved.
  • Videos whose resolution consists of odd numbers can be imported.
  • Audio and video synchronization during multi-clip recording is improved.
  • The stability is improved.

V3.7.0

Feature updates

  • The transition feature is supported with mainstream effects, such as fade, polygon, and blinds.
  • The animation feature is supported with basic animations, such as rotation, translation, scaling, and alpha, and custom animations such as linear erasure.
  • The Gaussian blur effect can be added to the specified stream in the specified time period.
  • The display mode, including padding and cropping, can be set for the specified stream in the specified time period.
  • The dubbing feature is supported with multi-track dubbing and speed adjustment.
  • Multiple speed control effects can be added to multiple videos. The repetition and reverse playback effects can be added only to a single video.

SDK changes

  • The method to be called after preview playback ends is changed from play to replay.
  • The prepare method is added for preloading data, which is called after the startEdit method is called.
  • The reference coordinates of the watermark position and size are changed to the output resolution coordinates.
  • The logic for adding a transition is modified. You must call the stopEdit method before you add a transition. After the transition is added, you can call the startEdit method.
  • The delegate attribute is deleted from the AliyunPasterController class.
  • The destroyAllEffect method is deleted from the AliyunEditor class.
  • The name of QuCore-ThirdParty.framework is changed to alivcffmpeg.framework.

V3.6.5.5

Feature updates

  • The SDK is compatible with Xcode10.

V3.6.5.3

Feature updates

  • The issue is fixed where an unexpected quit may occur if the screen is locked when you add an MV during recording.
  • The issue is fixed where an animated filter is not displayed in the specified time period during the reverse playback.
  • The issue is fixed where some videos are not displayed in the correct color.
  • Audio files in the AAC SBR format are supported.

V3.6.5

Feature updates

  • The issue is fixed where an unexpected quit may occur when a video is exported.
  • The smoothness of reverse playback is improved.

V3.6.0

Feature updates

  • Framework file size and basic issues
    Name Size (Unit: MB)
    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
    Note AliyunVideoSDKPro.framework and QuCore-ThirdParty.framework must be replaced at the same time. Otherwise, exceptions such as an unexpected quit during production may occur.

SDK changes

  • Method changes for watermarks
    The setWaterMark:frame method is deprecated and the setWaterMark method is added. The following code provides an example on how to set a watermark:
    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];
  • Method changes for end watermarks
    The end watermark can be viewed during preview. The following code provides an example on how to set an end watermark by calling the setTailWaterMark method:
    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];
  • Method for adding music
    • Multiple audio streams can be mixed. To add only one audio stream, you must call the removeMusics method. The following code provides an example on how to add one audio stream:
      AliyunEffectMusic *music = [[AliyunEffectMusic alloc] initWithFile:path];
      [self.editor removeMusics];// If you want to add only one audio stream, call the removeMusics method.
      [self.editor applyMusic:music];
    • To add music, call the removeMVMusic method. Example: AliyunEffectMusic *music = [[AliyunEffectMusic alloc] initWithFile:path].
      [self.editor removeMVMusic];
      [self.editor removeMusics];
      [self.editor applyMusic:music];
    • The playback of a specified part of a music stream is supported. The following code provides an example on how to specify a time range:
      AliyunEffectMusic music = [[AliyunEffectMusic alloc] initWithFile:path];
      music.startTime = startTime; // Set the start time of the part to be played in the music stream.
      music.duration = duration; // Set the duration of the part to be played in the music stream.
      music.streamStartTime = streamStart [_player getStreamDuration]; // Set the time when the music stream starts to be played in the playback timeline.
      music.streamDuration = streamDuration * [_player getStreamDuration]; // Set the playback duration of the music stream in the playback timeline.
  • New time effect display method
    • The addTimelineTimeFilterItem method is added. For more information about the code, see demo.
    • Time effects affect animated filters.
      If you add an animated filter when the playback speed is adjusted in the entire video or the entire video is reversely played, make sure that the animated filter is displayed in the desired time period. In V3.6.0, the code is in the following methods:
      (void)didBeganLongPressEffectFilter:(AliyunEffectFilterInfo *)animtinoFilterInfo
      (void)didTouchingProgress
      (void)didEndLongPress;
      You can reference the following code for the three methods:
      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; // The streamStartTime parameter is added. You must set the parameter when a time effect is applied.
      animationFilter.streamEndTime = [self.player getStreamDuration];// The streamEndTime parameter is added. You must set the parameter when a time effect is applied.
      [self.editor applyAnimationFilter:animationFilter];

      For compatibility with earlier versions, you can still set the startTime and endTime parameters when no time effect is applied. In this case, streamStartTime and streamEndTime parameters are not required.

  • New time effect method
    The new methods can also be used in V3.5.0. For more information about the code, see the demo of V3.6.0.
    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];
  • The adjustment of playback status and methods, such as the methods for switching between the foreground and background and screen switching
    Compared with V3.5.0, the events of switching between the foreground and background and screen switching are internally handled in V3.6.0.
    • The setActive method is deprecated.
    • Handling of viewWillAppear and viewWillDisappear: When the viewWillDisappear callback is received, you do not need to call the stopEdit method to release the entire AliyunEdit instance. Instead, you only need to call the stop method to stop the playback. Similarly, when the viewWillAppear callback is received, you only need to call the play method to restart the playback.
    • Handling when the application is switched to the background or foreground:

      When the application is switched to the background, the SDK stops the playback or production. When the application is switched to the foreground, the SDK starts or pauses the playback by default.

      Error handling:

      In V3.6.0, when an error occurs during the playback or production, the playback or production is stopped, and the error is returned through the playError or exportError callback. You can handle the error as needed.

  • The following three methods of the AliyunImporter class are deprecated. For compatibility with earlier versions, these methods can still be used in V3.6.0.
    • (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

    In V3.6.0, you can construct an AliyunClip object and call the addMediaClip:(AliyunClip*)clip method to add a video clip. The following code provides an example:

    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];
Note You must know the basic concepts about the player when you use time effects.
  • /* Obtain the total playback duration. Unit: seconds. @return The total duration. /

    (double)getDuration

  • /* Obtain the current playback position. Unit: seconds. /

    (double)getCurrentTime

  • /* Obtain the duration of the original video stream. Unit: seconds. @return The total duration. /

    (double)getStreamDuration

  • /* Obtain the playback position in the original video stream. Unit: seconds. /

    (double)getCurrentStreamTime

Example:

  • If the duration of a video is 15s and the entire video is played at twice the speed, getDuration returns 7.5s and getStreamDuration returns 15s. In this case, when getCurrentTime returns 3.5s, getCurrentStreamTime returns 7s.
  • If the duration of a video is 15s and the entire video is played at half the speed, getDuration returns 30s and getStreamDuration returns 15s. In this case, when getCurrentTime returns 10s, getCurrentStreamTime returns 5s.
  • If the duration of a video is 15s and the entire video is reversely played, getDuration and getStreamDuration both return 15s. In this case, when getCurrentTime returns 6s, getCurrentStreamTime returns 9s.

In the preceding examples, the time effect is applied to the entire video. If the time effect is applied only to a part of the video, the playback duration, stream duration, and playback positions are calculated based on the same rules.

Others

ReleaseNote:

  • New time effect methods
    • (int)applyTimeFilter:(AliyunEffectTimeFilter *)filter
    • (int)removeTimeFilter
  • The following methods of the AliyunImporter class are deprecated:
    • (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
      In V3.6.0, you can construct an AliyunClip object and call the addMediaClip:(AliyunClip*)clip method to add a video clip. The following code provides an example:
      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];
  • The playback status and methods are adjusted. Compared with V3.5.0, the events of switching between the foreground and background and screen switching are handled internally in V3.6.0.

    The setActive method is deprecated.

    Handling of viewWillAppear and viewWillDisappear: When the viewWillDisappear callback is received, you do not need to call the stopEdit method to release the entire AliyunEdit instance. Instead, you only need to call the stop method to stop the playback. Similarly, when the viewWillAppear callback is received, you only need to call the play method to restart the playback.

    Handling when the application is switched to the background or foreground: When the application is switched to the background, the SDK stops the playback or production. When the application is switched to the foreground, the SDK starts or pauses the playback by default.

    Error handling: In V3.6.0, when an error occurs during the playback or production, the playback or production is stopped, and the error is returned through the playError or exportError callback. You can handle the error as needed.

  • New methods for the player
    • (double)getStreamDuration; // Obtain the duration of the original video stream. Unit: seconds.
    • (double)getCurrentStreamTime; // Obtain the playback position in the original video stream. Unit: seconds.
  • Method changes for watermarks
    • The setWaterMark: frame method is deprecated.
    • The setWaterMark:(AliyunEffect*)waterMark method is added.
    • You can call the setTailWaterMark: method to set an end watermark, which can be previewed.
  • Method for adding music
    • Multiple audio streams can be mixed. The specified part of a music stream can be played. To add only one audio stream, you must call the removeMusics method. The following code provides an example:
      AliyunEffectMusic *music = [[AliyunEffectMusic alloc] initWithFile:path];
      [self.editor removeMusics];// If you want to add only one audio stream, call the removeMusics method. 
      [self.editor applyMusic:music];
    • The specified part of a music stream can be played. The following code provides an example:
      AliyunEffectMusic music = [[AliyunEffectMusic alloc] initWithFile:path];
      music.startTime = startTime; // Set the start time of the part to be played in the music stream. 
      music.duration = duration; // Set the duration of the part to be played in the music stream.
      music.streamStartTime = streamStart [_player getStreamDuration]; // Set the time when the music stream starts to be played in the playback timeline.
      music.streamDuration = streamDuration * [_player getStreamDuration]; // Set the playback duration of the music stream in the playback timeline.