Media Player выбрасывает исключение - PullRequest
0 голосов
/ 11 декабря 2011

Я занимаюсь разработкой приложения для потокового воспроизведения мультимедиа Android. Я получаю следующее исключение:

 12-11 11:12:06.298: INFO/StagefrightPlayer(34): setDataSource('10.0.2.2\a.mp3')
 12-11 11:12:06.308: DEBUG/mp(618): starting
 12-11 11:12:06.308: ERROR/MediaPlayer(618): start called in state 4
 12-11 11:12:06.308: ERROR/MediaPlayer(618): error (-38, 0)
 12-11 11:12:06.328: ERROR/MediaPlayer(618): error (1, -2147483648)
 12-11 11:12:06.328: ERROR/MediaPlayer(618): Error (-38,0)
 12-11 11:12:06.409: ERROR/MediaPlayer(618): Error (1,-2147483648)
        String url = "10.0.2.2\\a.mp3"; // your URL here
        MediaPlayer mediaPlayer = new MediaPlayer();
        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        try {
            mediaPlayer.setDataSource(url);
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            mediaPlayer.prepareAsync();
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Log.d("mp","starting");
        mediaPlayer.start();

При использовании mediaPlayer.prepare я получаю следующее сообщение об ошибке:

 12-11 12:08:42.367: ERROR/MediaPlayer(980): error (1, -2147483648)
 12-11 12:08:42.367: WARN/System.err(980): java.io.IOException: Prepare failed.: status=0x1
 12-11 12:08:42.378: WARN/System.err(980):     at android.media.MediaPlayer.prepare(Native Method)
 12-11 12:08:42.378: WARN/System.err(980):     at mobiledo.pjct.Voicesms.onCreate(Voicesms.java:52)
 12-11 12:08:42.387: WARN/System.err(980):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
 12-11 12:08:42.387: WARN/System.err(980):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
 12-11 12:08:42.387: WARN/System.err(980):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
 12-11 12:08:42.387: WARN/System.err(980):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
 12-11 12:08:42.387: WARN/System.err(980):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
 12-11 12:08:42.387: WARN/System.err(980): at android.os.Handler.dispatchMessage(Handler.java:99)
 12-11 12:08:42.418: WARN/System.err(980):     at android.os.Looper.loop(Looper.java:123)
 12-11 12:08:42.418: WARN/System.err(980):     at android.app.ActivityThread.main(ActivityThread.java:3683)
 12-11 12:08:42.418: WARN/System.err(980):     at java.lang.reflect.Method.invokeNative(Native Method)
 12-11 12:08:42.418: WARN/System.err(980):     at java.lang.reflect.Method.invoke(Method.java:507)
 12-11 12:08:42.418: WARN/System.err(980):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
 12-11 12:08:42.418: WARN/System.err(980):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
 12-11 12:08:42.418: WARN/System.err(980):     at dalvik.system.NativeStart.main(Native Method)             

Ответы [ 2 ]

3 голосов
/ 11 декабря 2011

Вы готовите экземпляр MediaPlayer асинхронно, но сразу после этого вызываете start, это вызывает исключение, так как MediaPlayer не готов.Вы должны зарегистрировать OnPreparedListener (перед тем, как позвонить prepareAsync), и в этом слушателе вызовите start():

mediaPlayer.setOnPreparedListener(new OnPreparedListener(){
    public void onPrepared(MediaPlayer mp) {
        mp.start();
    }
});
mediaPlayer.prepareAsync();
1 голос
/ 11 декабря 2011

вызов .prepareAsync() переводит игрока в состояние подготовки, а не подготовки. Так что либо позвоните .prepare вместо этого, либо внедрите и зарегистрируйте OnPreparedListener, который затем вызывает start()

...