七牛短视频文档

开发准备

5. 开发准备

5.1 开发环境

5.2 设备以及系统要求

  • 系统要求:Android 4.3 (API 18) 及其以上

5.3 下载和导入 SDK

SDK 主要包含 demo 代码、sdk jar 包,以及 sdk 依赖的动态库文件,说明如下:

文件名称 功能 大小 备注
pldroid-shortvideo-x.y.z.jar SDK 库 552KB 必须依赖
libpldroid_shortvideo_core.so 短视频核心库 690KB 必须依赖
libpldroid_beauty.so 美颜模块 598KB 不使用内置美颜可以去掉
libpldroid_amix.so 混音模块 229KB 不使用混音功能可以去掉
libpldroid_encoder.so 软编拍摄模块 1.5MB 不使用软编拍摄功能可以去掉
libpldroid_crash.so 崩溃分析模块 82KB 不使用崩溃分析功能可以去掉
libQMedia.so 图片转场拼接模块 9.1MB 不使用图片转场拼接可以去掉
filters 内置滤镜缩略图 12.5MB 可以根据需求删减

5.4 修改 build.gradle

双击打开您的工程目录下的 build.gradle,(代码中的x.y.z为具体的版本号)确保已经添加了如下依赖,如下所示:

  1. dependencies {
  2. compile files('libs/pldroid-shortvideo-x.y.z.jar')
  3. compile 'com.qiniu:qiniu-android-sdk:8.4.3'
  4. }

5.5 添加相关权限

在 app/src/main 目录中的 AndroidManifest.xml 中增加如下 uses-permission 声明:

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

6. 快速开始

从 v3.1.0 版本开始,需要在 Application 中初始化 sdk:

  1. PLShortVideoEnv.init(getApplicationContext());

6.1 视频拍摄

6.1.1 创建录制对象

  1. PLShortVideoRecorder mShortVideoRecorder = new PLShortVideoRecorder();
  2. mShortVideoRecorder.setRecordStateListener(this);

6.1.2 配置采集参数

PLShortVideo 提供了丰富的自定义录制选项,可以通过创建以下对象进行配置:

  1. // 摄像头采集选项
  2. PLCameraSetting cameraSetting = new PLCameraSetting();
  3. cameraSetting.setCameraId(PLCameraSetting.CAMERA_FACING_ID.CAMERA_FACING_FRONT);
  4. cameraSetting.setCameraPreviewSizeRatio(PLCameraSetting.CAMERA_PREVIEW_SIZE_RATIO.RATIO_4_3);
  5. cameraSetting.setCameraPreviewSizeLevel(PLCameraSetting.CAMERA_PREVIEW_SIZE_LEVEL.PREVIEW_SIZE_LEVEL_480P);
  6.  
  7. // 麦克风采集选项
  8. PLMicrophoneSetting microphoneSetting = new PLMicrophoneSetting();
  9.  
  10. // 视频编码选项
  11. PLVideoEncodeSetting videoEncodeSetting = new PLVideoEncodeSetting();
  12. videoEncodeSetting.setEncodingSizeLevel(PLVideoEncodeSetting.VIDEO_ENCODING_SIZE_LEVEL.VIDEO_ENCODING_SIZE_LEVEL_480P_1); // 480x480
  13. videoEncodeSetting.setEncodingBitrate(1000*1024); // 1000kbps
  14. videoEncodeSetting.setEncodingFps(25);
  15. videoEncodeSetting.setHWCodecEnabled(true); // true:硬编 false:软编
  16.  
  17. // 音频编码选项
  18. PLAudioEncodeSetting audioEncodeSetting = new PLAudioEncodeSetting();
  19. audioEncodeSetting.setHWCodecEnabled(true); // true:硬编 false:软编
  20.  
  21. // 美颜选项
  22. PLFaceBeautySetting faceBeautySetting = new PLFaceBeautySetting(1.0f, 0.5f, 0.5f);
  23.  
  24. // 录制选项
  25. PLRecordSetting recordSetting = new PLRecordSetting();
  26. recordSetting.setMaxRecordDuration(10*1000); // 10s
  27. recordSetting.setVideoCacheDir("/sdcard");
  28. recordSetting.setVideoFilepath("/sdcard/record.mp4");
  29.  
  30. // 设置录制速度 (默认为 1.0)
  31. PLShortVideoRecorder.setRecordSpeed(1.0);

6.1.3 创建预览窗口

拍摄视频需要的预览窗口为 GLSurfaceView 或者其派生的类对象,可以配置在 XML 文件中,也可以动态创建。

6.1.4 配置录制参数

通过 prepare 把拍摄所选择的参数配置到 SDK 中:

  1. @Override
  2. protected void onCreate(Bundle savedInstanceState) {
  3. super.onCreate(savedInstanceState);
  4. mShortVideoRecorder.prepare(glSurfaceView, cameraSetting, microphoneSetting,
  5. videoEncodeSetting, audioEncodeSetting, faceBeautySetting, recordSetting);
  6. }

6.1.5 生命周期

请在 Activity 的各个生命周期的回调中,分别调用 PLShortVideoRecorder 对应的方法:

  1. @Override
  2. protected void onResume() {
  3. super.onResume();
  4. mShortVideoRecorder.resume();
  5. }
  6.  
  7. @Override
  8. protected void onPause() {
  9. super.onPause();
  10. mShortVideoRecorder.pause();
  11. }
  12.  
  13. @Override
  14. protected void onDestroy() {
  15. super.onDestroy();
  16. mShortVideoRecorder.destroy();
  17. }

