Android 录制视频添加时间水印

本文介绍了在录制视频时添加时间水印的方法,包括制作图片、转换格式和修改CameraSource.cpp文件。同时讨论了视频文件容量限制的解决方案,并提及了作者提供的针对Android开发的全套学习资料,旨在帮助工程师系统化提升技能。
摘要由CSDN通过智能技术生成

录制视频时,在视频右下角添加时间水印,达到监控录像的效果,如下图:

实现思路如下:

1.制作12张图片,分别是数字0-9,冒号和横折。首先用PS做成png24格式,最好是黑底白字(在代码中将黑色忽略)。

2.将上面制作好的12张png图片转成256色的bmp位图,可以使用windows自带的画图程序打开,然后另存为。

3.将第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录像时,到达阀值后会提示“已达到大小上限”,并自动停止,保存已经录制的视频。

[c] view plaincopy

  1. static const int64_t kMax32BitFileSize = 0x3800000;//0x00ffffffffLL; // 2^32-1 : max FAT32

  2. static const int64_t kMax32BitDuration = 0x007fffffffLL;

然后追踪到VideoActor的处理。有一个思路,就是停止的时候,进行文件保存后立即重新启动录像。

[java] view plaincopy

  1. public void stopVideoRecordingAsync() { // TChip ZJ

  2. // for snapshot

  3. stopObjectTracking();

  4. mStopVideoRecording = true;

  5. Log.d(TAG, “stopVideoRecordingAsync() mMediaRecorderRecording=” + mMediaRecorderRecording

  6. + “, mRecorderBusy=” + mRecorderBusy

  7. + “, isVideoProcessing()” + isVideoProcessing()

  8. + “, mStopVideoRecording =” + mStopVideoRecording);

  9. mVideoContext.getZoomManager().changeZoomForQuality();

  10. mVideoContext.setSwipingEnabled(true);

  11. mHandler.removeMessages(UPDATE_RECORD_TIME);

  12. mVideoContext.getShutterManager().setVideoShutterMask(false);

  13. if (isVideoProcessing()) {

  14. return;

  15. }

  16. if (mRecorderBusy) { // return for recorder is busy.

  17. return;

  18. }

  19. mRecorderBusy = true;

  20. mRecordingView.hide();

  21. if (mMediaRecorderRecording) {

  22. mVideoContext.getShutterManager().setVideoShutterEnabled(false);

  23. if (mStoppingAction != STOP_RETURN_UNVALID && mCallFromOnPause != true) {

  24. // mVideoContext.showProgress(mVideoContext.getResources().getString(R.string.saving)); // TChip ZJ : 去掉保存UI

  25. }

  26. mVideoSavingTask = new SavingTask();

  27. mVideoSavingTask.start();

  28. else {

  29. mRecorderBusy = false;

  30. releaseRecorder();

  31. if (mStoppingAction == STOP_RETURN_UNVALID) {

  32. doReturnToCaller(false);

  33. }

  34. }

  35. }

先吃饭了,明天再看实现的可行性以及效果(是否漏秒)。

继续追踪

看了下保存的逻辑,涉及以下两处源码:

packages/apps/Camera/src/com/android/camera/manager/MMProfileManager.java

mediatek/frameworks/base/mmprofile/java/com/mediatek/mmprofile/MMProfileManager.java

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

95%以上Android开发知识点,真正体系化!**

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

  • 15
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值