Android 录制和编辑 SDK 开发指南

1 阅读对象

本文档为技术文档,需要阅读者:

具有基本的Android开发能力,准备接入网易视频云或正在接入网易视频云。

##标识管理

产品发布前,需要在网易云控制台填写应用的标识信息,以确保短视频SDK不被盗用。

填写方法:

pic

2 文档概述

2.1 录制

针对Android设备,采集摄像头和麦克风的音视频数据,并进行H.264和AAC编码,最终录制为MP4文件,可以进行二次开发。给开发者提供一套编码参数集合,以便灵活调节相应的分辨率和码率。

2.2 音视频编辑

针对用户输入的MP4格式文件,进行诸如:文件拼接、视频分辨率裁剪和缩放、添加水印和动态贴图、混音、音量调节、文件时长裁剪等操作。给开发者提供一套完整灵活的文件编辑参数集合,以便灵活的组合各种编辑参数实现丰富多彩的文件编辑功能。并且提供了对文件在指定时间截图的功能。

2.3 图片编辑

针对用户输入的Bitmap图片,进行诸如:裁剪、添加水印、滤镜以及添加马赛克等操作。给开发者提供一套完整灵活的文件编辑参数集合,以便灵活的组合各种编辑参数实现丰富多彩的文件编辑功能。

3 功能特性

3.1 录制SDK

3.2 音视频编辑SDK

图片编辑SDK

4 开发准备

4.1 开发环境配置

4.2 设备以及系统

设备要求:搭载Android系统的设备,支持的CPU架构:armv7、arm64 系统要求:Android 4.3(API 18)及其以上

4.3 代码混淆配置

为了保证正常使用SDK,请在proguard-project.txt文件中添加以下代码:

-keep class com.netease.vcloud.** {*;}  
-keep class com.netease.transcoding.** {*;}

5 集成SDK

本部分按照用户直接在自己的项目中集成SDK的方式进行介绍,如果用户参考Demo进行SDK接入,那么可查看LiveStreamingActivity、ShortVideoProcessFragment、ImageEditActivity 来获得更多的实现细节。

5.1 配置AndroidManifest.xml

用户在集成录制和编辑SDK时,由于录制功能需要摄像头、录音、读写SD卡、获取设备信息等权限。在AndroidManifest.xml中加入以下配置:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.netease.transcoding.demo" >

    <!-- 声明sdk版本 -->
    <uses-sdk
        android:minSdkVersion="18"
        android:targetSdkVersion="22" />

    <!-- 权限声明 -->   
    <!-- 允许挂载和反挂载文件系统 -->   
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />   
    <!-- 允许程序向外部存储设备写数据 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <!-- 允许程序写音频数据 -->
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <!-- 允许程序使用PowerManager WakeLocks以防止处理器休眠或者屏幕锁屏 -->
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <!-- 允许程序获取Wifi网络状态信息 -->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <!-- 允许程序使用设备的camera -->
    <uses-permission android:name="android.permission.CAMERA" />
    <!-- 允许程序使用闪光灯 -->
    <uses-permission android:name="android.permission.FLASHLIGHT" />
    <!-- 允许程序获得设备信息 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />

    <!-- 允许程序向外部存储设备读数据 -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <!-- 允许程序向外部存储设备写数据 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <!-- 声明程序使用camera和自动对焦功能 -->
    <uses-feature android:name="android.hardware.camera"/>
    <uses-feature android:name="android.hardware.camera.autofocus"/>
    <!-- 声明程序使用OpenGL ES 2.0 -->
    <uses-feature android:glEsVersion="0x00020000" android:required="true" />


</manifest>

5.2 导入SDK包

解压后 SDK 包的 libs 文件夹中,包含了jar 文件,so 库文件以及asset文件夹下的滤镜资源,文件列表如下:

libs
├── asset(滤镜图片资源)
│
├── armeabi-v7a
│    ├── libtranscode.so
│    ├── libvideoeffect.so
├── arm64-v8a
│    ├── libtranscode.so
│    ├── libvideoeffect.so
│ 
├── Transcode.jar (转码库)
├── VideoEffect.jar (滤镜库)

6 功能使用和API接口介绍

6.1 录制SDK功能使用和API接口介绍

6.1.1 录制参数设置

