Странное поведение с медиапланером и seekTo

Я реализую пользовательский видеоплеер, потому что мне нужны пользовательские элементы управления видео. У меня есть приложение только с одним действием, которое при запуске должно сразу начать воспроизведение видео.

Теперь у меня проблема:

Я не хочу, чтобы видео начиналось с самого начала, но с более поздней позиции. Поэтому я делаю seekTo (16867). Поскольку seekTo является асинхронным, я помещаю стартовый вызов медиаплеера (player.start ()) в onSeekComplete для onSeekCompleteListener.

Странное поведение, которое я испытываю, заключается в том, что я могу видеть / слышать видео, воспроизводимое с самого начала, в течение нескольких миллисекунд, прежде чем он начнет играть с / прыгает в позицию, к которой я стремился. Но – с другой стороны – выход Log, который я вызываю перед воспроизведением player.start, возвращает правильную позицию 16867, к которой я стремился.

Ниже приведен соответствующий раздел кода, полный класс находится по адресу http://pastebin.com/jqAAFsuX.

(Я нахожусь на Nexus One / 2.2 StageFright)

private void playVideo(String url) { try { btnVideoPause.setEnabled(false); if (player==null) { player=new MediaPlayer(); player.setScreenOnWhilePlaying(true); } else { player.stop(); player.reset(); } url = "/sdcard/myapp/main/videos/main.mp4"; // <--- just for test purposes hardcoded here now player.setDataSource(url); player.setDisplay(holder); player.setAudioStreamType(AudioManager.STREAM_MUSIC); player.setOnCompletionListener(this); player.setOnPreparedListener(this); player.setOnSeekCompleteListener(new MediaPlayer.OnSeekCompleteListener() { public void onSeekComplete(MediaPlayer mediaPlayer) { Log.d("APP", "current pos... "+ player.getCurrentPosition() ); player.start(); // <------------------ start video on seek completed player.setOnSeekCompleteListener(null); } }); player.prepareAsync(); } catch (Throwable t) { Log.e(TAG, "Exception in btnVideoPause prep", t); } } public void onPrepared(MediaPlayer mediaplayer) { width=player.getVideoWidth(); height=player.getVideoHeight(); if (width!=0 && height!=0) { holder.setFixedSize(width, height); progressBar.setProgress(0); progressBar.setMax(player.getDuration()); player.seekTo(16867); // <------------------ seeking to position } btnVideoPause.setEnabled(true); } 

Поскольку я также не получил никакого ответа из списка разработчиков Android и нашел похожие проблемы в Интернете, я считаю, что это ошибка. Я отправил отчет об ошибке на странице http://code.google.com/p/android/issues/detail?id=9135

Intereting Posts
Как получить покрытие для Android-проекта с помощью тестов Espresso Перетаскивание элементов в списке в android? HashMap с байтовым массивом и значением String – containsKey () не работает SDK Google Analytics для Android v2 (бета) setCustomVar () Как обмениваться папкой приложений с другим пользователем Dropbox Можно ли выпустить дамп кучи Android из командной строки? Как отладить проблему с веб-просмотром при загрузке URL-адреса веб-сайта в android Как вычесть два объекта календаря в Android ActivityNotFoundException (YES, это действие объявлено в AndroidManifest.xml) Соединение между Python Server и Android-приложением Как реализовать эффект масштабирования для представления изображения в Android? Вложенные фрагменты getchildfragmentmanager, вызывающие сбой Приложение неправильно сконфигурировано для входа в систему Facebook с помощью ключа ключа Хэш Как обнаружить групповую SMS-беседу Наблюдение за входящими звонками в Android-приложении поддерживает пробуждение телефона