Skip to content

Commit

Permalink
android/sample: toggle player in VideoView
Browse files Browse the repository at this point in the history
  • Loading branch information
bbcallen committed Oct 25, 2015
1 parent 5ce7208 commit c369058
Show file tree
Hide file tree
Showing 4 changed files with 112 additions and 56 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,12 @@ public boolean onOptionsItemSelected(MenuItem item) {
mToastTextView.setText(aspectRatioText);
mMediaController.showOnce(mToastTextView);
return true;
} else if (id == R.id.action_toggle_player) {
int player = mVideoView.togglePlayer();
String playerText = IjkVideoView.getPlayerText(this, player);
mToastTextView.setText(playerText);
mMediaController.showOnce(mToastTextView);
return true;
} else if (id == R.id.action_toggle_render) {
int render = mVideoView.toggleRender();
String renderText = IjkVideoView.getRenderText(this, render);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -291,62 +291,7 @@ private void openVideo() {
am.requestAudioFocus(null, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);

try {
switch (mSettings.getPlayer()) {
case Settings.PV_PLAYER__IjkMediaPlayer: {
IjkMediaPlayer ijkMediaPlayer = null;
if (mUri != null) {
ijkMediaPlayer = new IjkMediaPlayer();
ijkMediaPlayer.native_setLogLevel(IjkMediaPlayer.IJK_LOG_DEBUG);

if (mSettings.getUsingMediaCodec()) {
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec", 1);
if (mSettings.getUsingMediaCodecAutoRotate()) {
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec-auto-rotate", 1);
} else {
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec-auto-rotate", 0);
}
} else {
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec", 0);
}

if (mSettings.getUsingOpenSLES()) {
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "opensles", 1);
} else {
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "opensles", 0);
}

String pixelFormat = mSettings.getPixelFormat();
if (TextUtils.isEmpty(pixelFormat)) {
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "overlay-format", IjkMediaPlayer.SDL_FCC_RV32);
} else {
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "overlay-format", pixelFormat);
}
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "framedrop", 1);
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "start-on-prepared", 0);

ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "http-detect-range-support", 0);

ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_CODEC, "skip_loop_filter", 48);
}
mMediaPlayer = ijkMediaPlayer;
}
break;
case Settings.PV_PLAYER__IjkExoMediaPlayer: {
IjkExoMediaPlayer IjkExoMediaPlayer = new IjkExoMediaPlayer(mAppContext);
mMediaPlayer = IjkExoMediaPlayer;
}
break;
case Settings.PV_PLAYER__AndroidMediaPlayer:
default: {
AndroidMediaPlayer androidMediaPlayer = new AndroidMediaPlayer();
mMediaPlayer = androidMediaPlayer;
}
break;
}

if (mSettings.getEnableDetachedSurfaceTextureView()) {
mMediaPlayer = new TextureMediaPlayer(mMediaPlayer);
}
mMediaPlayer = createPlayer(mSettings.getPlayer());

// TODO: create SubtitleController in MediaPlayer, but we need
// a context for the subtitle renderers
Expand Down Expand Up @@ -986,6 +931,101 @@ public static String getRenderText(Context context, int render) {
return text;
}

//-------------------------
// Extend: Player
//-------------------------
public int togglePlayer() {
if (mMediaPlayer != null)
mMediaPlayer.release();

mRenderView.getView().invalidate();
openVideo();
return mSettings.getPlayer();
}

@NonNull
public static String getPlayerText(Context context, int player) {
String text;
switch (player) {
case Settings.PV_PLAYER__AndroidMediaPlayer:
text = context.getString(R.string.VideoView_render_none);
break;
case Settings.PV_PLAYER__IjkMediaPlayer:
text = context.getString(R.string.VideoView_render_surface_view);
break;
case Settings.PV_PLAYER__IjkExoMediaPlayer:
text = context.getString(R.string.VideoView_render_texture_view);
break;
default:
text = context.getString(R.string.N_A);
break;
}
return text;
}

public IMediaPlayer createPlayer(int playerType) {
IMediaPlayer mediaPlayer = null;

switch (playerType) {
case Settings.PV_PLAYER__IjkMediaPlayer: {
IjkMediaPlayer ijkMediaPlayer = null;
if (mUri != null) {
ijkMediaPlayer = new IjkMediaPlayer();
ijkMediaPlayer.native_setLogLevel(IjkMediaPlayer.IJK_LOG_DEBUG);

if (mSettings.getUsingMediaCodec()) {
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec", 1);
if (mSettings.getUsingMediaCodecAutoRotate()) {
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec-auto-rotate", 1);
} else {
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec-auto-rotate", 0);
}
} else {
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec", 0);
}

if (mSettings.getUsingOpenSLES()) {
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "opensles", 1);
} else {
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "opensles", 0);
}

String pixelFormat = mSettings.getPixelFormat();
if (TextUtils.isEmpty(pixelFormat)) {
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "overlay-format", IjkMediaPlayer.SDL_FCC_RV32);
} else {
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "overlay-format", pixelFormat);
}
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "framedrop", 1);
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "start-on-prepared", 0);

ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "http-detect-range-support", 0);

ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_CODEC, "skip_loop_filter", 48);
}
mediaPlayer = ijkMediaPlayer;
}
break;
case Settings.PV_PLAYER__IjkExoMediaPlayer: {
IjkExoMediaPlayer IjkExoMediaPlayer = new IjkExoMediaPlayer(mAppContext);
mediaPlayer = IjkExoMediaPlayer;
}
break;
case Settings.PV_PLAYER__AndroidMediaPlayer:
default: {
AndroidMediaPlayer androidMediaPlayer = new AndroidMediaPlayer();
mediaPlayer = androidMediaPlayer;
}
break;
}

if (mSettings.getEnableDetachedSurfaceTextureView()) {
mediaPlayer = new TextureMediaPlayer(mediaPlayer);
}

return mediaPlayer;
}

//-------------------------
// Extend: Background
//-------------------------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".menu_app">
<item
android:id="@+id/action_toggle_player"
android:title="@string/toggle_player"
app:showAsAction="ifRoom" />
<item
android:id="@+id/action_toggle_render"
android:title="@string/toggle_render"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
<string name="sample">Sample</string>
<string name="recent">Recent</string>
<string name="settings">Settings</string>
<string name="toggle_player">Player</string>
<string name="toggle_render">Render</string>
<string name="toggle_ratio">Scale</string>
<string name="show_info">Info</string>
Expand Down Expand Up @@ -52,4 +53,9 @@
<string name="VideoView_render_surface_view">Render: SurfaceView</string>
<string name="VideoView_render_texture_view">Render: TextureView</string>

<string name="VideoView_player_none">Player: None</string>
<string name="VideoView_player_AndroidMediaPlayer">Player: AndroidMediaPlayer</string>
<string name="VideoView_player_IjkMediaPlayer">Player: IjkMediaPlayer</string>
<string name="VideoView_player_IjkExoMediaPlayer">Player: IjkExoMediaPlayer</string>

</resources>

0 comments on commit c369058

Please sign in to comment.