in native-media/app/src/main/java/com/example/nativemedia/NativeMedia.java [66:311]
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
// get application's assetManager to avoid being garbage-collected.
assetMgr = getApplication().getAssets();
mGLView1 = (MyGLSurfaceView) findViewById(R.id.glsurfaceview1);
mGLView2 = (MyGLSurfaceView) findViewById(R.id.glsurfaceview2);
// initialize native media system
createEngine();
// set up the Surface 1 video sink
mSurfaceView1 = (SurfaceView) findViewById(R.id.surfaceview1);
mSurfaceHolder1 = mSurfaceView1.getHolder();
mSurfaceHolder1.addCallback(new SurfaceHolder.Callback() {
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
Log.v(TAG, "surfaceChanged format=" + format + ", width=" + width + ", height="
+ height);
}
public void surfaceCreated(SurfaceHolder holder) {
Log.v(TAG, "surfaceCreated");
setSurface(holder.getSurface());
}
public void surfaceDestroyed(SurfaceHolder holder) {
Log.v(TAG, "surfaceDestroyed");
}
});
// set up the Surface 2 video sink
mSurfaceView2 = (SurfaceView) findViewById(R.id.surfaceview2);
mSurfaceHolder2 = mSurfaceView2.getHolder();
mSurfaceHolder2.addCallback(new SurfaceHolder.Callback() {
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
Log.v(TAG, "surfaceChanged format=" + format + ", width=" + width + ", height="
+ height);
}
public void surfaceCreated(SurfaceHolder holder) {
Log.v(TAG, "surfaceCreated");
setSurface(holder.getSurface());
}
public void surfaceDestroyed(SurfaceHolder holder) {
Log.v(TAG, "surfaceDestroyed");
}
});
// create Java media player
mMediaPlayer = new MediaPlayer();
// set up Java media player listeners
mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
public void onPrepared(MediaPlayer mediaPlayer) {
int width = mediaPlayer.getVideoWidth();
int height = mediaPlayer.getVideoHeight();
Log.v(TAG, "onPrepared width=" + width + ", height=" + height);
if (width != 0 && height != 0 && mJavaMediaPlayerVideoSink != null) {
mJavaMediaPlayerVideoSink.setFixedSize(width, height);
}
mMediaPlayerIsPrepared = true;
mediaPlayer.start();
}
});
mMediaPlayer.setOnVideoSizeChangedListener(new MediaPlayer.OnVideoSizeChangedListener() {
public void onVideoSizeChanged(MediaPlayer mediaPlayer, int width, int height) {
Log.v(TAG, "onVideoSizeChanged width=" + width + ", height=" + height);
if (width != 0 && height != 0 && mJavaMediaPlayerVideoSink != null) {
mJavaMediaPlayerVideoSink.setFixedSize(width, height);
}
}
});
// initialize content source spinner
Spinner sourceSpinner = (Spinner) findViewById(R.id.source_spinner);
ArrayAdapter<CharSequence> sourceAdapter = ArrayAdapter.createFromResource(
this, R.array.source_array, android.R.layout.simple_spinner_item);
sourceAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sourceSpinner.setAdapter(sourceAdapter);
sourceSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
mSourceString = parent.getItemAtPosition(pos).toString();
Log.v(TAG, "onItemSelected " + mSourceString);
}
public void onNothingSelected(AdapterView parent) {
Log.v(TAG, "onNothingSelected");
mSourceString = null;
}
});
// initialize video sink spinner
Spinner sinkSpinner = (Spinner) findViewById(R.id.sink_spinner);
ArrayAdapter<CharSequence> sinkAdapter = ArrayAdapter.createFromResource(
this, R.array.sink_array, android.R.layout.simple_spinner_item);
sinkAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sinkSpinner.setAdapter(sinkAdapter);
sinkSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
mSinkString = parent.getItemAtPosition(pos).toString();
Log.v(TAG, "onItemSelected " + mSinkString);
if ("Surface 1".equals(mSinkString)) {
if (mSurfaceHolder1VideoSink == null) {
mSurfaceHolder1VideoSink = new SurfaceHolderVideoSink(mSurfaceHolder1);
}
mSelectedVideoSink = mSurfaceHolder1VideoSink;
} else if ("Surface 2".equals(mSinkString)) {
if (mSurfaceHolder2VideoSink == null) {
mSurfaceHolder2VideoSink = new SurfaceHolderVideoSink(mSurfaceHolder2);
}
mSelectedVideoSink = mSurfaceHolder2VideoSink;
} else if ("SurfaceTexture 1".equals(mSinkString)) {
if (mGLView1VideoSink == null) {
mGLView1VideoSink = new GLViewVideoSink(mGLView1);
}
mSelectedVideoSink = mGLView1VideoSink;
} else if ("SurfaceTexture 2".equals(mSinkString)) {
if (mGLView2VideoSink == null) {
mGLView2VideoSink = new GLViewVideoSink(mGLView2);
}
mSelectedVideoSink = mGLView2VideoSink;
}
}
public void onNothingSelected(AdapterView parent) {
Log.v(TAG, "onNothingSelected");
mSinkString = null;
mSelectedVideoSink = null;
}
});
// initialize button click handlers
// Java MediaPlayer start/pause
((Button) findViewById(R.id.start_java)).setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
if (mJavaMediaPlayerVideoSink == null) {
if (mSelectedVideoSink == null) {
return;
}
mSelectedVideoSink.useAsSinkForJava(mMediaPlayer);
mJavaMediaPlayerVideoSink = mSelectedVideoSink;
}
if (!mMediaPlayerIsPrepared) {
if (mSourceString != null) {
try {
AssetFileDescriptor clipFd = assetMgr.openFd(mSourceString);
mMediaPlayer.setDataSource(clipFd.getFileDescriptor(),
clipFd.getStartOffset(),
clipFd.getLength());
clipFd.close();
} catch (IOException e) {
Log.e(TAG, "IOException " + e);
}
mMediaPlayer.prepareAsync();
}
} else if (mMediaPlayer.isPlaying()) {
mMediaPlayer.pause();
} else {
mMediaPlayer.start();
}
}
});
// native MediaPlayer start/pause
((Button) findViewById(R.id.start_native)).setOnClickListener(new View.OnClickListener() {
boolean created = false;
public void onClick(View view) {
if (!created) {
if (mNativeMediaPlayerVideoSink == null) {
if (mSelectedVideoSink == null) {
return;
}
mSelectedVideoSink.useAsSinkForNative();
mNativeMediaPlayerVideoSink = mSelectedVideoSink;
}
if (mSourceString != null) {
created = createStreamingMediaPlayer(assetMgr, mSourceString);
}
}
if (created) {
mIsPlayingStreaming = !mIsPlayingStreaming;
setPlayingStreamingMediaPlayer(mIsPlayingStreaming);
}
}
});
// finish
((Button) findViewById(R.id.finish)).setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
finish();
}
});
// Java MediaPlayer rewind
((Button) findViewById(R.id.rewind_java)).setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
if (mMediaPlayerIsPrepared) {
mMediaPlayer.seekTo(0);
}
}
});
// native MediaPlayer rewind
((Button) findViewById(R.id.rewind_native)).setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
if (mNativeMediaPlayerVideoSink != null) {
rewindStreamingMediaPlayer();
}
}
});
}