Android版本开发接入文档
一、概述
百度云短视频创作专注移动端视音频场景研发,提供端到端的一站式视音频技术解决方案,不限于采集、录制、合成、上传、存储、分发,极大降低客户接入音视频产品的技术门槛。
1.1 注意事项
运行环境
- Android 4.1系统,API Level 16以上
二、快速接入
请先通过工单申请获取邀测资格,通过审批后会有专人联系您提供SDK源码包。
解压SDK压缩包后将aar包放入项目libs目录:
- 在项目build.gradle添加库依赖:
1repositories {
2 flatDir {
3 dirs 'libs'
4 }
5}
6
7
8dependencies {
9
10 api(name: 'multimedia-processor-release', ext: 'aar')
11 api(name: 'aiphoto-v1.1', ext: 'aar')
12
13
14 api 'com.baidu.minivideo:transcoder-sdk:1.0.2.156'
15 api 'com.baidu.minivideo:core-armv5:1.0.2.156'
16 api 'com.baidu.minivideo:core-armv7a:1.0.2.156'
17 api 'com.google.code.gson:gson:2.8.5'
18 api 'com.googlecode.mp4parser:isoparser:1.0.1'
19 api 'com.googlecode.plist:dd-plist:1.16'
20}
- 在使用拍摄器SDK,需要申请产品对应的授权文件,如无授权,产品无法正常使用。
- 申请成功后,会得到一个licenseID和对应授权文件下载地址,用户下载成功后,需要手动添加到项目工程中
注意:授权文件后缀名为.license。
三、接口使用说明
3.1 录制设置
- 录制的相关接口是在com.baidu.ugc.record.RecordManager类里,包括录制、美颜、贴纸和滤镜
3.1.1 初始化接口
设置预览画面
1void setGLSurfaceView(GLSurfaceView view)
初始化录像机
1void init(RecordManager.ICamera cameraManager, int cameraFrameRate, int videoBitrate, boolean isCameraFront, java.lang.String outputDir, java.lang.String arDataPath)
数据加载
1void loadData(RecordManager.OnDataLoadCallback listener)
注意:在实例化new RecordManager(this, appid)需要传人appid即用户申请的licenseID,若未申请授权,请参考快速接入
3.1.2 生命周期方法
一般的生命周期为:初始化 -> resume -> pause -> destroy
停止预览,一般在在Activity的onStop时调用
1void pause()
开始预览,一般在Activity的onStart时调用
1void resume()
对象销毁,销毁后需要重新创建对象
1void destroy()
3.1.3 相机设置
获取到摄像头的状态
1boolean isFrontCamera()
相机的当前摄像头是否正在处于预览中
1boolean isPreviewing()
设置前后摄像头
1protected void setCameraFace(boolean front)
相机尺寸,默认720P,如果摄像头不支持,那么会取相近比例的尺寸
1void setCameraSize(int w, int h)
相机切换前后摄像头
1void switchCamera()
3.1.4 录制与停止录制
获取当前录制视频的完整路径
1String getVideoAbsoluteFile()
是否为正在录制
1boolean isRecording()
设定视频输出目录
1boolean setVideoPath(java.lang.String videoFileDir)
开始录制
1boolean startRecording()
停止录制
1boolean stopRecording()
3.2 美颜设置
美颜设置接口,代码示例如下:
调整美颜程度
1void setBeauty(float v) //参数0.0f不美颜
调整美白程度
1void setBeautyWhite(float value)
调整磨皮程度
1void setBeautyBlure(float value)
调整大眼程度
1void setEnlargeEye(float value)
调整瘦脸程度
1void setCheekThin(float value)
- 注意:使用高级美颜时,需要申请对应权限,免费版本不支持此功能
3.3 滤镜设置
设置滤镜
1void setFilter(Filter filter)
滤镜参数
1void setFilterLevel(float v)
3.4 贴纸设置
设置贴纸道具
1void setStickerEffect(Sticker sticker, java.lang.String tabName)
下载贴纸
- 【v3.0】版本后,贴纸采用后下载方式使用,开通license的同时可以在Console购买或选择贴纸信息;
- 使用贴纸涉及两个接口,获取贴纸列表信息、贴纸文件下载使用。
一、获取贴纸列表信息,即用于产品贴纸展示,建议开发者提前获取贴纸列表,可缓存,减少用户等待。下方获取贴纸列表数据实例代码:
1:调用加载贴纸列表数据
1相关类:com.baidu.smartminivideo.capture.sticker.helper.LoadSticker
2
3
4public void loadStickerDatas() {
5 String appId = Config.LICENSE_APPID;
6 String sdkVersion = Config.sdkVersion;
7 DownStickerHelper loadStickerHelper = new DownStickerHelper(SmartminivideoApplication.getContext(),
8 appId, sdkVersion);
9 loadStickerHelper.loadStickerList(this);
10}
2:在第一步调用之后,会回调两个方法,将贴纸数据字符串传输回来
1成功回调:
2@Override
3public void onListSuccess(String stickerList) {}
4
5
6失败回调:
7@Override
8public void onFail(String msg) {}
二、贴纸文件下载使用。即用户选择某个贴纸后,下载贴纸并且加载使用。
注:部分贴纸还会涉及模型下载,见下方示例代码:
1:调用加载单个贴纸数据
1相关类:com.baidu.smartminivideo.capture.sticker.helper.LoadSticker
2
3public void loadOneSticker(String faceId) {
4 String appId = Config.LICENSE_APPID;
5 String sdkVersion = Config.sdkVersion;
6 DownStickerHelper loadStickerHelper = new DownStickerHelper(SmartminivideoApplication.getContext(),
7 appId, sdkVersion);
8 loadStickerHelper.loadOneStickerList(Long.parseLong(faceId), this);
9}
2:在第一步调用之后,会回调两个方法,将单个贴纸数据字符串传输回来
1成功回调:
2@Override
3public void onOneSuccess(String sticker) {}
4
5失败回调:
6@Override
7public void onFail(String msg) {}
3:在第3步回调之后,若成功获取单个贴纸数据,则将继续下载贴纸文件,见下方实例代码:
1具体可查看demo工程中相关类:
2com.baidu.smartminivideo.capture.sticker.StickerAdapter
3com.baidu.smartminivideo.capture.beautify.StickerDownloadManager
4
5
6StickerDownloadManager.download(item, new StickerDownloadManager.OnStickerDownloadCallback<FuFaceItem>() {
7 @Override
8 public void onStarted(FuFaceItem tag) {
9 holder.startLoadingAnim();
10 }
11
12 @Override
13 public void onProgress(FuFaceItem tag, long finished, long total, int progress) {
14
15 }
16
17 @Override
18 public void onCompleted(FuFaceItem faceItem) {
19 if (mLastClickIndex != position) {
20 notifyDataSetChanged();
21 return;
22 }
23 mSelectedIndex = position;
24 notifyDataSetChanged();
25 if (mListener != null) {
26 mListener.onSelectSticker(item, faceItem.getFilePath());
27 }
28 }
29
30 @Override
31 public void onFailed(FuFaceItem faceItem, int what, int ext, String msg) {
32 Log.e("StickerAdapter", "onFailed:" + faceItem.name
33 + ", what:" + what + ", ext:" + ext + ", msg:" + msg);
34 notifyDataSetChanged();
35 }
36 });
37}