mTrackIndex = mMuxer.addTrack(newFormat); mMuxer.start(); mMuxerStarted = true; } else if (encoderStatus < 0) mMuxer.writeSampleData(mTrackIndex, encodedData, mBufferInfo); } catch (Exception e)
}; muxer = new MediaMuxer(tmpFile.getAbsolutePath(), OutputFormat.MUXER_OUTPUT_MPEG_4); muxer.addTrack(tracks[0].getTrackFormat(0)), muxer.addTrack(tracks[1].getTrackFormat(0)) }; long nextReport = NOTIFY_BYTES_INTERVAL; muxer.start(); muxer.writeSampleData(tracksIndex[i], buffer, info); written += info.size; done++; try { if (muxer != null) { muxer.stop(); muxer.release();
try mMuxer = new MediaMuxer(outputPath, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4); } catch (IOException ioe) mMuxer.stop(); mMuxer.release();
public void writeSampleData(SampleType sampleType, ByteBuffer byteBuf, MediaCodec.BufferInfo bufferInfo) { if (mStarted) { mMuxer.writeSampleData(getTrackIndexForSampleType(sampleType), byteBuf, bufferInfo); return; } byteBuf.limit(bufferInfo.offset + bufferInfo.size); byteBuf.position(bufferInfo.offset); if (mByteBuffer == null) { mByteBuffer = ByteBuffer.allocateDirect(BUFFER_SIZE).order(ByteOrder.nativeOrder()); } mByteBuffer.put(byteBuf); mSampleInfoList.add(new SampleInfo(sampleType, bufferInfo.size, bufferInfo)); }
/** * Creates a muxer to write the encoded frames. * * <p>The muxer is not started as it needs to be started only after all streams have been added. */ private MediaMuxer createMuxer() throws IOException { return new MediaMuxer(mOutputPath, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4); }
@Override public void onStart() { isStart = true; mMuxer.start(); }
/** * assign encoder to muxer * @param format * @return minus value indicate error */ /*package*/ synchronized int addTrack(final MediaFormat format) { if (mIsStarted) throw new IllegalStateException("muxer already started"); final int trackIx = mMediaMuxer.addTrack(format); if (DEBUG) Log.i(TAG, "addTrack:trackNum=" + mEncoderCount + ",trackIx=" + trackIx + ",format=" + format); return trackIx; }
@Override public void stop() { if (mIsStarted) { mIsStarted = false; mMuxer.stop(); } }
@Override public void release() { mIsStarted = false; if (!mReleased) { mReleased = true; try { mMuxer.release(); } catch (final Exception e) { Log.w(TAG, e); } } }
/** * request stop recording from encoder when encoder received EOS */ /*package*/ synchronized void stop() { if (DEBUG) Log.v(TAG, "stop:mStatredCount=" + mStatredCount); mStatredCount--; if ((mEncoderCount > 0) && (mStatredCount <= 0)) { mMediaMuxer.stop(); mMediaMuxer.release(); mIsStarted = false; if (DEBUG) Log.v(TAG, "MediaMuxer stopped:"); } }
/** * write encoded data to muxer * @param trackIndex * @param byteBuf * @param bufferInfo */ /*package*/ synchronized void writeSampleData(final int trackIndex, final ByteBuffer byteBuf, final MediaCodec.BufferInfo bufferInfo) { if (mStatredCount > 0) mMediaMuxer.writeSampleData(trackIndex, byteBuf, bufferInfo); }
/** * Constructor */ public MediaMuxerCaptureWrapper(final String filePath) throws IOException { mediaMuxer = new MediaMuxer(filePath, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4); encoderCount = startedCount = 0; isStarted = false; }
mMuxer = new MediaMuxer(outputPath, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4); setupMetadata(); setupTrackTranscoders(formatStrategy); runPipelines(); mMuxer.stop(); } finally { try { mMuxer.release(); mMuxer = null;
@Override public void start() { mMuxer.start(); mIsStarted = true; }
/** * assign encoder to muxer * @param format * @return minus value indicate error */ /*package*/ synchronized int addTrack(final MediaFormat format) { if (mIsStarted) throw new IllegalStateException("muxer already started"); final int trackIx = mMediaMuxer.addTrack(format); if (DEBUG) Log.i(TAG, "addTrack:trackNum=" + mEncoderCount + ",trackIx=" + trackIx + ",format=" + format); return trackIx; }
private void onSetOutputFormat() { if (mVideoFormat == null || mAudioFormat == null) return; mListener.onDetermineOutputFormat(); mVideoTrackIndex = mMuxer.addTrack(mVideoFormat); Log.v(TAG, "Added track #" + mVideoTrackIndex + " with " + mVideoFormat.getString(MediaFormat.KEY_MIME) + " to muxer"); mAudioTrackIndex = mMuxer.addTrack(mAudioFormat); Log.v(TAG, "Added track #" + mAudioTrackIndex + " with " + mAudioFormat.getString(MediaFormat.KEY_MIME) + " to muxer"); mMuxer.start(); mStarted = true; if (mByteBuffer == null) { mByteBuffer = ByteBuffer.allocate(0); } mByteBuffer.flip(); Log.v(TAG, "Output format determined, writing " + mSampleInfoList.size() + " samples / " + mByteBuffer.limit() + " bytes to muxer."); MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo(); int offset = 0; for (SampleInfo sampleInfo : mSampleInfoList) { sampleInfo.writeToBufferInfo(bufferInfo, offset); mMuxer.writeSampleData(getTrackIndexForSampleType(sampleInfo.mSampleType), mByteBuffer, bufferInfo); offset += sampleInfo.mSize; } mSampleInfoList.clear(); mByteBuffer = null; }