Android VideoView не воспроизводит файл *3.gp на некоторых устройствах

Добрый вечер, у меня следующая проблема. Я хочу воспроизвести видео формата *.3gp в VideoView. Я пытался использовать этот код:

  public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.mylay);
  VideoView videoHolder = new VideoView(this);
  videoHolder = (VideoView) findViewById(R.id.videoView1);
  Uri video = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.asd);
  videoHolder.setVideoURI(video);
  videoHolder.setOnPreparedListener(new OnPreparedListener() {
   public void onPrepared(MediaPlayer mp) {
        mp.start();
        mp.setLooping(true);
   }
  });
}

На эмуляторах и HTC Desire S все работает нормально. Но есть китайский планшет Onda V972, который у меня каждый раз выдает "ошибку при воспроизведении видео":

06-19 18:34:18.890: W/AudioSystem(25145): AudioFlinger server died!
06-19 18:34:18.890: W/IMediaDeathNotifier(25145): media server died
06-19 18:34:18.890: E/MediaPlayer(25145): error (100, 0)
06-19 18:34:18.890: E/MediaPlayer(25145): Error (100,0)
06-19 18:34:18.890: D/VideoView(25145): Error: 100,0

Подскажите пожалуйста, можно ли решить эту проблему. Большое спасибо. Может быть, есть другой способ загрузить видеофайл в VideoView?

ОБНОВЛЕНИЕ 21.06:

Только что обновил прошивку планшета, теперь видео воспроизводится, но не зацикливается. Я попробовал следующий код, но результат тот же - HTC и эмуляторы работают хорошо, но планшет не зацикливает видео. Пробовал и *.mp4, все равно:

VideoView videoHolder = new VideoView(this);
videoHolder = (VideoView) findViewById(R.id.videoView1);
// videoHolder.setMediaController(new MediaController(this));
Uri video = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.asd);
videoHolder.setVideoURI(video);
// setContentView(videoHolder);

videoHolder.setOnPreparedListener(new OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mp) {
        mp.setLooping(true);
        mp.start();
    }
});

videoHolder
        .setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                mp.mp.seekTo(0);
                mp.start();
            }

        });

Вопрос: как сделать так, чтобы видео зацикливалось на всех устройствах?


person Pavel Plaxin    schedule 20.06.2013    source источник


Ответы (1)


попробуй как этот видеопросмотр установить с медиаконтроллером

public class HelloInterruptVideoStream extends Activity
{
    private String path = "http://dl.dropbox.com/u/145894/t/rabbits.3gp";
    private VideoView videoview;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        videoview = (VideoView)findViewById(R.id.surface_view);

        getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

        videoview.setVideoURI(Uri.parse(path));
        videoview.setMediaController(new MediaController(this));
        videoview.requestFocus();
        videoview.start();

    }
}
person Sunil Kumar    schedule 20.06.2013
comment
К сожалению, эффект тот же. Вроде бы таких устройств много, и очень хотелось бы, чтобы на всех устройствах видео работало корректно.. - person Pavel Plaxin; 20.06.2013