全部产品
视频点播

标准版

更新时间:2017-08-31 17:44:37   分享:   

一、系统版本

1.1 版本要求

Android支持4.3及以上

二、快速开始

2.1 开发环境配置

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

2.2 导入SDK

2.2.1 简介

SDK示例包括DEMO,:AliyunRecorder:record_demo,:AliyunCrop:crop_demo,:AliyunHelp,AliyunView,AliyunFileDownLoader:downloadermanager,:AliyunVideoSdk,STMobileJNI等8个基本moudle,使用Demo时只需要将整个根文件夹作为ANDROID STUDIO的项目导入即可。
其中DEMO是作为整个SDK的模块选择界面
AliyunCrop:crop_demo:是裁剪模块的示例代码
AliyunRecorder:record_demo:是录制模块的示例代码
AliyunVideoSdk:核心SDK,以AAR形式提供
AliyunHelp:阿里云License声明
AliyunFileDownLoader:downloadermanager:人脸动图需要的下载管理模块,如无人脸动图需求不需要导入
STMobileJNI:第三方人脸库,目前仅仅做了代码演示,引导用户接入人脸识别库,但实际上因为License授权问题,该人脸库在本Demo中不可用
AliyunView:项目中使用的自定义控件

2.2.2 SDK的文件结构如图所示:

标准版目录结构

2.2.3 SDK模块依赖关系:

标准版依赖关系

2.3 权限要求

  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" />

三、功能使用

3.1 录制

录制模块功能接口调用顺序图:录制3.1.1初始化参数

使用录制功能,需要初始化AliyunIRecorder对象,初始化方法如下:

  1. AliyunIRecorder recorder = AliyunRecorderCreator.getRecorderInstance(Context context);//参数context为当前页面的上下文
  1. recorder.setDisplayView(GLSurfaceView glSurfaceView);//参数glsurfaceView为用户自己定义的GLSurfaceView及其子类对象

设置视频参数信息:

  1. MediaInfo mediaInfo = new MediaInfo();
  2. mediaInfo.setVideoWidth(TEST_VIDEO_WIDTH);
  3. mediaInfo.setVideoHeight(TEST_VIDEO_HEIGHT);
  4. mediaInfo.setAutoAdjustHWEncoder(true);//硬编时自适应宽高为16的倍数
  5. recorder.setMediaInfo(mediaInfo);

注意:录制时的分辨率是按照GLSurfaceView的实际宽高比,以设置的分辨率的宽为基准生成的,比如用户设置的分辨率是480x480,如果GLSurfaceView的宽高比为9:16,则录制的视频分辨率为480:854,如果想要保持480x480的分辨率,则GLSurfaceView的宽高比要保持1:1。硬编自适应开关如果设为true,则使用硬编(目前只支持硬编)时,如果宽/高不是16的倍数,则会强制转换为16的倍数,这样有一个影响就是传入的分辨率与实际输出分辨率会有一点出入。而如果设置为false,则如果宽/高不是16的倍数,在调用setMediaInfo时将抛出IllegalArgumentException。

3.1.2开始预览&结束预览开始预览如下方法:

  1. void setCamera(CameraType camera); //设置预览的摄像头,前置或者后置
  2. void startPreview();//请将这个函数写在Activity的onResume生命周期中,调用这个函数后将开始预览

结束预览如下方法:

  1. void stopPreview();//请将这个函数写在Activity的onPause生命周期中,调用这个函数后将结束预览

3.1.3开始录制&结束录制

在录制之前,确保已设置录制文件的输出路径,通过AliyunIRecorderoutputPath属性进行设置。

设置传感器角度值,这个必须设置,否则录制的视频角度是错的。

  1. void setRotation(int rotation);

开始录制接口:

  1. void startRecording();

结束录制接口:

  1. void stopRecording();

完成录制接口:

  1. void finishRecording(); //调用完成录制的接口会合并录制的多段视频

生成录制片段信息路径接口(录制的多段视频会序列化到一个json描述文件中,该接口可以返回描述文件的地址,用于编辑等操作)

  1. void finishRecordingForEdit(); //调用接口会生成一个配置文件的Uri

取消录制接口:

  1. void cancelRecording();

