0

i am creating an application that in it i need to play some sounds with low bit rates such as 16kbps.

I use MediaPlayer with below code. but it cannot play and i get Error(100, 0) in logcat. when i replace audio with 48kbps OGG file or 128kbps MP3 file all thing is ok. How i can play audio with 16kbps bit rate?

I have this problem only on Kitkat

player = new MediaPlayer();
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
        try {
            Class<?> cMediaTimeProvider = Class.forName("android.media.MediaTimeProvider");
            Class<?> cSubtitleController = Class.forName("android.media.SubtitleController");
            Class<?> iSubtitleControllerAnchor = Class.forName("android.media.SubtitleController$Anchor");
            Class<?> iSubtitleControllerListener = Class.forName("android.media.SubtitleController$Listener");

            Constructor constructor = cSubtitleController.getConstructor(new Class[]{Context.class, cMediaTimeProvider, iSubtitleControllerListener});

            Object subtitleInstance = constructor.newInstance(activity, null, null);

            Field f = cSubtitleController.getDeclaredField("mHandler");

            f.setAccessible(true);
            try {
                f.set(subtitleInstance, new Handler());
            } catch (IllegalAccessException ignored) {
            } finally {
                f.setAccessible(false);
            }

            Method setsubtitleanchor = player.getClass().getMethod("setSubtitleAnchor", cSubtitleController, iSubtitleControllerAnchor);

            setsubtitleanchor.invoke(player, subtitleInstance, null);
            //Log.e("", "subtitle is setted :p");
        } catch (Exception e) {
        }
    }
    player.setWakeMode(activity,
            PowerManager.PARTIAL_WAKE_LOCK);

    player.setAudioStreamType(AudioManager.STREAM_MUSIC);

    this.seekbar = seekbar;

    player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mediaPlayer) {
            finalTime = player.getDuration();
            timeElapsed = mediaPlayer.getCurrentPosition();
            seekbar.setMax(finalTime);
            init();

            remaining.setText(miliToTime(finalTime));
            elapsed.setText("0:00:00");
            durationHandler.postDelayed(updateSeekBarTime, 100);
        }
    });

    player.setOnErrorListener(this);


    player.setDataSource(musicPath);
    player.prepareAsync();

0 Answers0