全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网
视频点播

基础版

更新时间:2017-10-25 16:57:45

一、版本要求

Android支持4.3及以上

二、开发环境配置

本SDK开发环境为 JAVA1.7 | ANDROID SDK API LEVEL 18

三、使用说明

  • 导入SDK

    先下载SDK,详见SDK下载页面
    SDK包括QuSDK-RC.aar,libQuCore.so,libQuCore-ThirdParty.so 3个基本文件,使用时只需要将.aar文件放入项目libs文件夹中,.so文件放入libs/armeabi-v7a文件夹中即可。
  • 接入

    使用aar:aar 文件放入引用Module的libs目录下,gradle配置文件中把libs 目录放入依赖:

    1. repositories{
    2. flatDir{
    3. dirs 'libs'
    4. }
    5. }

    在gradle文件中使用依赖的方式引用aar:

    1. compile(name:'xxx',ext:'aar')

    使用so:

    so 文件放入引用Module的libs/armeabi-v7a目录下,gradle配置文件中把libs 目录放入依赖:

    1. android{
    2. sourceSets.main {
    3. jni.srcDirs = []
    4. jniLibs.srcDir "libs"
    5. }
    6. }

    在代码中加入:

    1. System.loadLibrary("QuCore-ThirdParty");
    2. System.loadLibrary("QuCore");
  • SDK配置

设置AndroidManifest.xml文件,声明使用权限(必须)

  1. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  2. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  3. <uses-permission android:name="android.permission.CAMERA" />
  4. <uses-permission android:name="android.permission.FLASHLIGHT" />
  5. <uses-permission android:name="android.permission.RECORD_VIDEO" />
  6. <uses-permission android:name="android.permission.RECORD_AUDIO" />
  7. <uses-permission android:name="android.permission.INTERNET" />
  8. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

使用本SDK需要依赖外部第三方包,目前包含(必须):
注意:目前闭源support版本的包必须跟以下版本一致.

  1. ```java
  2. compile 'com.android.support:appcompat-v7:24.2.1'
  3. compile 'com.android.support:design:24.2.1'
  4. compile 'com.google.code.findbugs:jsr305:3.0.0'
  5. compile 'com.github.bumptech.glide:glide:3.7.0'
  6. compile 'pub.devrel:easypermissions:0.2.1'
  7. compile 'com.squareup.okhttp3:okhttp:3.2.0'
  8. compile 'com.github.bumptech.glide:okhttp3-integration:1.4.0@aar'
  9. compile 'com.squareup.okio:okio:1.12.0'
  10. compile 'com.google.code.gson:gson:2.8.0'
  11. ```

如果使用了jackson,请在app中的build.gradle中添加:

  1. android{
  2. packagingOptions {
  3. exclude('META-INF/LICENSE')
  4. }
  5. }

