2013-05-23 2 views
1

Я попытался сделать Android-плеер для Android, и он отлично работает, а затем я играю музыку. Но я получил ошибку (1, -38) на 2.3, затем попытался отобразить видео на поверхности.ошибка пользовательского медиа-плеера на Android 2.3

// Mediaplayer 
    mp = new MediaPlayer(); 
    mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() 
    { 
      public void onPrepared(MediaPlayer mp) 
      {  
       isPrepared = true; 
       mp.start(); 
      } 
    }); 

    mp.setDataSource("http://commonsware.com/misc/test2.3gp"); 
    mp.prepareAsync(); 
    mp.setAudioStreamType(AudioManager.STREAM_MUSIC); 
    mp.setDisplay(surfaceHolder);//if comment this string - player is working fine 

Как это исправить?

В чем разница между медиапланерами android 2.3 и 4.0?

+0

'-38'' 'INVALID_OPERATION' (обычно вы вызывали один из методов« MediaPlayer », находясь в неправильном состоянии). Было бы хорошо знать, какой вызов вызвал ошибку. Что еще говорит logcat? – Michael

+0

Ничего, только эта ошибка. – Segrey

+0

Поскольку 'setDisplay()' можно вызывать в любом состоянии, есть хорошая вероятность, что ваша переменная 'surfaceHolder' настроена неправильно. Было бы неплохо показать код, связанный с этим. Кроме того, согласно документам, вы должны вызывать 'setAudioStreamType (...)' перед тем, как подготовить игрока для вступления в силу. –

ответ

0

Вот как вы можете это сделать:

 mp.setDataSource(url); 
     mp.setOnPreparedListener(this); 
     mp.prepareAsync(); 
    public void onPrepared(MediaPlayer player) { 
     mp.start(); 
    } 

EDIT:

Я думаю, вы должны установить слушателя ошибки с помощью setOnErrorListener, чтобы увидеть, если вы получаете любую ошибку, когда вызов setDataSource.

+0

Спасибо за совет, но у меня такая же ошибка – Segrey

0

Проблема с минами оказалась в том, что я предоставил неправильный URL-адрес для воспроизведения видео. У меня было два URL-адреса для исходных данных и один для продвижения потокового-совместимого формата. Я поставил первый по ошибке. Меняя их, я исправил свою проблему. Более старые версии Android имеют беднее поддержка HLS потокового видео (именно поэтому differnce на разных версиях Android):

  • Android 2.3 (Gingerbread)
    • Нет поддержки, несмотря на то наиболее популярной версией Android
  • Android 3.0 (Honeycomb)
    • Streams причиной планшетных устройств к сбою
  • Android 4.0 (Ice Cream Sandwich)
    • VOD потоки не ищут
    • соотношения сторон не обнаружены и деформации изображения причиной
    • Полноэкранный вызывает видео на перезагрузку с начала
  • Android 4.1+ (Jelly Bean)
    • Соотношение сторон выпуска фиксировано, но поиск по-прежнему недоступен
    • Хром не понимает HLS что приводит к обнаружению разбитого миметика
    • Включение полноэкранного просмотра видео приводит к тому, что устройства выдают ошибку и останавливаются.

Эти данные взяты из here.

0

Чтобы решить проблему с ошибкой MediaPlayer (1, -38) после вызова mediaPlayer.start() на устройстве Android 2.3, просто добавьте следующее предложение после настройки держателя поверхности.

...; surfaceHolder_.addCallback(this); surfaceHolder_.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); mediaPlayer_ = new MediaPlayer(); ...;

Для устройств, равных или выше, чем сот, нам не нужно, чтобы установить тип держателя поверхности, структура будет обрабатывать это автоматически для прикрепленного зрения поверхности к медиаплеер, поэтому код работает в Android 4.0, но не в версии 2.3.

Смежные вопросы