帮助文档

Help documentation

VCamera SDK Android用户手册

VCamera SDK Android版(短视频拍摄SDK)是炫一下(北京)科技有限公司官方推出的Android平台使用的软件开发工具包,为Android开发者提供简单、快捷的接口,帮助开发者实现Android平台上的短视频应用开发。

SDK提供视频录制、实时滤镜、后期强大的FFMPEG命令行支持,可实现水印、音量控制等诸多功能。

本文档面向所有使用该SDK的开发人员、测试人员,要求有一定的Android编程经验。

 

SDK下载地址

https://www.vitamio.org/VCamera_SDK_Android_1.1.0.zip

SDK功能说明

SDK提供拍摄录制、分段回删、实时滤镜、静态/动态水印、声音合成、本地图片、视频导入等功能。

 

SDK使用说明

1.1 运行环境

  • Android 4.0及以上的所有系统(注意Demo中使用了TextureView,要支持更低版本的Android请自行修改替换成SurfaceView)
  • 仅支持ARM v7的CPU

 

1.2 初始化

 VCamera.initialize(this);

建议在Application 的onCreate 中调用,参考Demo 中的VCameraDemoApplication

 

开发前准备

如果您新开发一个的项目,我建议您直接在Demo上进行修改,修改AndroidManifest.xml中的package即可。

1.1 添加SDK到App工程

  • 创建一个Android工程
  • 将vcameralibrary.jar添加到App工程的libs目录下
  • 将libvcamera.so添加到App工程的libs目录下的armeabi-v7a目录
  • 从Demo中拷贝需要的类、图片等资源到App工程下

 

1.2 权限声明

1.3 初始化SDK

//设置拍摄视频缓存路径
if (DeviceUtils.isZte()) {
	if(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_ DCIM).exists()) {
		VCamera.setVideoCachePath(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM) + "/Camera/VCameraDemo/");
	} else {
		VCamera.setVideoCachePath(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getPath().replace("/sdcard/", "/sdcard-ext/") +"/Camera/VCameraDemo/");
	}
} else {
	VCamera.setVideoCachePath(Environment.getExternalStoragePublicDir ectory(Environment.DIRECTORY_DCIM) + "/Camera/VCameraDemo/");
}
//开启log输出,ffmpeg输出到logcat
VCamera.setDebugMode(true);
//初始化拍摄SDK,必须
VCamera.initialize(this);

1.4 初始化MediaRecorder

mMediaRecorder = new MediaRecorder();
mMediaRecorder.setOnErrorListener(this);
if (NetworkUtils.isWifiAvailable(this)) {
	mMediaRecorder.setVideoEncodingBitRate(MediaRecorder.VIDEO_BITRAT E_MEDIUM);
	//WIFI下800码率
	}else{
	mMediaRecorder.setVideoEncodingBitRate(MediaRecorder.VIDEO_BITRATE_NORMAL);
	//3G、2G下600码率
}
String recordFile = VCamera.getVideoCachePath() + System.currentTimeMillis();
// 生成文件名;
mMediaRecorder.setOutputDirectory(recordFile);
// 设置输出路径
mMediaRecorder.setSurfaceView(mSurfaceView); 
mMediaRecorder.setCameraFilter(MediaRecorder.CAMERA_FILTER_NO);
//重置滤镜
mMediaRecorder.prepare();

1.5 后期处理

UtilityAdaptert提供FFmpegRun方法用于执行ffmpeg命令

 

 

API说明

1.1 拍摄