3.1.4拍照

  1. /**
  2. * 拍照(从GPU中抓取数据,可以包含特效)
  3. * @param needBitmap 是否需要生成Bitmap
  4. */
  5. void takePhoto(boolean needBitmap);
  6. /**
  7. * 使用系统的拍照接口(不能包含特效)
  8. * @param needBitmap 是否需要生成Bitmap
  9. */
  10. void takePicture(boolean needBitmap);

3.1.5录制变速

  1. void setRate(float rate);//录制变速,速率在0.5-2.0之间

3.1.6录制配乐

  1. void setMusic(String path,long startTime,long duration);//path:音乐文件路径(建议使用aac格式的音频) startTime:音乐开始时间 duration:音乐时长

3.1.7录制静音

  1. void setMute(boolean isMute);//是否需要录制静音,只对麦克风音频有效,请在录制开始前调用

3.1.8释放资源

Activity销毁时,我们也需要释放录制资源,在destroy中调用:

  1. void destroy();
  2. AliyunRecorderCreator.destroyRecorderInstance();

3.1.9回调接口

录制功能提供了一些回调接口:录制回调

  1. public interface RecordCallback {
  2. /**
  3. * 录制完毕的回调
  4. */
  5. void onComplete(boolean validClip,long clipDuration);
  6. /**
  7. * 合成完毕的回调
  8. * @param outputPath
  9. */
  10. void onFinish(String outputPath);
  11. /**
  12. * 录制进度回调
  13. * @param duration 当前已录制时间
  14. */
  15. void onProgress(long duration);
  16. /**
  17. * 达到最大时长
  18. */
  19. void onMaxDuration();
  20. /**
  21. * 录制错误回调
  22. * @param errorCode
  23. */
  24. void onError(int errorCode);
  25. /**
  26. * 录制初始化回调
  27. */
  28. void onInitReady();
  29. /**
  30. * 该回调后可以调用{@link AliyunIRecorder#startRecording()}接口
  31. */
  32. void onDrawReady();
  33. /**
  34. * 获取当前渲染帧并转成bitmap
  35. * @param bitmap
  36. */
  37. void onPictureBack(Bitmap bitmap);
  38. /**
  39. * 获取当前渲染帧数据
  40. * @param data
  41. */
  42. void onPictureDataBack(byte[] data);
  43. }

采集帧数据回调

  1. public interface OnFrameCallBack {
  2. /**
  3. * 采集帧回调,每采集一帧会通过该接口返回帧数据
  4. * @param bytes
  5. * @param width
  6. * @param height
  7. * @param info
  8. */
  9. void onFrameBack(byte[] bytes,int width,int height,Camera.CameraInfo info);
  10. /**
  11. * 选择预览分辨率的回调
  12. * @param supportedPreviewSizes
  13. * @return
  14. */
  15. Camera.Size onChoosePreviewSize(List<Camera.Size> supportedPreviewSizes, Camera.Size preferredPreviewSizeForVideo);
  16. /**
  17. * 摄像头开启失败
  18. */
  19. void openFailed();
  20. }

纹理ID回调

  1. public interface OnTextureIdCallBack {
  2. /**
  3. * 采集后,渲染处理前的纹理回调
  4. * @param textureId
  5. * @param textureWidth
  6. * @param textureHeight
  7. * @param matrix
  8. * @return
  9. */
  10. int onTextureIdBack(int textureId, int textureWidth, int textureHeight, float[] matrix);
  11. /**
  12. * 经过旋转、裁剪、缩放处理后的纹理回调
  13. * @param scaledId
  14. * @param textureWidth
  15. * @param textureHeight
  16. * @param matrix
  17. * @return
  18. */
  19. int onScaledIdBack(int scaledId,int textureWidth,int textureHeight,float[] matrix);
  20. }

3.1.10前置特效

3.1.10.1 特效操作

录制过程中可以添加效果,这些效果目前包含滤镜,水印,人脸动图三种类型。效果的基类是EffectBase类。三种类型具体对应如下类:EffectFilter—滤镜EffectPaster—贴图EffectImage —静态图片(水印)添加效果的接口:

  1. int addPaster(EffectBase effectBase); // 添加动图效果
  2. int addImage(EffectBase effectBase); // 添加水印效果
  3. int applyFilter(EffectBase effectBase);//添加滤镜效果,如果不需要滤镜,可以将参数置空传入

