Android Open Source - kickflip-android-sdk Android Muxer From Project Back to project page kickflip-android-sdk .
License The source code is released under:
Apache License
If you think the Android project kickflip-android-sdk listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
Java Source Code package io.kickflip.sdk.av;
/ / w w w . j a v a 2 s . c o m
import android.media.MediaCodec;
import android.media.MediaFormat;
import android.media.MediaMuxer;
import android.util.Log;
import java.io.IOException;
import java.nio.ByteBuffer;
/**
* @hide
*/
public class AndroidMuxer extends Muxer {
private static final String TAG = "AndroidMuxer" ;
private static final boolean VERBOSE = false;
private MediaMuxer mMuxer;
private boolean mStarted;
private AndroidMuxer(String outputFile, FORMAT format){
super (outputFile, format);
try {
switch (format){
case MPEG4:
mMuxer = new MediaMuxer(outputFile, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4);
break ;
default :
throw new IllegalArgumentException("Unrecognized format!" );
}
} catch (IOException e) {
throw new RuntimeException("MediaMuxer creation failed" , e);
}
mStarted = false;
}
public static AndroidMuxer create(String outputFile, FORMAT format) {
return new AndroidMuxer(outputFile, format);
}
@Override
public int addTrack(MediaFormat trackFormat) {
super.addTrack(trackFormat);
if (mStarted)
throw new RuntimeException("format changed twice" );
int track = mMuxer.addTrack(trackFormat);
if (allTracksAdded()){
start();
}
return track;
}
protected void start() {
mMuxer.start();
mStarted = true;
}
protected void stop() {
mMuxer.stop();
mStarted = false;
}
@Override
public void release() {
super.release();
mMuxer.release();
}
@Override
public boolean isStarted() {
return mStarted;
}
@Override
public void writeSampleData(MediaCodec encoder, int trackIndex, int bufferIndex, ByteBuffer encodedData, MediaCodec.BufferInfo bufferInfo) {
super.writeSampleData(encoder, trackIndex, bufferIndex, encodedData, bufferInfo);
if ((bufferInfo.flags & MediaCodec.BUFFER_FLAG_CODEC_CONFIG) != 0) {
// MediaMuxer gets the codec config info via the addTrack command
if (VERBOSE) Log.d(TAG, "ignoring BUFFER_FLAG_CODEC_CONFIG" );
encoder.releaseOutputBuffer(bufferIndex, false);
return ;
}
if (bufferInfo.size == 0){
if (VERBOSE) Log.d(TAG, "ignoring zero size buffer" );
encoder.releaseOutputBuffer(bufferIndex, false);
return ;
}
if (!mStarted) {
Log.e(TAG, "writeSampleData called before muxer started. Ignoring packet. Track index: " + trackIndex + " tracks added: " + mNumTracks);
encoder.releaseOutputBuffer(bufferIndex, false);
return ;
}
bufferInfo.presentationTimeUs = getNextRelativePts(bufferInfo.presentationTimeUs, trackIndex);
mMuxer.writeSampleData(trackIndex, encodedData, bufferInfo);
encoder.releaseOutputBuffer(bufferIndex, false);
if (allTracksFinished()){
stop();
}
}
@Override
public void forceStop() {
stop();
}
}
Java Source Code List io.kickflip.sdk.FileUtils.java io.kickflip.sdk.Kickflip.java io.kickflip.sdk.Share.java io.kickflip.sdk.Util.java io.kickflip.sdk.activity.BroadcastActivity.java io.kickflip.sdk.activity.GlassBroadcastActivity.java io.kickflip.sdk.activity.ImmersiveActivity.java io.kickflip.sdk.activity.MediaPlayerActivity.java io.kickflip.sdk.api.KickflipApiClient.java io.kickflip.sdk.api.KickflipCallback.java io.kickflip.sdk.api.OAuthCallback.java io.kickflip.sdk.api.OAuthClient.java io.kickflip.sdk.api.OAuthConfig.java io.kickflip.sdk.api.json.HlsStream.java io.kickflip.sdk.api.json.Response.java io.kickflip.sdk.api.json.StreamList.java io.kickflip.sdk.api.json.Stream.java io.kickflip.sdk.api.json.User.java io.kickflip.sdk.api.s3.S3BroadcastManager.java io.kickflip.sdk.api.s3.package-info.java io.kickflip.sdk.av.AVRecorder.java io.kickflip.sdk.av.AndroidEncoder.java io.kickflip.sdk.av.AndroidMuxer.java io.kickflip.sdk.av.AudioEncoderConfig.java io.kickflip.sdk.av.AudioEncoderCore.java io.kickflip.sdk.av.BroadcastListener.java io.kickflip.sdk.av.Broadcaster.java io.kickflip.sdk.av.CameraEncoder.java io.kickflip.sdk.av.CameraSurfaceRenderer.java io.kickflip.sdk.av.Drawable2d.java io.kickflip.sdk.av.EglCore.java io.kickflip.sdk.av.EglStateSaver.java io.kickflip.sdk.av.EglSurfaceBase.java io.kickflip.sdk.av.FFmpegMuxer.java io.kickflip.sdk.av.Filters.java io.kickflip.sdk.av.FullFrameRect.java io.kickflip.sdk.av.GlUtil.java io.kickflip.sdk.av.HlsFileObserver.java io.kickflip.sdk.av.M3u8Parser.java io.kickflip.sdk.av.MicrophoneEncoder.java io.kickflip.sdk.av.Muxer.java io.kickflip.sdk.av.SessionConfig.java io.kickflip.sdk.av.SizeableFrameRect.java io.kickflip.sdk.av.Texture2dProgram.java io.kickflip.sdk.av.VideoEncoderConfig.java io.kickflip.sdk.av.VideoEncoderCore.java io.kickflip.sdk.av.WindowSurface.java io.kickflip.sdk.event.BroadcastEvent.java io.kickflip.sdk.event.BroadcastIsBufferingEvent.java io.kickflip.sdk.event.BroadcastIsLiveEvent.java io.kickflip.sdk.event.CameraOpenedEvent.java io.kickflip.sdk.event.HlsManifestUploadedEvent.java io.kickflip.sdk.event.HlsManifestWrittenEvent.java io.kickflip.sdk.event.HlsSegmentUploadedEvent.java io.kickflip.sdk.event.HlsSegmentWrittenEvent.java io.kickflip.sdk.event.MuxerFinishedEvent.java io.kickflip.sdk.event.S3FailedUploadEvent.java io.kickflip.sdk.event.S3UploadEvent.java io.kickflip.sdk.event.StreamLocationAddedEvent.java io.kickflip.sdk.event.ThumbnailWrittenEvent.java io.kickflip.sdk.event.UploadEvent.java io.kickflip.sdk.event.package-info.java io.kickflip.sdk.exception.KickflipException.java io.kickflip.sdk.fragment.BroadcastFragment.java io.kickflip.sdk.fragment.GlassBroadcastFragment.java io.kickflip.sdk.fragment.MediaPlayerFragment.java io.kickflip.sdk.fragment.package-info.java io.kickflip.sdk.location.DeviceLocation.java io.kickflip.sdk.location.package-info.java io.kickflip.sdk.view.GLCameraEncoderView.java io.kickflip.sdk.view.GLCameraView.java io.kickflip.sdk.view.package-info.java pro.dbro.ffmpegwrapper.FFmpegWrapper.java pro.dbro.ffmpegwrapper.package-info.java