全部产品
云市场

导入裁剪

更新时间:2019-07-01 10:30:35

简介

阿里云短视频SDK裁剪模块提供视频裁剪能力,可裁剪视频片段调整时长,也可对视频的帧率、码率、分辨率、视频比例做调整。

裁剪功能集成

tips:由于基础版和标准版&专业版的裁剪功能一致,所以不做区分。

  • 创建一个示例工程AliyunCropDemoundefined

步骤1.文件导入

  • 导入选中的library和gradle相关文件夹到示例工程趣视频裁剪复制文件

  • 模块说明

名称 作用 是否必须
AlivcCore 短视频sdk核心组件
AliyunCrop 裁剪ui模块
AlivcMedia 媒体库模块
AliyunVideoSdk 短视频sdk编辑核心功能
AliyunSVideoBase 短视频基础包
AliyunVideoCommon 公共模块
thirdparty-lib 项目中所依赖的第三方库的配置子模块
  • 将app/src/main/jniLibs中的so库拷贝到项目中

tips : 短视频目前提供了armeabi-v7a,arm64-v8a两种cpu架构的so库

名称 作用 裁剪模块是否必须
libfdk-aac.so 短视频SDK依赖音频第三方库
liblive-openh264.so 短视频SDK依赖第三方库
libQuCore.so 短视频SDK核心库
libsvideo_alivcffmpeg.so 短视频SDK依赖第三方库
  • 如果有集成其他模块,相同文件夹和so库只需要一份

步骤2.引入包和build.gradle设置

  • 在Android Project 的settings.gradle文件中添加以下引用
  1. include ':AlivcCore'//短视频sdk核心组件
  2. include ':AliyunSVideoBase'//短视频基础包
  3. include ':AliyunVideoSdk'//短视频sdk编辑核心功能
  4. include ':AliyunCrop:crop_demo'//裁剪ui模块
  5. include ':AliyunVideoCommon'//公共模块,主要为工具类
  6. include ':AlivcMedia'//媒体库模块
  • build.gradle中添加ndk和dependencies配置,初始化sdk以及使用的时候需要:
  1. defaultConfig {
  2. //...
  3. ndk {
  4. abiFilters "armeabi-v7a","arm64-v8a"
  5. //短视频目前不支持x86架构
  6. }
  7. }
  8. dependencies {
  9. implementation fileTree(dir: 'libs', include: ['*.jar'])
  10. //...
  11. //裁剪的依赖
  12. implementation project(':AliyunCrop:crop_demo')
  13. implementation externalAliyunOSS
  14. }
  • 在工程的build.gradle中添加thirdparty-lib/config.gradle的应用
  1. buildscript {
  2. //...
  3. apply from: 'thirdparty-lib/config.gradle'
  4. dependencies {
  5. classpath '...'
  6. }
  7. }
  • 添加maven仓库

将下面代码拷贝到 工程级别的build.gradle文件对应的位置。

  1. allprojects {
  2. repositories {
  3. google()
  4. jcenter()
  5. maven { url "http://maven.aliyun.com/nexus/content/repositories/releases" }
  6. }
  7. }

步骤3.添加权限

在AndroidManifest.xml文件中加入以下权限,已添加可以跳过此步骤。

  1. <!-- 往SDCard写入数据权限 -->
  2. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  3. <!-- 从SDCard读取数据权限 -->
  4. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
  5. <!-- 网络权限 sdk license需要-->
  6. <uses-permission android:name="android.permission.INTERNET"/>

Android 6.0以上系统需要做动态权限请求。

步骤4.功能使用

