Android MediaPlayer未使用Android 5.1.1在Galaxy S6上播放

Android MediaPlayer未使用Android 5.1.1在Galaxy S6上播放,android,android-mediaplayer,samsung-mobile,Android,Android Mediaplayer,Samsung Mobile,我看到一个问题是运行Android 5.1.1的Galaxy S6特有的。我使用MediaPlayer播放音频流,在这个特定的设备配置和Android版本上,它无法达到onPrepared方法,因此从不播放 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.act

我看到一个问题是运行Android 5.1.1的Galaxy S6特有的。我使用MediaPlayer播放音频流,在这个特定的设备配置和Android版本上,它无法达到onPrepared方法,因此从不播放

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mAndroidPlayer = new MediaPlayer();

        mAndroidPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
            @Override
            public boolean onError(MediaPlayer mediaPlayer, int i, int i1) {
                System.out.print("ERROR " + i);
                return false;
            }
        });

        mAndroidPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mediaPlayer) {
                System.out.println("PREPARED");
                mAndroidPlayer.start();
            }
        });

        mAndroidPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

        try {
            mAndroidPlayer.setDataSource("http://live.radioart.com/fFilm_scores.mp3");
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            mAndroidPlayer.prepareAsync();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        }
    }
只是重复一下,它可以在所有其他设备和Android版本上正常工作

以下是控制台的输出:

    09-04 09:54:51.112  24991-24991/com.tsm.mediaplayertest E/Zygote﹕ MountEmulatedStorage()