在应用启动的时候,请做如下初始化工作(必须):

  1. QupaiHttpFinal.getInstance().initOkHttpFinal();
  • UI配置

    UI配置需要为Activity指定主题,定义如下(非必须指定,如不指定即为默认主题,如有疑义请参考demo配置)

    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>
  • 录制

  • 初始化参数使用录制功能,需要初始化AliyunSnapVideoParam对象,初始化方法如下:

    1. AliyunSnapVideoParam recordParam = new AliyunSnapVideoParam.Builder()
    2. //设置录制分辨率,目前支持360p,480p,540p,720p
    3. .setResulutionMode(AliyunVideoRecorder.RESOLUTION_360P)
    4. //设置视频比例,目前支持1:1,3:4,9:16
    5. .setRatioMode(AliyunVideoRecorder.RATIO_MODE_9_16)
    6. .setRecordMode(RecorderDemo.RECORD_MODE_AUTO) //设置录制模式,目前支持按录,点录和混合模式
    7. .setFilterList(eff_dirs) //设置滤镜地址列表,具体滤镜接口接收的是一个滤镜数组
    8. .setBeautyLevel(80) //设置美颜度
    9. .setBeautyStatus(true) //设置美颜开关
    10. .setCameraType(CameraType.FRONT) //设置前后置摄像头
    11. .setFlashType(FlashType.ON) // 设置闪光灯模式
    12. .setNeedClip(true) //设置是否需要支持片段录制
    13. .setMaxDuration(max) //设置最大录制时长 单位毫秒
    14. .setMinDuration(min) //设置最小录制时长 单位毫秒
    15. .setVideQuality(videoQuality) //设置视频质量
    16. .setGop(gop) //设置关键帧间隔
    17. .setVideoBitrate(2000) //设置视频码率,如果不设置则使用视频质量videoQulity参数计算出码率
    18. .setSortMode(AliyunSnapVideoParam.SORT_MODE_VIDEO)//设置导入相册过滤选择视频
    19. .build();
  • 拉起录制界面

    1. AliyunVideoRecorder.startRecordForResult(this,REQUEST_RECORD,recordParam);
  • 回调

    1. 需要回调请重写`onActivityResult`函数,其中有返回类型参数,代表是从裁剪返回还是从录制返回
    1. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    2. if(requestCode == REQUEST_RECORD){
    3. if(resultCode == Activity.RESULT_OK && data!= null){
    4. int type = data.getIntExtra(AliyunVideoRecorder.RESULT_TYPE,0);
    5. if(type == AliyunVideoRecorder.RESULT_TYPE_CROP){
    6. String path = data.getStringExtra(AliyunVideoCrop.RESULT_KEY_CROP_PATH);
    7. Toast.makeText(this,"文件路径为 "+ path + " 时长为 " +
    8. data.getLongExtra(AliyunVideoCrop.RESULT_KEY_DURATION,0),Toast.LENGTH_SHORT).show();
    9. }else if(type == AliyunVideoRecorder.RESULT_TYPE_RECORD){
    10. Toast.makeText(this,"文件路径为 "+
    11. data.getStringExtra(AliyunVideoRecorder.OUTPUT_PATH),Toast.LENGTH_SHORT).show();
    12. }
    13. }else if(resultCode == Activity.RESULT_CANCELED){
    14. Toast.makeText(this,"用户取消录制",Toast.LENGTH_SHORT).show();
    15. }
    16. }
    17. }
  • 导入裁剪

  • 初始化参数 使用裁剪功能,需要初始化AliyunSnapVideoParam对象,初始化方法如下:

    1. AliyunSnapVideoParam mCropParam = new AliyunSnapVideoParam.Builder()
    2. .setFrameRate(frameRate) //设置帧率
    3. .setGop(gop) //设置关键帧间隔
    4. .setCropMode(cropMode) //设置裁剪模式,目前支持有黑边和无黑边两种
    5. .setVideQuality(videoQulity) //设置裁剪质量
    6. .setVideoBitrate(2000) //设置视频码率,如果不设置则使用视频质量videoQulity参数计算出码率
    7. .setCropUseGPU(true) //设置裁剪方式,是否使用gpu进行裁剪,不设置则默认使用cpu来裁剪
    8. .setResulutionMode(resolutionMode) //设置分辨率,目前支持360p,480p,540p,720p
    9. .setRatioMode(ratioMode)//设置裁剪比例 目前支持1:1,3:4,9:16
    10. .setNeedRecord(true)//设置是否需要开放录制入口
    11. .setMinVideoDuration(4000) //设置过滤的视频最小长度 单位毫秒
    12. .setMaxVideoDuration(29 * 1000) //设置过滤的视频最大长度 单位毫秒
    13. .setMinCropDuration(3000) //设置视频最小裁剪时间 单位毫秒
    14. .build();
  • 拉起裁剪页面
    1. AliyunVideoCrop.startCropForResult(this,REQUEST_CROP,mCropParam);
  • 回调

    需要回调请重写onActivityResult函数,其中有返回类型参数,代表是从裁剪返回还是从录制返回

    1. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    2. if(requestCode == REQUEST_CROP){
    3. if(resultCode == Activity.RESULT_OK && data!= null){
    4. int type = data.getIntExtra(MediaActivity.RESULT_TYPE,0);
    5. if(type == MediaActivity.RESULT_TYPE_CROP){
    6. String path = data.getStringExtra(AliyunVideoCrop.RESULT_KEY_CROP_PATH);
    7. Toast.makeText(this,"文件路径为 "+ path + " 时长为 " +
    8. data.getLongExtra(AliyunVideoCrop.RESULT_KEY_DURATION,0),Toast.LENGTH_SHORT).show();
    9. }else if(type == MediaActivity.RESULT_TYPE_RECORD){
    10. Toast.makeText(this,"文件路径为 "+
    11. data.getStringExtra(AliyunVideoRecorder.OUTPUT_PATH),Toast.LENGTH_SHORT).show();
    12. }
    13. }else if(resultCode == Activity.RESULT_CANCELED){
    14. Toast.makeText(this,"用户取消裁剪",Toast.LENGTH_SHORT).show();
    15. }
    16. }
    17. }

四、上传

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

本文导读目录