|  |  |  | @ -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() { | 
		
	
	
		
			
				
					|  |  |  | 
 |