- Improved the start and stop speeds of clip recording and the video production speed, enabling smoother clip recording.
- Optimized the granularity and accuracy of the recording progress callback.
- Improved the transcoding speed in some scenarios through precise control of the GOP size.
- Integrated all error codes to
- Added the
String getErrorCodeMessage(int errorCode)method for obtaining the error description.
- Fixed the bug that the FILL mode does not take effect for obtaining the thumbnail frame and the bug that frames cannot be obtained from TikTok videos.
- Fixed the bug that the first frame of the video in which the reverse playback effect is applied is a gray frame.
- Fixed the bug that a doodle added when the editing is paused cannot be deleted.
- Fixed the bug that the screen flickers during recording after you delete a clip and crop the frame in the OpenH264 or FFmpeg encoding format.
- Fixed the bug that the number of frames in a GIF image is incorrectly parsed.
- Fixed the bug that certain videos freeze when being played reversely.
- Fixed the bug of inaccurate duration of a recorded video.
- Fixed the bug that audio and image of a multi-clip video are not synchronized.
- Added the AliyunIMixRecorder interface to provide the duet feature.
- Added the AliyunIMixComposer interface for producing a video from multiple videos. This interface can be used to achieve effects such as picture-in-picture and left-right split-screen.
- Supported adding the big devil and Minions sound effects during editing.
- Supported editing videos in the MJPEG format.
- Improved compatibility with some damaged video files for playback during editing.
- Supported hardware encoding for HEVC videos during editing and transcoding.
- Improved the transcoding speed.
- Added the AliyunIRecorder.resizePreviewSize method for resetting the preview window size during recording.
- Added independent interfaces for producing or uploading videos.
- Fixed the bug that the duration is displayed incorrectly for a recorded video clip.
- Fixed the bug that memory leakage may occur because some handles are not released.
- Added the draw method to forcibly draw a frame during editing. This resolves the issue that the first frame is not drawn during initialization by default.
Supported SDK integration in Maven mode.Maven repository URL: http://maven.aliyun.com/nexus/content/repositories/releasesProfessional edition: com.aliyun.video.android:svideopro:3.10.0, which corresponds to AliyunSdk-RCE.aar and .so libraries of armeabi-v7a&arm64-v8aStandard edition: com.aliyun.video.android:svideostand:3.10.0, which corresponds to AliyunSdk-RCE.aar and .so libraries of armeabi-v7a&arm64-v8aBasic edition: com.aliyun.video.android:svideosnap:3.10.0, which corresponds to AliyunSdk-RC.aar and .so libraries of armeabi-v7a&arm64-v8aCore libraries:com.aliyun.video.android:core:1.1.2, which corresponding to AlivcCore.jarcom.alivc.conan:AlivcConan:0.9.4com.aliyun.video.android:AlivcSvideoFFmpeg:1.0.0
- Added the sound effects of lolita, uncle, reverberation, and echo.
- Improved the seeking performance during editing.
- Fixed known bugs and enhanced the stability.
- Combined libAliFaceAREngine.so and libFaceAREngine.so to libAliFaceAREngine.so.
- Changed the thread triggered by OnFrameCallBack to a child thread.
- Improved editing and playback performance and guaranteed smooth video playback.
- Improved efficiency of video production.
- Optimized the preview definition for video recording.
- Improved the recording frame rate on earlier devices.
- Fixed known bugs and enhanced the stability.
- Supported Maven dependencies.
- Maven repository URL: http://maven.aliyun.com/nexus/content/repositories/releases
- Allowed users to set SDK dependencies based on the SDK edition.
- Professional edition:com.aliyun.video.android:svideopro:3.8.0: corresponds to AliyunSdk-RCE.aar.com.aliyun.video.android:svideopro-armv7a:3.8.0: corresponds to all .so libraries of the armeabi-v7a architecture.com.aliyun.video.android:svideopro-arm64:3.8.0: corresponds to all .so libraries of the arm64-v8a architecture.
- Standard edition:com.aliyun.video.android:svideostand:3.8.0: corresponds to AliyunSdk-RCE.aar.com.aliyun.video.android:svideostand-armv7a:3.8.0: corresponds to all .so libraries of the armeabi-v7a architecture.com.aliyun.video.android:svideostand-arm64:3.8.0: corresponds to all .so libraries of the arm64-v8a architecture.
- Basic edition:com.aliyun.video.android:svideosnap:3.8.0: corresponds to AliyunSdk-RC.aar.com.aliyun.video.android:svideosnap-armv7a:3.8.0: corresponds to all .so libraries of the armeabi-v7a architecture.com.aliyun.video.android:svideosnap-arm64:3.8.0: corresponds to all .so libraries of the arm64-v8a architecture.
- ApsaraVideo core library:compile ‘com.aliyun.video.android:core:1.1.0’: corresponds to AlivcCore.jar.
- Removed the upload SDK from the short video SDK. If the upload feature is required, you need to add external dependencies by using Gradle.compile ‘com.aliyun.video.android:upload:1.5.2’
- Changed the AlivcConan library as a required dependency to meet the requirement of SDK stability monitoring and data-related requirements in the future.compile ‘com.alivc.conan:AlivcConan:0.9.0’For more information about adding obfuscation, see the demo.
Adjusted the threads used by the following methods of the RecordCallback interface:RecordCallback#onComplete: The thread used by this callback is changed from the main thread to a child thread. If the callback needs to perform an operation on the UI, you need to post the operation to the main thread.RecordCallback#onProgress: The thread used by this callback is changed from the main thread to a child thread. If the callback needs to perform an operation on the UI, you need to post the operation to the main thread.RecordCallback#onMaxDuration: The thread used by this callback is changed from the main thread to a child thread. If the callback needs to perform an operation on the UI, you need to post the operation to the main thread.RecordCallback#onError: The thread used by this callback is changed from the main thread to a child thread. If the callback needs to perform an operation on the UI, you need to post the operation to the main thread.This adjustment ensures that callback data is the same as that in the SDK, reducing exceptions.
Changed the EditorCallback interface.Changed EditorCallback from an interface to an abstract class.Added the mNeedRenderCallback parameter to enable or disable onCustomRender and onTextureRender.When onCustomRender and onTextureRender are disabled, the editing performance will be improved.By default, onCustomRender and onTextureRender are disabled. To enable onCustomRender and onTextureRender, set this parameter as follows:mNeedRenderCallback = EditorCallBack.RENDER_CALLBACK_CUSTOM // Enables onCustomRender.mNeedRenderCallback = EditorCallBack.RENDER_CALLBACK_TEXTURE // Enables onTextureRender.mNeedRenderCallback = EditorCallBack.RENDER_CALLBACK_TEXTURE|EditorCallBack.RENDER_CALLBACK_CUSTOM // Enables both onCustomRender and onTextureRender.
- Added the postToGl and removeFromGl methods to the AliyunIRecorder interface. You can use the two methods to post and remove operations to and from the GL thread.
- Optimized the frame rate for preview and recording.
- Changed AliyunIRecorder.setDisplayView(GLSurfaceView surfaceView) to AliyunIRecorder.setDisplayView(SurfaceView surfaceView).That is, GLSurfaceView is changed to SurfaceView in the setDisplayView method.
- Added the OnTextureIdCallBack.onTextureDestroyed() callback for destroying GL resources during custom rendering (third-party rendering). Originally, GL resources are destroyed through GLSurfaceView.queueEvent.
- Supported adjusting the surface window size without the need to restart preview. (If you want to reselect the collection resolution, you still need to restart preview.)
- Adjusted the logic for calling RecordCallback.onInitReady. RecordCallback.onInitReady is called only once in the setRecordCallback method when you create an AliyunIRecorder instance. This ensures compatibility with earlier versions. In fact, you can directly perform other operations after creating an AliyunIRecorder instance, without the need to wait for the RecordCallback.onInitReady callback.
- Added the AlivcSdkCore interface for debugging. The AlivcSdkCore#register method is used to replace dynamic libraries in debugging mode. The AlivcSdkCore#setLogLevel method is used to customize the log level.
- Provided an intelligent chatbot that can answer your questions about the short video SDK and its usage at https://h5.m.taobao.com/alicare/meebot.html?appKey=zjrE3jzzba&type=dingding_channel. To obtain answers precisely, we recommend that you enter accurate keyword information, such as SDK documentation and how to add a common animated sticker.
- Improved the definition of produced or cropped videos.
- Improved overall stability.
- Fixed the crash that may occur when a third-party rendering interface is used in editing.
- Improved the playback smoothness of videos with time effects.
- Improved the compatibility with GIF images.
- Supported importing videos whose resolution consists of odd numbers.
- Optimized audio and video synchronization during multi-clip recording.
- Improved stability.
- Added the replay method. To replay a video, call the replay method after receiving the onEnd callback. For more information, see the code of the demo.
- Modified the implementation of the mute method AliyunIEditor#setAudioSilence. In V3.7.0, this method only mutes a video during preview playback. To mute the audio in the produced video, call the AliyunIEditor#setVolume(0) method to set the output volume to 0.
- Added the following methods to the AliyunPasterBaseView interface:
- getTextMaxLines // Obtains the maximum number of lines.getTextAlign() // Obtains the text alignment mode.getTextPaddingX() // Obtains the distance between the x-axis of the text and the left edge, with the upper-left corner as the origin.getTextPaddingY() // Obtains the distance between the y-axis of the text and the top edge, with the upper-left corner as the origin.getTextFixSize() // Obtains the font size of the text.getBackgroundBitmap() // Obtains the background image of the text.isTextHasLabel() // Indicates whether the text has a background color.getTextBgLabelColor() // Obtains the background color of the text.Developers need to implement these methods themselves.
- Modified the playback logic after media clips are updated. After you call the AliyunIEditor#applySourceChange method to update media clips, the media clips are not automatically played. You need to call the AliyunIEditor#play method to start the playback.
- Changed the package name related to the AliyunIThumbnailFetcher interface for fetching a thumbnail or frame. You can precompile the SDK code. When an error is reported during the compilation, delete the original import statement and import the correct package.
- Changed SharableBitmap to Bitmap in the parameters of the AliyunIThumbnailFetcher$OnThumbnailCompletion.onThumbnailReady() callback. Bitmaps can be directly used. You do not need recycle them.
- Added the transition duration parameter to the addVideoSource and addImageSource methods of AliyunIThumbnailFetcher. If the imported video or image requires a transition duration, set this parameter to the required transition duration. Otherwise, set this parameter to 0.
- Replaced the ScaleMode enumeration with the VideoDisplayMode enumeration.
- Deleted the destroy method from the AliyunRecorderCreator and AliyunCropCreator classes. AliyunIReocder and AliyunICrop now support multiple instances.
- Replaced the libQuCore-ThirdParty.so library with the libsvideo_alivcffmpeg.so library.
- Modified the location of some structure classes. If a class is not found in the original package, delete the import statement for the class and import the correct package.
- Fixed some crash bugs.
- Fixed the bug of reverse playback freezing.
- Fixed the issue that animated filters are not displayed properly on some mobile phones.
- Added the TransitionBase class to provide the transition feature. For more information, see the SDK documentation. Optimized the addVideo and addImage methods of the AliyunIImport interface by deleting the transition-related parameters inDuration, outDuration, and overlapDuration. Now, subclasses of TransitionBase are used to provide richer transition effects.
- Added the AliyunIEditor#addFrameAnimation method for customizing animations. For more information, see the SDK documentation.
- Supported adding multiple speed control effects to multiple videos. (The repetition and reverse playback effects can still be configured for a single video.)
- Added the AliyunIEditor#deleteTimeEffect method for deleting a time effect.
- Added the AliyunIEditor#applyBlurBackground method for adding the Gaussian blur effect to the specified stream in the specified time period.
- Added the AliyunIEditor#addRunningDisplayMode method for setting the display mode (padding and cropping) for the specified stream in the specified time period.
- Added the AliyunIEditor#applyDub method for adding dubbing. The dubbing is affected by time effects.
- Deprecated the methods for configuring MVs during recording, including:int applyMv(EffectBean effectMv)void pauseMv()void resumeMv()void restartMv()In V3.7.0, the deprecated methods can still be used. They will be deleted in a later version.
- Fixed the bug that FFmpeg software coding is not supported for production.
- Fixed the bug that the onEnd callback is triggered first when you add a time effect.
- Fixed the bug that the volume specified during editing does not take effect during production. The volume is larger than specified, and the default volume of the SDK is modified.
- Fixed the bug that some videos are stuck at 99% during cropping.
- Fixed the bug that some videos cropped on mobile phones freeze during the preview playback.
- Fixed the bug that animated filters have dashed lines on some Huawei mobile phones.
- Fixed the bug that the SDK crashes when you remove music on some mobile phones.
- Fixed the bug that reverse playback freezes.
- Fixed the bug that a color gamut issue occurs when the BT.709 formula is used for YUV-to-RGB conversion. Other color gamut issues are being solved.
- Supported audio files in the AAC SBR format.
- Fixed the bug that the audio sampling rate is incorrect.
- Fixed the bug that animated filters are not displayed properly on some mobile phones.
- Updated the upload library. Your short video application needs to integrate the new version of the SDK to use the new fields.
- Added the Alivc.jar package. You need to add the dependency on this package to your project.
Modified the addVideo and addImage methods of the AliyunIImport interface.Modified the parameters of the addVideo and addImage methods. The fadeDuration parameter has been split into the outDuration, inDuration, and overlapDuration parameters. The outDuration parameter specifies the duration for displaying the transition in the previous video. The inDuration parameter specifies the duration for displaying the transition in the next video. The overlapDuration parameter specifies the overlapping duration between the two videos.
Added the callback parameter of the EditorCallBack type to the AliyunEditorFactory.creatAliyunEditor method, which originally has only the uri parameter. The EditorCallback class is a new class that replaces OnPlayCallback.The correspondence is as follows:|Old method|Correspondence|New method||:-|:-|:-||OnPlayCallback.onPlayCompleted|Corresponds to|EditorCallback.onEnd||OnPlayCallback.onError|Corresponds to| EditorCallback.onError||OnPlayCallback.onTextureIDCallback|Corresponds to|EditorCallback.onCustomRender||OnPlayCallback.onPlayStarted| |The old method is deleted and has no corresponding method.||OnPlayCallback.onSeekDone| |The old method is deleted and has no corresponding method.|
Deleted the AliyunIPlayer interface and the createAliyunPlayer() method for creating a player instance. You can use methods of AliyunIEditor to control playback. The correspondence is as follows:|Old method|Correspondence|New method||:-|:-|:-||AliyunIPlayer.getCurrentPosition|Corresponds to|AliyunIEditor.getCurrentPlayPosition||AliyunIPlayer.getDuration|Corresponds to|AliyunIEditor.getDuration||AliyunIPlayer.getRotation|Corresponds to|AliyunIEditor.getRotation||AliyunIPlayer.getVideoHeight|Corresponds to|AliyunIEditor.getVideoHeight||AliyunIPlayer.getVideoWidth|Corresponds to|AliyunIEditor.getVideoWidth||AliyunIPlayer.isAudioSilent|Corresponds to|AliyunIEditor.isAudioSilense||AliyunIPlayer.isPlaying|Corresponds to|AliyunIEditor.isPlaying||AliyunIPlayer.pause|Corresponds to|AliyunIEditor.pause||AliyunIPlayer.resume|Corresponds to|AliyunIEditor.resume||AliyunIPlayer.seek|Corresponds to|AliyunIEditor.seek||AliyunIPlayer.setAudioSilense|Corresponds to|AliyunIEditor.setAudioSilense||AliyunIPlayer.setDisplayMode|Corresponds to|AliyunIEditor.setDisplayMode||AliyunIPlayer.setFillBackgroundColor|Corresponds to|AliyunIEditor.setFillBackgroundColor||AliyunIPlayer.setOnPlayCallbackListener| |The old method is deleted and has no corresponding method.||AliyunIPlayer.setOnPreparedListener| |The old method is deleted and has no corresponding method.||AliyunIPlayer.setVolume|Corresponds to|AliyunIEditor.setVolume||AliyunIPlayer.start|Corresponds to|AliyunIEditor.start||AliyunIPlayer.stop|Corresponds to|AliyunIEditor.stop|
The OnPreparedListener method is deleted in V3.6.0. This means that you can add effects immediately when an AliyunIEditor instance is initialized, without the need to wait for the OnPrepared callback.
Added the id parameter to the applyMusicMixWeight method. V3.6.0 allows you to add multiple dubbing tracks. Therefore, IDs are needed to distinguish the tracks. For more information about this method, see the SDK documentation.
Deleted the AliyunIExporter interface. You can use the production methods in AliyunIEditor to produce videos. The correspondence is as follows:|Old method|Correspondence|New method||:-|:-|:-||AliyunIExporter.startCompose|Corresponds to|compose||AliyunIExporter.cancel|Corresponds to|cancelCompose||AliyunIExporter.setTailWatermark| |The old method is deleted and has no corresponding method.||AliyunIExporter.clearTailWatermark| |The old method is deleted and has no corresponding method.|
Changed the OnComposeCallback parameter to AliyunIComposeCallBack in the AliyunICompose.startCompose method.
Added the need to call the AliyunIEditor#saveEffectToLocal() method before creating a production instance.
Note: The release notes do not cover all changes to parameters of methods. If a parameter-related error is reported during compilation, you can modify your code based on the parameter description in the SDK documentation.