录制参数设置在类LiveStreamingActivity的方法onCreate()中实现,包括:

录制相关API接口包括:

6.1.2 摄像头参数设置

摄像头参数设置包括:

提供的接口API包括:

6.1.3 滤镜

滤镜设置包括各种滤镜模式之间的切换。

提供的接口API包括:

6.1.4 伴音

伴音功能实现了在麦克风采集的声音中混合MP3文件声音的功能,设置包括:

提供的接口API包括:

6.1.5 摄像头缩放(Zoom)

摄像头缩放(Zoom)功能提供的API包括:

6.1.6 闪光灯操作(Flash)

闪光灯操作(Flash)功能提供的API包括:

6.1.7 自动和手动对焦

自动和手动对焦功能提供的API包括:

6.1.8 摄像头的曝光强度调节

摄像头的曝光强度调节API包括:

6.1.9 日志管理

日志管理提供的API接口包括:

6.1.11 其他功能和API接口

6.2 音视频编辑SDK功能使用和API接口介绍

6.2.1 编辑操作

编辑操作提供的API接口包括:

6.2.2 编辑操作的参数配置

由于编辑操作的接口API方法的参数较多,具体如下:

6.2.3 截图操作

截图操作提供的API接口包括:

6.2.4 截图操作的参数配置

由于截图操作的接口API方法的参数具体如下:

6.2.5 其他功能和API接口

6.3 本地MP4文件播放SDK功能使用和API接口介绍

API接口包括:

6.4 图片编辑SDK功能使用和API接口介绍

编辑操作提供的API接口包括:

7 SDK回调消息

7.1 录制SDK回调消息

LiveStreamingSDK通过消息回调的方式传递SDK到应用层的各种状态消息,包括:开始/停止录制完毕,切换摄像头完毕等等,具体如下:

int  MSG_INIT_RECORD_VERIFY_ERROR = -1; //SDK校验APPKey不通过  
int  MSG_START_RECORD_ERROR = 1; //开始录制出错  
int  MSG_START_CAMERA_ERROR = 2; //开启相机失败  
int  MSG_START_AUDIO_ERROR = 3; //开启录音失败
int  MSG_START_PREVIEW_FINISHED = 4; //开启相机已完成  
int  MSG_START_RECORD_FINISHED = 5; //开启录制已完成  
int  MSG_STOP_RECORD_FINISHED = 6; //停止录制已完成  
int  MSG_SWITCH_CAMERA_FINISHED = 7; //摄像头切换已完成  
int  MSG_CAMERA_NOT_SUPPORT_FLASH = 8;//不支持闪光灯  
int  MSG_START_CAPTURE_FINISHED = 9; //截图完成

同时,需要开发者继承如下接口,处理SDK抛出的事件。

handleMessage(int msg, Object object);

7.2 音视频编辑SDK回调消息

public static final int SUCCESS = 0;  //成功  
public static final int VERIFY_FAILED = 1; //SDK校验APPKey不通过  
public static final int SNAPSHOT_PARA_NULL = 2; //截图参数为空    
public static final int SNAPSHOT_FILE_NOT_EXIST = 3; //截图原始文件不存在     
public static final int SNAPSHOT_FILE_NOT_SUPPORT = 4; //截图原始文件不支持       

public static final int TRAN_PARA_NULL = 5;//转码参数为空   
public static final int TRAN_OUT_FILE_CREATE_ERROR = 6; //转码目标文件生成失败    
public static final int TRAN_PRE_IS_NOT_FINISH = 7;//正在转码中    
public static final int TRAN_SOURCE_FILE_PARSE_ERROR = 8; //转码原始文件不支持     
public static final int TRAN_SOURCE_NO_VIDEO_OR_AUDIO = 9;//转码原始文件没有视频或音频        
public static final int TRAN_MIX_FILE_PARSE_ERROR = 10;//混音文件不支持    
public static final int TRAN_PROCESS_ERROR = 11;//转码出错

7.3 图片编辑SDK消息

public static final int SUCCESS = 0;  //成功  
public static final int VERIFY_FAILED = 1; //SDK校验APPKey不通过  
public static final int UNINITIALIZED = 2; //未初始化    
public static final int ILLEGAL_PARAMETERS = 3; //参数错误