设置特效信息

  1. void setEffectView(float xRatio,float yRatio,float widthRatio,float heightRatio,EffectBase effectBase);//设置图片的信息(位置,尺寸),其中xRatio,yRatio表示其起始坐标在屏幕中的相对位置百分比,widthRatio,heightRatio表示图片宽高和屏幕宽高的比例值

设置人脸坐标接口:

  1. int setFaces(float[][] faces);//faces参数是包含多个face参数(含义参上)的二维数组,主要用于多人脸追踪,该接口可在采集帧数据回调中对帧数据做人脸识别,识别出人脸坐标后通过该接口传入到SDK内部。

移除效果的接口:

  1. void removePaster(EffectBase effectBase); //删除动图效果
  2. void removeImage(EffectBase effectBase); //删除水印效果

3.1.10.2 控制接口

  1. int switchCamera();//切换摄像头
  2. FlashType switchLight();//循环切换闪光灯模式
  3. boolean setLight(FlashType flashType);//切换为指定闪光灯模式
  4. void setBeautyLevel(int level);//设置美颜度
  5. void setBeautyStatus(boolean on);//设置美颜开/关,true:表示开,false:表示关
  6. void setRotation(int rotation);//设置视频旋转度
  7. void setVideoQuality(VideoQuality quality);//设置视频录制质量

3.1.10.3 其他接口

  1. int getBeautyLevel();//获取当前美颜级别
  2. int getCameraCount();//获取摄像头数量
  3. float getCurrentExposureCompensationRatio();//获取当前曝光度的比例值
  4. String version();//获取接口版本号

3.2 导入裁剪

裁剪模块功能接口调用顺序图:裁剪3.2.1 初始化参数

使用裁剪功能,需要初始化AliyunICrop对象,初始化方法如下:

  1. AliyunICrop crop = AliyunCropCreator.getCropInstance(Context context);//其中context为当前页面的上下文

需要设置裁剪参数:

  1. void setCropParam(CropParam param);

CropParam为裁剪参数类,如下:

  1. public class CropParam {
  2. private String videoPath; //源视频地址
  3. private String outputPath; //输出视频地址
  4. private int outputWidth; //输出宽
  5. private int outputHeight; //输出高
  6. private long startTime; //开始时间
  7. private long endTime; //结束时间
  8. private Rect cropRect; //裁剪区域(cropMode 为CropMode.LB时该参数无效)
  9. private int frameRate = 25; //视频帧率
  10. private int gop = 125; //关键帧间隔
  11. private VideoQuality quality = VideoQuality.HD; //视频质量 VideoQuality.SSD:极高 VideoQuality.HD:高 VideoQuality.SD:中 VideoQuality.LD:低 VideoQuality.PD:非常低 VideoQuality.EPD:极低
  12. private ScaleMode scaleMode; //裁剪模式 ScaleMode.LB:有黑边 ScaleMode.PS:无黑边
  13. private boolean isHWAutoSize = true; //这个变量如果为true(默认为true)则在硬编模式(目前仅支持硬编)下,如果宽/高不是16的倍数,则会自动矫正为16的倍数,这样会导致设置的宽/高与视频实际输出宽/高会有出入,表现出来的效果就是有黑边;如果false,在宽/高不是16的倍数时,则调用setCropParam时将抛出IllegalArgumentException,需要开发者自行处理该异常。
  14. private MediaType mMediaType = MediaType.ANY_VIDEO_TYPE;//媒体文件类型,默认为视频,该参数必须填写,目前支持视频:ANY_VIDEO_TYPE 图片:ANY_IMAGE_TYPE 和 音频:ANY_AUDIO_TYPE
  15. private int mFilmFillColorlColor = Color.BLACK;//填充模式时的填充底色
  16. }

3.2.2 开始裁剪

开始裁剪,接口如下:

  1. int startCrop();

3.2.3 取消裁剪

  1. void cancel();

3.2.4 释放资源

  1. void dispose();

3.2.5 获取视频时长

  1. long getVideoDuration(String videoPath) throws Exception;

3.2.6裁剪音频文件

  1. int startCropAudio(String inputPath,String outputPath,long startTime,long endTime);//inputPath: 音频文件地址 outputPath:裁剪输出地址 startTime:音频开始时间 endTime:音频结束时间

3.2.7 获取接口版本号

  1. String version();

四、上传

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

本文导读目录
本文导读目录
以上内容是否对您有帮助?