tips:裁剪需要存储权限,为保证6.0以上机器可以正确使用您需要申请动态权限,您如果出现界面黑屏或者其他异常情况,请务必保证您拥有权限。

  • 创建MyApplication继承android.app.Application或者在项目中已经指定的Application中添加以下代码
  1. @Override
  2. public void onCreate() {
  3. super.onCreate();
  4. QupaiHttpFinal.getInstance().initOkHttpFinal();
  5. }
  • 使用默认参数进入裁剪页面
  1. AlivcCropInputParam mCropParam = new AlivcCropInputParam.Builder()
  2. .setPath("视频文件路径")//视频文件路径,必填项
  3. .build();
  4. AliyunVideoCropActivity.startVideoCropForResult(MainActivity.this,mCropParam,REQUEST_CROP);
  • 设置裁剪的参数,完整代码:
  1. AlivcCropInputParam mCropParam = new AlivcCropInputParam.Builder()
  2. .setPath("视频文件路径")//视频文件路径,必填项
  3. .setFrameRate(frameRate)//设置帧率
  4. .setGop(gop)//设置关键帧间隔
  5. .setCropMode(cropMode)//裁剪模式
  6. .setQuality(videoQulity)//视频质量
  7. .setResolutionMode(resolutionMode)//分辨率
  8. .setRatioMode(ratioMode)//视频比例
  9. .setNeedRecord(false)//资源显示控件是否需要能跳录制
  10. .setCropUseGPU(false)//GPU默认关闭
  11. .setVideoBitrate()//码率
  12. .build();
  13. AliyunVideoCropActivity.startVideoCropForResult(this,mCropParam,REQUEST_CROP);
  • 在onActivityResult中获取裁剪后视频的路径
  1. @Override
  2. protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
  3. super.onActivityResult(requestCode, resultCode, data);
  4. if(requestCode == 10){
  5. if(resultCode == Activity.RESULT_OK && data!= null){
  6. AlivcCropOutputParam param = (AlivcCropOutputParam)data.getSerializableExtra(AlivcCropOutputParam.RESULT_KEY_OUTPUT_PARAM);
  7. Toast.makeText(this,
  8. "文件路径为 "+ param.getOutputPath() + " 时长为 " + param.getDuration(),
  9. Toast.LENGTH_SHORT).show();
  10. }else if(resultCode == Activity.RESULT_CANCELED){
  11. Toast.makeText(this,"用户取消裁剪",Toast.LENGTH_SHORT).show();
  12. }
  13. }
  14. }
  • UI配置

UI配置需要为Activity指定主题,这里基础版录制和裁剪公用一份style,定义如下(非必须指定,如不指定即为默认主题)。

  1. <style name="AliyunVideoUIStytle" >
  2. <item name="qusnap_background_color">@color/color_bg</item> //背景主题色
  3. <item name="qusnap_tint_color">@color/tint_color</item> //录制进度条颜色
  4. <item name="qusnap_timeline_backgound_color">@color/timeline_backgound_color</item> //录制进度条背景色
  5. <item name="qusnap_timeline_del_backgound_color">@color/timeline_background_del_color</item> //录制删除进度颜色
  6. <item name="qusnap_back_icon">@mipmap/icon_back</item> // 返回按钮图标
  7. <item name="qusnap_switch_light_icon">@drawable/snap_switch_light_selector</item> //闪光灯选择器
  8. <item name="qusnap_switch_light_icon_disable">@mipmap/icon_light_dis</item>// 闪光灯禁用图标
  9. <item name="qusnap_switch_light_icon_visibility">visible</item> // 闪光灯显隐属性
  10. <item name="qusnap_switch_camera_icon">@drawable/snap_switch_camera</item> //摄像头选择器
  11. <item name="qusnap_switch_camera_icon_visibility">visible</item> //摄像头显隐属性
  12. <item name="qusnap_beauty_icon">@drawable/snap_switch_beauty</item> //美颜选择器
  13. <item name="qusnap_beauty_icon_visibility">visible</item> // 美颜显隐属性
  14. <item name="qusnap_record_icon">@drawable/snap_record_state_selector</item> //录制选择器
  15. <item name="qusnap_delete_icon">@drawable/snap_icon_delete</item> //删除选择器
  16. <item name="qusnap_complete_icon">@drawable/snap_icon_complete</item> //完成选择器
  17. <item name="qusnap_gallery_icon">@mipmap/icon_default</item> //相册按钮
  18. <item name="qusnap_gallery_icon_visibility">visible</item>//相册的显示隐藏
  19. <item name="qusnap_time_txt_color">@android:color/white</item> //录制时间文字颜色
  20. <item name="qusnap_time_txt_size">15dp</item> //录制时间文字大小
  21. <item name="qusnap_time_txt_visibility">visible</item> //录制时间文字显隐属性
  22. <item name="qusnap_time_line_pos_y">0dp</item> //录制进度条向上偏移量
  23. <item name="qusnap_crop_sweep_left">@mipmap/icon_sweep_left</item> //裁剪滑动条左图标
  24. <item name="qusnap_crop_sweep_right">@mipmap/icon_sweep_right</item> //裁剪滑动条右图标
  25. <item name="qusnap_crop_seek_frame">@mipmap/icon_frame</item> //裁剪播放帧进度图标
  26. <item name="qusnap_crop_seek_padding_color">@android:color/holo_red_dark</item> //裁剪滑动条上下边框颜色
  27. <item name="qusnap_crop_icon_transform">@drawable/snap_transform_selector</item> //裁剪模式切换选择器
  28. <item name="qusnap_crop_icon_transform_visibility">visible</item> //裁剪模式显隐属性
  29. <item name="qusnap_crop_time_txt_color">@android:color/white</item> //裁剪视频时长文字颜色
  30. <item name="qusnap_crop_time_txt_size">15dp</item> //裁剪视频时长文字大小
  31. <item name="qusnap_crop_txt_visibility">visible</item> //裁剪视频时长文字显隐属性
  32. </style>