Как гласит название, я в основном задаюсь вопросом, работает ли поддержка потоковой передачи MediaPlayer для всех версий Android.
Вот код, который я использую сейчас, который отлично работает на моем Android 2.2:
MediaPlayer mp = new MediaPlayer();
mp.setDataSource(SHOUTCAST_STREAM);
mp.prepare();
mp.start();
Но будет ли это работать на 1.5 или 1.6? Или мне нужно создать собственную систему управления буфером для потока?
* Обновление *
Просто протестировал его на эмуляторе 1.6 и получил следующие ошибки. На эмуляторе 2.2 он работает нормально.
23:15:50.074 31 ERROR PlayerDriver Command PLAYER_INIT completed with an error or info PVMFFailure
23:15:50.074 282 ERROR MediaPlayer error (1, -1)
23:15:50.074 282 ERROR MediaPlayer io error
23:15:50.074 282 ERROR MediaPlayer java.io.IOException: Prepare failed.: status=0x1
23:15:50.074 282 ERROR MediaPlayer at android.media.MediaPlayer.prepare(Native Method)
23:15:50.074 282 ERROR MediaPlayer at org.me.bla.Bla.onCreate(Bla.java:38)
23:15:50.074 282 ERROR MediaPlayer at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
23:15:50.074 282 ERROR MediaPlayer at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364)
23:15:50.074 282 ERROR MediaPlayer at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417)
23:15:50.074 282 ERROR MediaPlayer at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3502)
23:15:50.074 282 ERROR MediaPlayer at android.app.ActivityThread.access$2200(ActivityThread.java:116)
23:15:50.074 282 ERROR MediaPlayer at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1798)
23:15:50.074 282 ERROR MediaPlayer at android.os.Handler.dispatchMessage(Handler.java:99)
23:15:50.074 282 ERROR MediaPlayer at android.os.Looper.loop(Looper.java:123)
23:15:50.074 282 ERROR MediaPlayer at android.app.ActivityThread.main(ActivityThread.java:4203)
23:15:50.074 282 ERROR MediaPlayer at java.lang.reflect.Method.invokeNative(Native Method)
23:15:50.074 282 ERROR MediaPlayer at java.lang.reflect.Method.invoke(Method.java:521)
23:15:50.074 282 ERROR MediaPlayer at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
23:15:50.074 282 ERROR MediaPlayer at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
23:15:50.074 282 ERROR MediaPlayer at dalvik.system.NativeStart.main(Native Method)
Значит ли это, что это просто не работает в более старых версиях ОС, или есть какая-нибудь работа? Я предполагаю, что могу просто создать собственную систему буферизации, но сначала хочу убедиться, что нет более простого способа.
Согласно Ссылки на Android, класс MediaPlayer был доступен с уровня api: 1, и нет ничего о том, что он устарел. Поэтому я бы сказал, что вы будете в безопасности.
На вашем 1.6-эмуляторе вы запустили браузер и убедились, что имеете доступ к Интернету?
Был ли эмулятор 1.6, который вы создали некоторое время назад? У меня были проблемы с эмуляторами, которые я создал через некоторое время (файлы повреждены). Если это так, вы можете создать новый.
Еще одна вещь, о которой я только подумал... Есть ли какая-то аутентификация?
Я нашел этот tutorial, который может быть полезен. Он создает буфер в своем примере.
Я думаю, что проблема связана с setDataSource. он не читает файл должным образом. Лучший способ читается FileInputStream и вызывает метод getFD().Ex:
MediaPlayer mPlayer = новый MediaPlayer();
FileInputStream stream = mContext.openFileInput( "string" );
mPlayer.setDataSource(stream.getFD());
stream.close();
mPlayer.setAudioStreamType(ANNOUCE_STREAM);
mAndroidPlayer.prepare();
mAndroidPlayer.start();
Я думаю, это поможет вам.