Android 录制视频添加时间水印
来源:互联网 发布:哪个软件上有原味 编辑:程序博客网 时间:2024/06/06 01:28
1.添加时间水印
录制视频时,在视频右下角添加时间水印,达到监控录像的效果,如下图:
实现步骤如下:
1.制作12张图片,分别是数字0-9,冒号和横折。首先用PS做成png24格式,最好是黑底白字(在代码中将黑色忽略)。
2.将上面制作好的12张png图片转成256色的bmp位图,可以使用windows自带的画图程序打开,然后另存为。
3.使用Bmp2c将第2步得到的256色bmp图片,转成c数组。
4.将第3步得到的c数组放到头文件tchip_digital_data.h里。
5.修改frameworks/av/media/libstagefright/CameraSource.cpp文件,在录制时,添加时间水印到每一个视频帧。
2.录制视频文件的容量和时间限制
录制视频需要分段保存,可以从系统源码考虑,看了以下一些代码:
- framework/av/media/libstagefright/MPEG4Writer.cpp
- package/apps/Camera/src/com/android/camera/actor/VideoActor.java
主要从MPEG4Writer.cpp中的kMax32BitFileSize 和入手,如下,修改单个文件最大容量为56M(0x3800000),发现利用系统Camera录像时,到达阀值后会提示“已达到大小上限”,并自动停止,保存已经录制的视频。
- static const int64_t kMax32BitFileSize = 0x3800000;//0x00ffffffffLL; // 2^32-1 : max FAT32
- static const int64_t kMax32BitDuration = 0x007fffffffLL;
然后追踪到VideoActor的处理。有一个思路,就是停止的时候,进行文件保存后立即重新启动录像。
- public void stopVideoRecordingAsync() { // TChip ZJ
- // for snapshot
- stopObjectTracking();
- mStopVideoRecording = true;
- Log.d(TAG, "stopVideoRecordingAsync() mMediaRecorderRecording=" + mMediaRecorderRecording
- + ", mRecorderBusy=" + mRecorderBusy
- + ", isVideoProcessing()" + isVideoProcessing()
- + ", mStopVideoRecording =" + mStopVideoRecording);
- mVideoContext.getZoomManager().changeZoomForQuality();
- mVideoContext.setSwipingEnabled(true);
- mHandler.removeMessages(UPDATE_RECORD_TIME);
- mVideoContext.getShutterManager().setVideoShutterMask(false);
- if (isVideoProcessing()) {
- return;
- }
- if (mRecorderBusy) { // return for recorder is busy.
- return;
- }
- mRecorderBusy = true;
- mRecordingView.hide();
- if (mMediaRecorderRecording) {
- mVideoContext.getShutterManager().setVideoShutterEnabled(false);
- if (mStoppingAction != STOP_RETURN_UNVALID && mCallFromOnPause != true) {
- // mVideoContext.showProgress(mVideoContext.getResources().getString(R.string.saving)); // TChip ZJ : 去掉保存UI
- }
- mVideoSavingTask = new SavingTask();
- mVideoSavingTask.start();
- } else {
- mRecorderBusy = false;
- releaseRecorder();
- if (mStoppingAction == STOP_RETURN_UNVALID) {
- doReturnToCaller(false);
- }
- }
- }
先吃饭了,明天再看实现的可行性以及效果(是否漏秒)。 继续追踪
看了下保存的逻辑,涉及以下两处源码:
packages/apps/Camera/src/com/android/camera/manager/MMProfileManager.javamediatek/frameworks/base/mmprofile/java/com/mediatek/mmprofile/MMProfileManager.java
然后从MMProfileManager定位到MMProfile:
mediatek/frameworks/base/mmprofile/java/com/mediatek/mmprofile/MMProfile.java
这个类比较简单,加载了JNI库,再追下去就到c了。
- public class MMProfile
- {
- static
- {
- System.loadLibrary("mmprofile_jni");
- }
- public static final int MMP_RootEvent = 1;
- // MMP_LogType
- public static final int MMProfileFlagStart = 1;
- public static final int MMProfileFlagEnd = 2;
- public static final int MMProfileFlagPulse = 4;
- public static final int MMProfileFlagEventSeparator = 8;
- public static final int MMProfileFlagSystrace = 0x80000000;
- public native static int MMProfileRegisterEvent(int parent, String name);
- public native static int MMProfileFindEvent(int parent, String name);
- public native static void MMProfileEnableEvent(int event, int enable);
- public native static void MMProfileEnableEventRecursive(int event, int enable);
- public native static int MMProfileQueryEnable(int event);
- public native static void MMProfileLog(int event, int type);
- public native static void MMProfileLogEx(int event, int type, int data1, int data2);
- public native static int MMProfileLogMetaString(int event, int type, String str);
- public native static int MMProfileLogMetaStringEx(int event, int type, int data1, int data2, String str);
- }
转载请注明出处:周木水的CSDN博客 http://blog.csdn.net/zhoumushui
3 2
- Android 录制视频添加时间水印
- Android录制视频添加水印
- Android视频添加时间水印
- 给GPUImage录制的视频添加水印
- Android 视频录制限制时间
- android 边录制视频边添加OSD
- Android录像时添加时间水印
- ffmpeg 视频添加水印
- Android视频编辑器(二)预览、录制视频加上水印和美白磨皮效果
- Android使用FFmpeg给图片视频添加水印
- Android-使用ffmpeg添加视频水印过慢问题
- android视频处理之动态时间水印效果
- android视频录制(调用系统视频录制)
- ffmpeg 视频添加水印 logo
- IOS视频添加水印功能
- GPUImage给视频添加水印
- Android 视频录制
- android视频录制
- 一个90后做游戏的女生自白
- ExtJs表格控件(三)----单元格编辑与提交修改
- Maven搭建Spring+Struts2+Hibernate项目详解
- 《Little Runner》(五)——怪物碰撞检测
- 【ORACLE】ASM磁盘组增删disk成员方法
- Android 录制视频添加时间水印
- Cake - ZOJ 3537 凸包+dp三角划分
- Hibernate持久化的理解
- 并查集详解
- IOS开发- UIScrollView
- 【hibernate框架】多对多双向关联(Annotation实现)
- C++“异常处理”
- java 线程同步实例
- 黑马程序员 -- IOS C语言 流程控制1