我们经常在使用视频录制时,动态添加像监控画面一样的精确到秒的时间信息,需要记录当前时间到视频中去,这样的需求很常见。今天使用Java代码来实现,通常来说这种用C/C++更高效。如使用FFmpeg的filter功能可以很快实现。下图是网上找的一张监控视频画面。那么我们在录制视频时实现类似功能:
在使用Java代码实现时,需要使用视频录制(MediaRecorder)类,状态周期图如下:
最终效果视频:
class="video_iframe" data-vidtype="2" allowfullscreen="" frameborder="0" data-ratio="0.5666666666666667" data-w="272" data-src="http://v.qq.com/iframe/player.html?vid=z1334nqtq77&width=638&height=478.5&auto=0" style="display: none; width: 638px !important; height: 478.5px !important;" width="638" height="478.5" data-vh="478.5" data-vw="638"/>
下面是实现的一些步骤
1、使用MediaRecord录制一段视频。
private void startRecorder() {
if (mState == State.RECORDE) {
return;
}
if (mState == State.COMPLETE) {
mCamera.startPreview();//重拍启动预览,这里主要启动对焦程序,如果不启动,则manager不知道已经启动,在stop的时候不会关闭预览
}
// 关闭预览并释放资源
Camera c = mCamera;
c.unlock();
mRecorder = new MediaRecorder();
mRecorder.reset();
mRecorder.setCamera(c);
mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mRecorder.setProfile(CamcorderProfile.get(mQuality));
//设置选择角度,顺时针方向,因为默认是逆向度的,这样图像就是正常显示了,这里设置的是观看保存后的视频的角度
mRecorder.setOrientationHint(90);
videoCreateTime = System.currentTimeMillis();
Log.d(TAG, "video cache path:" + fileCachePath);
try {
File file = new File(fileCachePath);
if (!file.getParentFile().exists()) file.getParentFile().mkdirs();
if (file.exists()) file.delete();
file.createNewFile();
mRecorder.setOutputFile(file.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
}
try {