desc:录像每半个小时自动分文件存储

main
xiaowusky 2 years ago
parent dcdb5cac19
commit e34ad9ddab

@ -4,6 +4,7 @@ import android.media.MediaCodec;
import android.media.MediaFormat; import android.media.MediaFormat;
import android.media.MediaMuxer; import android.media.MediaMuxer;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
@ -14,6 +15,7 @@ import java.nio.ByteBuffer;
public class AndroidMuxer { public class AndroidMuxer {
private final int mExpectedNumTracks = 1; private final int mExpectedNumTracks = 1;
private MediaFormat mVideoFormat = null;
private MediaMuxer mMuxer; private MediaMuxer mMuxer;
@ -22,9 +24,19 @@ public class AndroidMuxer {
private volatile int mNumTracks; private volatile int mNumTracks;
private volatile int mNumReleases; private volatile int mNumReleases;
public AndroidMuxer(String outputPath) { private long mStartRecordTime = 0L;
private static final long DEFAULT_RECORD_DURATION = 30 * 60 * 1000;
public AndroidMuxer() {
createMediaMuxer();
}
private void createMediaMuxer() {
try { try {
mMuxer = new MediaMuxer(outputPath, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4); File output = CameraHelper.getOutputMediaFile(CameraHelper.MEDIA_TYPE_VIDEO, "");
String filePath = output.getAbsolutePath();
mMuxer = new MediaMuxer(filePath, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4);
mStarted = false;
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -37,7 +49,7 @@ public class AndroidMuxer {
synchronized (mMuxer) { synchronized (mMuxer) {
int track = mMuxer.addTrack(trackFormat); int track = mMuxer.addTrack(trackFormat);
mVideoFormat = trackFormat;
if (++mNumTracks == mExpectedNumTracks) { if (++mNumTracks == mExpectedNumTracks) {
mMuxer.start(); mMuxer.start();
mStarted = true; mStarted = true;
@ -55,6 +67,20 @@ public class AndroidMuxer {
synchronized (mMuxer) { synchronized (mMuxer) {
mMuxer.writeSampleData(trackIndex, encodedData, bufferInfo); mMuxer.writeSampleData(trackIndex, encodedData, bufferInfo);
} }
if (mStartRecordTime <= 0L) {
mStartRecordTime = System.currentTimeMillis();
} else {
long recordTime = System.currentTimeMillis() - mStartRecordTime;
if (recordTime > DEFAULT_RECORD_DURATION) {
mMuxer.stop();
mMuxer.release();
mNumTracks = 0;
mStartRecordTime = 0L;
createMediaMuxer();
addTrack(mVideoFormat);
}
}
} }
public boolean release() { public boolean release() {

@ -106,7 +106,7 @@ public abstract class BaseMovieEncoder implements Runnable {
EGLContext sharedEglContext) { EGLContext sharedEglContext) {
mOutputFile = outputFile; mOutputFile = outputFile;
mEglContext = sharedEglContext; mEglContext = sharedEglContext;
mMuxer = new AndroidMuxer(outputFile.getPath()); mMuxer = new AndroidMuxer();
} }
@Override @Override

Loading…
Cancel
Save