/** 视频码率400kbps */
public static final int VIDEO_BITRATE_LOW = 400; 
/** 视频码率600kbps */
public static final int VIDEO_BITRATE_NORMAL = 600;
/** 视频码率800kbps(默认) */
public static final int VIDEO_BITRATE_MEDIUM = 800;
/** 视频码率1024kbps */
public static final int VIDEO_BITRATE_HIGH = 1024;
/* 设置码率,参数范围在400	~	1024之间,建议WIFI下800K,其他情况600K	*/ 
public void setVideoEncodingBitRate(int bitRate)
/*	切换前后摄像头,默认后置摄像头	 */
public void switchCamera()
/* 切换闪光灯,默认关闭 */
public boolean toggleFlashMode()
/**
* 设置视频临时存储文件夹
*
*@param key 视频输出的名称,同目录下唯一,一般取系统当前时间
*@param path 文件夹路径
*@return 录制信息对象
*/
public MediaObject setOutputDirectory(String key, String path) 
/* 是否支持前置摄像头 */
public static boolean isSupportFrontCamera()
/* 拍摄完成,开始转码合成mp4临时文件 */
public boolean startEncoding()
/* 开始准备 */
public void prepare()
/* 开始录制,返回视频分块信息,与stop()成对使用 */
public MediaPart start()
/* 停止录制,与start()成对调用,可多次调用实现分段拍摄 */
public void stop()
/*	录制完成,释放资源	 */
public void release()

1.2 MediaRecorderFilter支持实时滤镜的录制类

/** 没有滤镜 */
public static final String CAMERA_FILTER_NO = "";
/** 黑白滤镜 */
public static final String CAMERA_FILTER_BLACKWHITE = "blackWhite"; 
/** 锐化滤镜 */
public static final String CAMERA_FILTER_SHRRPEN = "pro";
/** 老照片 */
public static final String CAMERA_FILTER_OLD_PHOTOS = "oldFilm";
/** 霓虹灯 */
public static final String CAMERA_FILTER_NEON_LIGHT = "edge";
/** 反色滤镜 */
public static final String CAMERA_FILTER_ANTICOLOR = "antiColor";
/** 穿越滤镜 */
public static final String CAMERA_FILTER_THROUGH = "radial";
/** 马赛克滤镜 */
public static final String CAMERA_FILTER_MOSAICS = "earlyBird";
/** 怀旧滤镜 */
public static final String CAMERA_FILTER_REMINISCENCE = "lomo";

1.3 FFMpegUtils FFmpeg工具类

/** 音量 100% -vol 100 */
public static final float AUDIO_VOLUME_HIGH = 1F;
/** 音量 66% */
public static final float AUDIO_VOLUME_MEDIUM = 0.66F; 
/** 音量 33% */
public static final float AUDIO_VOLUME_LOW = 0.33F; 
/** 音量 关闭 */
public static final int AUDIO_VOLUME_CLOSE = 0;
/**
* 视频截图
* 
* @param videoPath  视频路径
* @param outputPath 截图输出路径
* @param wh  截图画面尺寸,例如84x84 
* @param ss  截图起始时间
* @return
*/
public static boolean captureThumbnails(String videoPath, String outputPath, String wh, String ss)
/**
* 综合转码
* 
* @param mMediaObject 视频数据存储对象,涵主题、小部件和视频片段
* @param targetPath 目标路径
* @param videoWidth 视频宽度
* @param complexWatermark 是否合并主题(预览页主题和主题音乐)
* @return
*/
public static boolean videoTranscoding(MediaObject mMediaObject, String targetPath, int videoWidth, boolean complexWatermark) 
/**
* 图片转视频(用于图片导入)
*/
public static boolean convertImage2Video(MediaPart part)

1.4 UtilityAdapter 底层工具类

/**
* 执行ffmpeg命令
* 
* @param strtag 任务的唯一标识,如果标识为""或NULL,以阻塞方式运行,否则以
异步方式运行
* @param strcmd 命令行
* @return 返回执行结果
*/
public static native int FFmpegRun(String tag, String cmd); 
/** 获取当前转码完成时间 */
public static native int FFmpegVideoGetTransTime(int flag);
/** 获取当前转码完成时间 */
public static native int VideoGetMetadataRotate(String filename);

 

开发指南

1.1 拍摄流程图


