拍摄器 UISDK 使用文档
采用源码接入和 demo 查看 可前往 https://github.com/cosmos33/MMVideoSDK-Android
1. 接入前准备
1.1. 注册
注册应用
开通短视频服务
1.2. 工程配置
- 权限配置
接入SDK需要如下权限,将如下代码copy到主app的AndroidManifest.xml对应位置
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
最小支持版本
4.4 API19
添加工程依赖
implementation 'com.cosmos.mediax:recorderuisdk:2.2.8'
- so架构
SDK目前只提供了armeabi-v7a 与armeabi 架构,请在app/build.gradle文件中配置如下代码。在android/defaultConfig/结构下添加
ndk {
abiFilters "armeabi-v7a","armeabi"
}
- 混淆配置
# mmfile
-keep class com.cosmos.mmfile.**{*;}
# 保留本地native方法不被混淆
-keepclasseswithmembernames class * {
native <methods>;
}
-keep class com.core.glcore.util.** {*;}
-keep class com.momocv.** {*;}
-keep class com.imomo.momo.mediaencoder.** {*;}
-keep class com.imomo.momo.mediaencoder.MediaEncoder{*;}
-keep class com.imomo.momo.mediamuxer.** {*;}
-keep class com.cosmos.mdlog.** {*;}
-keep class com.immomo.moment.mediautils.VideoDataRetrieverBySoft {*;}
-keep class com.immomo.moment.mediautils.YuvEditor {*;}
-keep class com.immomo.moment.mediautils.AudioMixerNative {*;}
-keep class com.immomo.moment.mediautils.MP4Fast {*;}
-keep class com.immomo.moment.mediautils.AudioResampleUtils {*;}
-keep class com.immomo.moment.mediautils.AudioSpeedControlPlayer {*;}
-keep interface com.immomo.moment.mediautils.AudioSpeedControlPlayer$* {*;}
-keep interface com.immomo.moment.mediautils.VideoDataRetrieverBySoft$* {*;}
-keep class com.immomo.moment.mediautils.VideoDataRetrieverBySoft$* {*;}
-keep class * extends com.immomo.moment.mediautils.MediaUtils {*;}
-keep class com.immomo.moment.mediautils.FFVideoDecoder* {*;}
-keep class com.momoap.pitchshift.** {*;}
-keep class com.immomo.doki.media.entity.** {*;}
-keep class com.momo.mcamera.** {*;}
-dontwarn com.momo.mcamera.mask.**
-keep class com.google.gson.** {*;}
2. 使用
2.1. 初始化
调用 RecordUISDK init 方法
public static void init(Application context, String appId, IRecordResourceGetter recordResourceGetter)
其中需要实现 IRecordResourceGetter 来定制自己的资源,可定制 滤镜资源、美妆资源、静态贴纸资源、动态贴纸资源、拍摄器道具资源、配乐资源等。
2.2. 去拍摄
VideoRecordAndEditActivity.startRecord(this, new MMRecorderParams.Builder().build(), requestCode);
MMRecorderParams api 介绍
- 设置最终视频输出地址
/**
* 设置最终视频输出地址
*
* @param videoOutputPath
* @return
*/
public Builder setVideoOutputPath(String videoOutputPath)
- 设置最终照片输出地址
/**
* 设置最终照片输出地址
*
* @param photoOutputPath
* @return
*/
public Builder setPhotoOutputPath(String photoOutputPath)
- 设置摄像头类型,前置或者后置
/**
* 设置摄像头类型,前置或者后置
*
* @param cameraType
* @return
*/
public Builder setCameraType(@CameraType int cameraType)
- 设置分辨率
/**
* 设置分辨率
*
* @param resolutionMode
* @return
*/
public Builder setResolutionMode(@Resolution int resolutionMode)
- 设置码率
/**
* 设置帧率
*
* @param frameRate
* @return
*/
public Builder setFrameRate(int frameRate)
- 最小录制时长
/**
* 最小录制时长
*
* @param minDuration
* @return
*/
public Builder setMinDuration(long minDuration)
- 最大录制时长
/**
* 最大录制时长
*
* @param maxDuration
* @return
*/
public Builder setMaxDuration(long maxDuration)
- 视频比例
/**
* 视频比例
*
* @param videoRatio
* @return
*/
public Builder setVideoRatio(@VideoRatio int videoRatio)
- 需要使用的美颜版本
/**
* 需要使用的美颜版本
*
* @param beautyFaceVersion
* @return
*/
public Builder setBeautyFaceVersion(int beautyFaceVersion)
- 录制视频时是否录制音频
/**
* 录制视频时是否录制音频
*
* @param enableAudioRecorder
* @return
*/
public Builder setEnableAudioRecorder(boolean enableAudioRecorder)
- 录制视频时是否录制特效
/**
* 录制视频时是否录制特效
*
* @param enableSourceVideoRecord
* @return
*/
public Builder setEnableSourceVideoRecord(boolean enableSourceVideoRecord)
- 进入录制页面时默认 tab
/**
* 进入录制页面时默认 tab
*
* @param gotoTab
* @return
*/
public Builder setGotoTab(@RecordTab int gotoTab)
- 操作完成后 goto 信息,可以配置为跳转其他页面或者 onActivityResult 返回
/**
* 操作完成后 goto 信息,可以配置为跳转其他页面或者 onActivityResult 返回
*
* @param finishGotoInfo
* @return
*/
public Builder setFinishGotoInfo(FinishGotoInfo finishGotoInfo)
- 是否使用根据人脸区域自动调光
/**
* 是否使用根据人脸区域自动调光
*/
public Builder setEnableFaceAutoMetering(boolean enableFaceAutoMetering)
- 拍照的时候是否使用大分辨率
/**
* 拍照的时候是否使用大分辨率
*/
public Builder setEnableTakePhotoMaxResolution(boolean enableTakePhotoMaxResolutionMode)
2.3. 去选择媒体并编辑
VideoRecordAndEditActivity.startChooseMediaToEdit(this,new MMChooseMediaParams.Builder().build(),requestCode);
MMChooseMediaParams api 介绍
- 单选或者多选
/**
* 单选或者多选
* @param chooseMode
* @return
*/
public Builder setChooseMode(@EditChooseMode int chooseMode)
- 操作完成后 goto 信息,可以配置为跳转其他页面或者 onActivityResult 返回
/**
* 操作完成后 goto 信息,可以配置为跳转其他页面或者 onActivityResult 返回
* @param finishGotoInfo
* @return
*/
public Builder setFinishGotoInfo(FinishGotoInfo finishGotoInfo)
- 设置需要加入选择的媒体类型,相册会跟据以下三种类型,去媒体库中拿相应类型的数据
/**
* 相册会跟据以下三种类型,去媒体库中拿相应类型的数据
* @param mediaChooseType
* @return
*/
public Builder setMediaChooseType(@EditChooseMediaType int mediaChooseType)
- 选择本地图片时是否显示相机图标
/**
* 选择本地图片时是否显示相机图标
* @param showCameraIcon
* @return
*/
public Builder setShowCameraIcon(boolean showCameraIcon)
- 选择本地媒体时显示哪些 tab
/**
* 选择本地媒体时显示哪些 tab
* @param showAlbumTabs
* @return
*/
public Builder setShowAlbumTabs(@ShowMediaTabType int showAlbumTabs)
- 在编辑页面点击相机 icon 时的参数配置
/**
* 在编辑页面点击相机 icon 时的参数配置
* @param recordParams
* @return
*/
public Builder setGotoRecordParams(MMRecorderParams recordParams)
2.4. 获得操作完成后的媒体数据:
如果 FinishGotoInfo 配置的了 gotoActivityName 那么将跳转这个 Activity 并在 Intent 中带入处理完成后的信息,如果没有那么将在 onActivityResult 中返回。
获取图片数据:
if (data.hasExtra(MediaConstants.EXTRA_KEY_IMAGE_DATA)) {
List<Photo> photos = (List<Photo>) data.getSerializableExtra(MediaConstants.EXTRA_KEY_IMAGE_DATA);
if(photos!=null&&photos.size()>0){
Photo photo = photos.get(0);
Toaster.show(TextUtils.isEmpty(photo.tempPath)? photo.path: photo.tempPath);
}
}
获取视频数据:
if(data.hasExtra(MediaConstants.EXTRA_KEY_VIDEO_DATA)){
Video video = data.getParcelableExtra(MediaConstants.EXTRA_KEY_VIDEO_DATA);
Toaster.show(video.path);
}