提交 bdd8f6a9 编写于 作者: Z Zhang Rui

android/sample: use IjkExoPlayer

上级 bbaa0a44
......@@ -26,6 +26,11 @@ public class Settings {
private Context mAppContext;
private SharedPreferences mSharedPreferences;
public static final int PV_PLAYER__Auto = 0;
public static final int PV_PLAYER__AndroidMediaPlayer = 1;
public static final int PV_PLAYER__IjkMediaPlayer = 2;
public static final int PV_PLAYER__IjkExoMediaPlayer = 3;
public Settings(Context context) {
mAppContext = context.getApplicationContext();
mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(mAppContext);
......@@ -36,9 +41,14 @@ public class Settings {
return mSharedPreferences.getBoolean(key, false);
}
public boolean getUsingAndroidPlayer() {
String key = mAppContext.getString(R.string.pref_key_using_android_player);
return mSharedPreferences.getBoolean(key, false);
public int getPlayer() {
String key = mAppContext.getString(R.string.pref_key_player);
String value = mSharedPreferences.getString(key, "");
try {
return Integer.valueOf(value).intValue();
} catch (NumberFormatException e) {
return 0;
}
}
public boolean getUsingMediaCodec() {
......
......@@ -43,6 +43,7 @@ import java.util.List;
import java.util.Locale;
import java.util.Map;
import tv.danmaku.ijk.media.exo.IjkExoMediaPlayer;
import tv.danmaku.ijk.media.player.AndroidMediaPlayer;
import tv.danmaku.ijk.media.player.IMediaPlayer;
import tv.danmaku.ijk.media.player.IjkMediaPlayer;
......@@ -290,46 +291,57 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl
am.requestAudioFocus(null, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
try {
if (mSettings.getUsingAndroidPlayer()) {
AndroidMediaPlayer androidMediaPlayer = new AndroidMediaPlayer();
mMediaPlayer = androidMediaPlayer;
} else {
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);
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-auto-rotate", 0);
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec", 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);
}
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);
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_FORMAT, "http-detect-range-support", 0);
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_CODEC, "skip_loop_filter", 48);
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;
}
mMediaPlayer = ijkMediaPlayer;
break;
case Settings.PV_PLAYER__AndroidMediaPlayer:
default: {
AndroidMediaPlayer androidMediaPlayer = new AndroidMediaPlayer();
mMediaPlayer = androidMediaPlayer;
}
break;
}
if (mSettings.getEnableDetachedSurfaceTextureView()) {
......@@ -456,7 +468,7 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl
mMediaController.show();
}
} else if (!isPlaying() &&
(seekToPosition != 0 || getCurrentPosition() > 0)) {
(seekToPosition != 0 || getCurrentPosition() > 0)) {
if (mMediaController != null) {
// Show the media controls when we're paused into a video and make 'em stick.
mMediaController.show(0);
......@@ -1019,7 +1031,7 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl
ITrackInfo trackInfos[] = mMediaPlayer.getTrackInfo();
if (trackInfos != null) {
int index = -1;
for (ITrackInfo trackInfo: trackInfos) {
for (ITrackInfo trackInfo : trackInfos) {
index++;
int trackType = trackInfo.getTrackType();
......@@ -1082,7 +1094,8 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl
long seconds = total_seconds % 60;
if (duration <= 0) {
return "--:--";
} if (hours >= 100) {
}
if (hours >= 100) {
return String.format(Locale.US, "%d:%02d:%02d", hours, minutes, seconds);
} else if (hours > 0) {
return String.format(Locale.US, "%02d:%02d:%02d", hours, minutes, seconds);
......
......@@ -11,6 +11,27 @@
<string name="pref_title_using_android_player">Using system player</string>
<string name="pref_summary_using_android_player"></string>
<string name="pref_key_player">pref.player</string>
<string name="pref_title_player">Choose Player</string>
<string-array name="pref_entries_player">
<item>Auto Select</item>
<item>AndroidMediaPlayer</item>
<item>IjkMediaPlayer</item>
<item>IjkExoMediaPlayer</item>
</string-array>
<string-array name="pref_entry_values_player">
<item>0</item>
<item>1</item>
<item>2</item>
<item>3</item>
</string-array>
<string-array name="pref_entry_summaries_player">
<item>Auto Select</item>
<item>AndroidMediaPlayer</item>
<item>IjkMediaPlayer</item>
<item>IjkExoMediaPlayer</item>
</string-array>
<!-- -->
<string name="pref_title_ijkplayer_video">Video: ijkplayer</string>
......
......@@ -8,18 +8,18 @@
android:persistent="true"
android:summary="@string/pref_summary_enable_background_play"
android:title="@string/pref_title_enable_background_play" />
<CheckBoxPreference
android:defaultValue="false"
android:disableDependentsState="true"
android:key="@string/pref_key_using_android_player"
<tv.danmaku.ijk.media.sample.widget.preference.IjkListPreference
android:defaultValue="0"
android:entries="@@array/pref_entries_player"
android:entryValues="@array/pref_entry_values_player"
android:key="@string/pref_key_player"
android:persistent="true"
android:summary="@string/pref_summary_using_android_player"
android:title="@string/pref_title_using_android_player" />
android:title="@string/pref_title_player"
app:entrySummaries="@array/pref_entry_summaries_player" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/pref_title_ijkplayer_video">
<CheckBoxPreference
android:defaultValue="false"
android:dependency="@string/pref_key_using_android_player"
android:key="@string/pref_key_using_media_codec"
android:persistent="true"
android:summary="@string/pref_summary_using_media_codec"
......@@ -42,7 +42,6 @@
<PreferenceCategory android:title="@string/pref_title_ijkplayer_audio">
<CheckBoxPreference
android:defaultValue="false"
android:dependency="@string/pref_key_using_android_player"
android:key="@string/pref_key_using_opensl_es"
android:persistent="true"
android:summary="@string/pref_summary_using_opensl_es"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册