From e34ad9ddab4b1a3f50f7cf3550c7f9b47e68bb36 Mon Sep 17 00:00:00 2001 From: xiaowusky Date: Fri, 16 Jun 2023 15:22:24 +0800 Subject: [PATCH] =?UTF-8?q?desc:=E5=BD=95=E5=83=8F=E6=AF=8F=E5=8D=8A?= =?UTF-8?q?=E4=B8=AA=E5=B0=8F=E6=97=B6=E8=87=AA=E5=8A=A8=E5=88=86=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=AD=98=E5=82=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../library/vlc/encoder/AndroidMuxer.java | 32 +++++++++++++++++-- .../library/vlc/encoder/BaseMovieEncoder.java | 2 +- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/library-vlc/src/main/java/com/yinuo/library/vlc/encoder/AndroidMuxer.java b/library-vlc/src/main/java/com/yinuo/library/vlc/encoder/AndroidMuxer.java index 220b4fd..0a0b09e 100644 --- a/library-vlc/src/main/java/com/yinuo/library/vlc/encoder/AndroidMuxer.java +++ b/library-vlc/src/main/java/com/yinuo/library/vlc/encoder/AndroidMuxer.java @@ -4,6 +4,7 @@ import android.media.MediaCodec; import android.media.MediaFormat; import android.media.MediaMuxer; +import java.io.File; import java.io.IOException; import java.nio.ByteBuffer; @@ -14,6 +15,7 @@ import java.nio.ByteBuffer; public class AndroidMuxer { private final int mExpectedNumTracks = 1; + private MediaFormat mVideoFormat = null; private MediaMuxer mMuxer; @@ -22,9 +24,19 @@ public class AndroidMuxer { private volatile int mNumTracks; 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 { - 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) { e.printStackTrace(); } @@ -37,7 +49,7 @@ public class AndroidMuxer { synchronized (mMuxer) { int track = mMuxer.addTrack(trackFormat); - + mVideoFormat = trackFormat; if (++mNumTracks == mExpectedNumTracks) { mMuxer.start(); mStarted = true; @@ -55,6 +67,20 @@ public class AndroidMuxer { synchronized (mMuxer) { 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() { diff --git a/library-vlc/src/main/java/com/yinuo/library/vlc/encoder/BaseMovieEncoder.java b/library-vlc/src/main/java/com/yinuo/library/vlc/encoder/BaseMovieEncoder.java index 65c039f..372562d 100644 --- a/library-vlc/src/main/java/com/yinuo/library/vlc/encoder/BaseMovieEncoder.java +++ b/library-vlc/src/main/java/com/yinuo/library/vlc/encoder/BaseMovieEncoder.java @@ -106,7 +106,7 @@ public abstract class BaseMovieEncoder implements Runnable { EGLContext sharedEglContext) { mOutputFile = outputFile; mEglContext = sharedEglContext; - mMuxer = new AndroidMuxer(outputFile.getPath()); + mMuxer = new AndroidMuxer(); } @Override