09-04 09:54:51.112  24991-24991/com.tsm.mediaplayertest E/Zygote﹕ v2
09-04 09:54:51.112  24991-24991/com.tsm.mediaplayertest I/libpersona﹕ KNOX_SDCARD checking this for 10229
09-04 09:54:51.112  24991-24991/com.tsm.mediaplayertest I/libpersona﹕ KNOX_SDCARD not a persona
09-04 09:54:51.112  24991-24991/com.tsm.mediaplayertest I/SELinux﹕ Function: selinux_compare_spd_ram , priority [2] , priority version is VE=SEPF_SM-G920V_5.1.1_0024
09-04 09:54:51.112  24991-24991/com.tsm.mediaplayertest E/SELinux﹕ [DEBUG] get_category: variable seinfo: default sensitivity: NULL, cateogry: NULL
09-04 09:54:51.112  24991-24991/com.tsm.mediaplayertest I/art﹕ Late-enabling -Xcheck:jni
09-04 09:54:51.122  24991-24991/com.tsm.mediaplayertest D/TimaKeyStoreProvider﹕ TimaSignature is unavailable
09-04 09:54:51.122  24991-24991/com.tsm.mediaplayertest D/ActivityThread﹕ Added TimaKeyStore provider
09-04 09:54:51.132  24991-24998/com.tsm.mediaplayertest E/art﹕ Failed sending reply to debugger: Broken pipe
09-04 09:54:51.132  24991-24998/com.tsm.mediaplayertest I/art﹕ Debugger is no longer active
09-04 09:54:51.132  24991-24991/com.tsm.mediaplayertest I/InjectionManager﹕ Inside getClassLibPath + mLibMap{0=, 1=}
09-04 09:54:51.132  24991-24991/com.tsm.mediaplayertest I/InjectionManager﹕ Inside getClassLibPath caller
09-04 09:54:51.142  24991-24991/com.tsm.mediaplayertest D/InjectionManager﹕ InjectionManager
09-04 09:54:51.142  24991-24991/com.tsm.mediaplayertest D/InjectionManager﹕ fillFeatureStoreMap com.tsm.mediaplayertest
09-04 09:54:51.142  24991-24991/com.tsm.mediaplayertest I/InjectionManager﹕ Constructor com.tsm.mediaplayertest, Feature store :{}
09-04 09:54:51.142  24991-24991/com.tsm.mediaplayertest I/InjectionManager﹕ featureStore :{}
09-04 09:54:51.162  24991-24991/com.tsm.mediaplayertest D/SecWifiDisplayUtil﹕ Metadata value : SecSettings2
09-04 09:54:51.172  24991-24991/com.tsm.mediaplayertest D/PhoneWindow﹕ *FMB* installDecor mIsFloating : false
09-04 09:54:51.182  24991-24991/com.tsm.mediaplayertest D/PhoneWindow﹕ *FMB* installDecor flags : -2139029248
09-04 09:54:51.202  24991-24991/com.tsm.mediaplayertest I/MediaPlayer﹕ Need to enable context aware info
09-04 09:54:51.202  24991-24991/com.tsm.mediaplayertest V/MediaPlayer-JNI﹕ native_setup
09-04 09:54:51.202  24991-24991/com.tsm.mediaplayertest V/MediaPlayer﹕ constructor
09-04 09:54:51.202  24991-24991/com.tsm.mediaplayertest V/MediaPlayer﹕ setListener
09-04 09:54:51.202  24991-24991/com.tsm.mediaplayertest V/MediaPlayer-JNI﹕ setAudioStreamType: 3
09-04 09:54:51.202  24991-24991/com.tsm.mediaplayertest V/MediaPlayer﹕ MediaPlayer::setAudioStreamType
09-04 09:54:51.212  24991-24991/com.tsm.mediaplayertest V/MediaPlayer﹕ setVideoSurfaceTexture
09-04 09:54:51.212  24991-24991/com.tsm.mediaplayertest V/MediaPlayer﹕ prepareAsync
09-04 09:54:51.212  24991-24991/com.tsm.mediaplayertest D/Activity﹕ performCreate Call Injection manager
09-04 09:54:51.212  24991-25004/com.tsm.mediaplayertest D/MediaHTTPConnection﹕ setReadTimeOut =  30000ms
09-04 09:54:51.212  24991-24991/com.tsm.mediaplayertest I/InjectionManager﹕ dispatchOnViewCreated > Target : com.tsm.mediaplayertest.MainActivity isFragment :false
09-04 09:54:51.212  24991-25010/com.tsm.mediaplayertest D/OpenGLRenderer﹕ Use EGL_SWAP_BEHAVIOR_PRESERVED: true
09-04 09:54:51.222  24991-25004/com.tsm.mediaplayertest D/MediaHTTPConnection﹕ setReadTimeout with 30000ms
09-04 09:54:51.222  24991-25004/com.tsm.mediaplayertest I/System.out﹕ (HTTPLog)-Static: isSBSettingEnabled false
09-04 09:54:51.222  24991-25004/com.tsm.mediaplayertest I/System.out﹕ (HTTPLog)-Static: isShipBuild true
09-04 09:54:51.222  24991-25004/com.tsm.mediaplayertest I/System.out﹕ (HTTPLog)-Thread-5351-996493763: SmartBonding Enabling is false, SHIP_BUILD is true, log to file is false, DBG is false
09-04 09:54:51.222  24991-25004/com.tsm.mediaplayertest I/System.out﹕ (HTTPLog)-Thread-5351-996493763: SMARTBONDING_FEATURE_ENABLED is true
09-04 09:54:51.222  24991-25004/com.tsm.mediaplayertest I/System.out﹕ (HTTPLog)-Static: isSBSettingEnabled false
09-04 09:54:51.222  24991-25004/com.tsm.mediaplayertest I/System.out﹕ KnoxVpnUidStorageknoxVpnSupported API value returned is false
09-04 09:54:51.222  24991-24991/com.tsm.mediaplayertest D/PhoneWindow﹕ *FMB* isFloatingMenuEnabled mFloatingMenuBtn : null
09-04 09:54:51.222  24991-24991/com.tsm.mediaplayertest D/PhoneWindow﹕ *FMB* isFloatingMenuEnabled return false
09-04 09:54:51.242  24991-24991/com.tsm.mediaplayertest D/SRIB_DCS﹕ log_dcs ThreadedRenderer::initialize entered!
09-04 09:54:51.262  24991-25010/com.tsm.mediaplayertest D/libEGL﹕ loaded /vendor/lib/egl/libGLES_mali.so
09-04 09:54:51.272  24991-25010/com.tsm.mediaplayertest I/OpenGLRenderer﹕ Initialized EGL, version 1.4
09-04 09:54:51.282  24991-25010/com.tsm.mediaplayertest I/OpenGLRenderer﹕ HWUI protection enabled for context ,  &this =0xf4d8c940 ,&mEglDisplay = 1 , &mEglConfig = -185126244
09-04 09:54:51.282  24991-25010/com.tsm.mediaplayertest D/OpenGLRenderer﹕ Get maximum texture size. GL_MAX_TEXTURE_SIZE is 8192
09-04 09:54:51.282  24991-25010/com.tsm.mediaplayertest D/OpenGLRenderer﹕ Enabling debug mode 0
09-04 09:54:51.282  24991-25010/com.tsm.mediaplayertest D/mali_winsys﹕ new_window_surface returns 0x3000,  [1440x2560]-format:1
09-04 09:54:51.292  24991-24991/com.tsm.mediaplayertest I/InjectionManager﹕ dispatchCreateOptionsMenu :com.tsm.mediaplayertest.MainActivity
09-04 09:54:51.292  24991-24991/com.tsm.mediaplayertest I/InjectionManager﹕ dispatchPrepareOptionsMenu :com.tsm.mediaplayertest.MainActivity
09-04 09:54:51.322  24991-24991/com.tsm.mediaplayertest I/Timeline﹕ Timeline: Activity_idle id: android.os.BinderProxy@356f9c4b time:29488057
09-04 09:54:51.672  24991-25004/com.tsm.mediaplayertest I/MediaHTTPConnection﹕ response code = 200
09-04 09:54:51.672  24991-25004/com.tsm.mediaplayertest V/MediaHTTPConnection﹕ mTotalSize is -1
09-04 09:54:51.672  24991-25004/com.tsm.mediaplayertest D/MediaHTTPConnection﹕ getProperties 16
09-04 09:54:51.672  24991-25013/com.tsm.mediaplayertest D/MediaHTTPConnection﹕ getProperties 16
09-04 09:54:52.142  24991-24998/com.tsm.mediaplayertest I/art﹕ Ignoring second debugger -- accepting and dropping