上面是一般的拍摄流程,目前Demo只有手动拍摄(后续版本会补上本地导入),开发者可自行用ffmpeg命令行实现其他的功能和流程。

 

1.2 拍摄录制模式

SDK支持三种录制模式:

 

1.2.1 支持实时滤镜的录制模式(MediaRecorderFilter)

默认模式(也是秒拍当前使用的模式)输出yuv裸视频数据和pcm裸音频数据,如下流程图:

本模式下支持实时滤镜,能直接输出480x480的yuv数据,并且已经旋转好视频画面,无须额外裁剪。

 

1.2.2 普通录制模式(MediaRecorder)

与6.2.1类似,但是输出的是640x480的yuv数据,后期处理需要自己增加裁剪和旋转的命令,例如-vf "transpose=1[tran];[tran]crop=480:480:0:0"。

 

1.2.3 系统录制模式(MediaRecorderSystem).

待完善.

 

ffmpeg命令行

1.1 视频叠加水印(建议添加与视频大小一致并且透明的水印,如480x480)

// 单水印
ffmpeg -i in.mp4 watermark1.png -filter_complex "overlay=x=0:y=0" -f mp4 out.mp4
// 动态水印,2张图片间隔200毫秒
ffmpeg -i in.mp4 watermark1.png –i watermark2.png -filter_complex "overlay=x= 'if(eq(floor(mod(t*5,2)),0), 0, -500)':y=0, overlay=x= 'if(eq(floor(mod(t*5,2)),1), 0, -500)':y=0" -f mp4 out.mp4
//视频叠加gif
ffmpeg -y -i in.mp4 -i in.gif -filter_complex "overlay=0:0" -t 10 -acodec copy out.mp4

1.2 视频裁剪

// 裁剪0秒到10秒视频
ffmpeg -i in.mp4 -ss 0 -t 10 -vcodec copy -acodec copy out.mp4

1.3 格式转换

//yuv转mp4
ffmpeg -y -f rawvideo -pix_fmt yuv420p -s 480x480 -r 15 -i in.yuv -vcodec libx264 -profile:v baseline -preset ultrafast out.mp4
//静态图片转mp4
ffmpeg -y -loop 1 -f image2 -i Goddess.png -vcodec mpeg4 -r 15 -t 10 Goddess.mp4

1.4 其他

//加速视频
ffmpeg -i input.avi -vf "setpts=0.5*PTS" output.avi 
//放慢视频
ffmpeg -i input.avi -vf "setpts=2.0*PTS" output.avi
//删除视频文件的旋转信息
-metadata:s:v rotate=\"\"
 //提取视频的yuv和pcm数据
 ffmpeg -i in.mp4 -ss 0 -t 10 -vn -acodec pcm_s16le -f s16le -ar 44100
-ac 1 a.pcm -ss 0 -t 10 -an -vcodec rawvideo -f rawvideo -s 640x480 -pix_fmt nv21 a.yuv

※更多关于ffmpeg的用法请参考, www.ffmpeg.org

 

FAQ

  • SDK是否收费?

  • 个人免费,企业收费(商务sales@yixia.com,电话座机010-6482 8682)
  • 最终解释权

  • 最终解释权归炫一下(北京)科技有限公司所有。
  • so的包很大,能优化减少吗
  • 我们也意识到了这个问题,后续版本会进行裁剪。
  • 拍摄界面能和秒拍做成一样的吗?

  • 能。欢迎为用户提供一致的体验!但仅限于拍摄的相关界面。
  • 什么时候推出IOS版本的拍摄SDK?

  • 如果你已经在上线的产品中使用了Android版的拍摄上传SDK,可以联系我们申请IOS版的拍摄SDK试用
  • 有讨论群吗?

  • QQ群:281434005,申请加入写VCamera,欢迎加入!

 

 

© 2011-2013 Xuan Yi Xia Inc. All rights reserved