6.1.6 断点拍摄和保存

基本的配置完成以后,就可以开始断点拍摄了。

  1. // 开始一段视频
  2. PLShortVideoRecorder.beginSection();
  3. // 结束一段视频
  4. PLShortVideoRecorder.endSection();
  5. // 回删上一段视频
  6. PLShortVideoRecorder.deleteLastSection();
  7. // 回删所有录制的视频
  8. PLShortVideoRecorder.deleteAllSections();
  9. // 合成和保存所有的视频片段
  10. PLShortVideoRecorder.concatSections();

6.1.7 添加背景音乐

可以通过如下接口添加背景音乐:

  1. // 设置 sdCard 上的音乐文件
  2. PLShortVideoRecorder.setMusicFile(String filePath);
  3. // 设置 Assets 下的音乐文件
  4. PLShortVideoRecorder.setMusicAsset(AssetFileDescriptor afd);
  5. // 设置音乐文件的播放起始位置
  6. PLShortVideoRecorder.setMusicPosition(int position);
  7. // 获取音乐文件当前的播放位置
  8. PLShortVideoRecorder.getMusicPosition();
  9. // 设置是否循环背景音乐
  10. PLShortVideoRecorder.setMusicLoop(boolean musicLoop);

需要注意的是,当添加完背景音乐之后,SDK 会自动把麦克风采集给关闭,从而默认使用背景音乐作为最终视频的音频。如果需要麦克风继续采集,那么只需通过设置 PLShortVideoRecorder.mute(false) 即可。

6.1.8 添加水印

PLShortVideoRecorder 支持在录制过程中添加水印,水印的位置是相对于预览分辨率的,可以通过 PLWatermarkSetting 设置水印参数:

  1. PLWatermarkSetting mWatermarkSetting = new PLWatermarkSetting();
  2. mWatermarkSetting.setResourceId(R.drawable.qiniu_logo);
  3. mWatermarkSetting.setPosition(0.01f, 0.75f);
  4. mWatermarkSetting.setAlpha(128);
  5. PLShortVideoRecorder.setWatermark(mWatermarkSetting);

6.1.9 保存草稿

可以将某次拍摄的所有片段与设置项保存为草稿并持久化保存,之后可以恢复:

  1. // 保存草稿
  2. PLShortVideoRecorder.saveToDraftBox("My Draft Title");
  3.  
  4. // 恢复草稿
  5. PLDraft draft = PLDraftBox.getInstance(this).getDraftByTag("My Draft Title");
  6. PLShortVideoRecorder.recoverFromDraft(draft);

6.2 屏幕录制

6.2.1 创建录制对象

  1. PLScreenRecorder mScreenRecorder = new PLScreenRecorder(this);
  2. mScreenRecorder.setRecordStateListener(this);

6.2.2 配置采集参数

PLShortVideo 提供了丰富的自定义录制选项,可以通过创建以下对象进行配置:

  1. // 屏幕采集选项
  2. public static final String SCREEN_RECORD_FILE_PATH = VIDEO_STORAGE_DIR + "/screen_record.mp4";
  3. DisplayMetrics metrics = getResources().getDisplayMetrics();
  4. int width = metrics.widthPixels;
  5. int height = metrics.heightPixels;
  6. int dpi = metrics.densityDpi;
  7. mScreenRecorder = new PLScreenRecorder();
  8. PLScreenRecorderSetting screenSetting = new PLScreenRecorderSetting();
  9. screenSetting.setRecordFile(SCREEN_RECORD_FILE_PATH)
  10. .setInputAudioEnabled(false)
  11. .setSize(width, height)
  12. .setDpi(dpi);
  13.  
  14. // 音频(麦克风/外部导入)参数信息
  15. PLMicrophoneSetting microphoneSetting = new PLMicrophoneSetting();

6.2.3 配置录制参数

通过 prepare 把屏幕录制所选择的参数配置到 SDK 中:

  1. mScreenRecorder.prepare(screenSetting, microphoneSetting);

6.2.4 申请屏幕录制权限

屏幕录制需要得到用户授权,通过下面接口申请用户权限:

  1. mScreenRecorder.requestScreenRecord();

调用该接口后,系统会自动弹出申请权限对话框,用户的操作结果会通过 onActivityResult 系统回调接口返回:

  1. @Override
  2. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  3. if (requestCode == PLScreenRecorder.REQUEST_CODE) {
  4. if (data == null) {
  5. String tip = "录屏申请启动失败!";
  6. mScreenRecorder.stop();
  7. mScreenRecorder = null;
  8. return;
  9. }
  10.  
  11. mScreenRecorder.onActivityResult(requestCode, resultCode, data);
  12. }
  13. }

6.2.5 开始录制

用户授权后且录制状态为 Ready 后可通过 start() 方法开始屏幕录制:

  1. public void onReady() {
  2. mScreenRecorder.start();
  3. }

6.2.6 结束录制

通过下面接口结束屏幕录制:

  1. mScreenRecorder.stop();

6.2.7 Android 10 适配

请在 AndroidManifest.xml 中添加此项 Service

  1. <service
  2. android:name="com.qiniu.pili.droid.streaming.screen.ScreenRecordService"
  3. android:enabled="true"
  4. android:foregroundServiceType="mediaProjection" />

并声明前台服务的权限

  1. <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

 

 
0.058300s