这是一个局部解决方案,但在我看来,它是最持久的解决方案。MediaPlayer是很久以前创建的,因此没有我们想要的灵活性。我已经用了一年了,上一个版本只有音频播放。所以我想,若你们将你们的音频播放器的实现改为使用Exoplayer,那个么它将解决大多数问题和以后的问题

Exoplayer是google开发者提供的一款功能强大的播放器,可作为外部库使用,因此您不必在某些Android版本上管理错误的实现



TBH,我不知道为什么会发生这种情况。回到过去,三星的设备有一个bug,它没有在
VideoView
上调用
onPrepareListener
。如果这只发生在S6上,您可以排除添加此侦听器,并在
OnBufferingUpdateListener
内的缓冲超过某个阈值(可能是100%)时调用
.start()
,因为您是从URI流式传输的。OnBufferingUpdateListener也永远不会被调用。这会将事情复杂化到一个新的级别。启动单独的线程/asyntask,检查缓冲百分比或启动递归处理程序,但要小心。使用控制台的输出进行更新。这确实令人沮丧。我已经有一个应用程序在野外运行了大约一年,它工作得很好。现在,我必须考虑改变我的整个实现,因为三星不能把他们的SH**组合在一起?(当然,我现在是一个比当时更好的开发人员,我本可以让自己更轻松……)我遇到了与OP相同的S6问题,ExoPlayer解决了它。我认为这不是一个有效的解决方案。它建议使用完全其他的东西,而不是提供一个具体的解决办法。它认为该框架是“旧的”,无法使用。评论?@anthonymonori你是对的,这不是一个合适的解决方案,但我们已经到了谷歌在Youtube上使用Exoplayer的地步。对我来说,每个供应商的编解码器都有一些问题,MediaPlayer也有一些问题。此解决方案通过使用不同的独立播放器来解决与MediaPlayer相关的问题。