Мы транслируем аудио через http из ffserver / ffmpeg в Angstrom Linux. Аудиокодек ffmpeg - это 16-разрядный байтовый код с порядковым порядком байтов, подписанный PCM. Формат потока ffmpeg - "wav". Утверждается, что оба они поддерживаются на Android здесь: http://developer.android.com/guide/appendix/media-formats.html#core
VLC находит и воспроизводит поток без проблем.
Под VLC "Детали кодека" написано:
Тип: Аудио, Кодек: PCM S16 LE (araw)
Каналы: стерео
Частота дискретизации: 48000 Гц
Биты на образец: 16
Мы создали простое тестовое приложение ниже, чтобы взять и воспроизвести поток в Android и получить эту ошибку:
java.io.IOException: подготовить не удалось .: статус = 0x1
Мы проверили заголовок HTTP, используя HTTP Debugger Pro.
Элементы заголовка ответа (при обычной игре через VLC):
[Ответ]: HTTP / 1.0 200 OK
Прагма: без кеша
Тип контента: аудио / x-wav
Мы искали в Интернете помощь по этому вопросу более двух дней и пришли с пустыми руками. Любая помощь будет высоко оценена.
------------ ТЕСТ-ПРИЛОЖЕНИЕ ------------------------
пакет com.shaneahern.streamtest;
импорт java.io.IOException;
импорт android.app.Activity;
импорт android.media.AudioManager;
импорт android.media.MediaPlayer;
импорт android.os.Bundle;
импорт android.util.Log;
открытый класс BareBonesStreamTestActivity расширяет Activity {
@Override
public void onCreate (BundlevedInstanceState) {
super.onCreate (savedInstanceState);
String streamUrl = "http://192.168.24.123:8080/test.wav";
MediaPlayer mp = new MediaPlayer();
Log.i("BareBonesStreamTestActivity", "MediaPlayer created");
try {
mp.setDataSource(streamUrl);
Log.i("BareBonesStreamTestActivity", "setDataSource to " + streamUrl);
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
Log.i("BareBonesStreamTestActivity", "setAudioStreamType to AudioManager.STREAM_MUSIC");
mp.prepare();
Log.i("BareBonesStreamTestActivity", "prepare succeeded, calling start");
mp.start();
} catch (IllegalStateException e) {
Log.i("BareBonesStreamTestActivity", "prepare failed with IllegalStateException");
e.printStackTrace();
} catch (IOException e) {
Log.i("BareBonesStreamTestActivity", "prepare failed with IOException");
e.printStackTrace();
}
}
}
------------ ЖУРНАЛ ОШИБКИ ------------------------
I/BareBonesStreamTestActivity( 727): MediaPlayer created
I/StagefrightPlayer( 33): setDataSource('http://192.168.24.123:8080/ test.wav')
I/BareBonesStreamTestActivity( 727): setDataSource to http://192.168.24.123:8080/test.wav
I/BareBonesStreamTestActivity( 727): setAudioStreamType to AudioManager.STREAM_MUSIC
E/MediaPlayer( 727): error (1, -2147483648)
I/BareBonesStreamTestActivity( 727): prepare failed with IOException
W/System.err( 727): java.io.IOException: Prepare failed.: status=0x1
W/System.err( 727): at android.media.MediaPlayer.prepare(Native Method)
W/System.err( 727): at com.shaneahern.streamtest.BareBonesStreamTestActivity.onCreate(BareBonesStr eamTestActivity.java: 30)
W/System.err( 727): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java: 1047)
W/System.err( 727): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java: 2627)
W/System.err( 727): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java: 2679)
W/System.err( 727): at android.app.ActivityThread.access $2300(ActivityThread.java:125)
W/System.err( 727): at android.app.ActivityThread $H.handleMessage(ActivityThread.java:2033)
W/System.err( 727): at android.os.Handler.dispatchMessage(Handler.java:99)
W/System.err( 727): at android.os.Looper.loop(Looper.java:123)
W/System.err( 727): at android.app.ActivityThread.main(ActivityThread.java:4627)
W/System.err( 727): at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err( 727): at java.lang.reflect.Method.invoke(Method.java:521)
W/System.err( 727): at com.android.internal.os.ZygoteInit $MethodAndArgsCaller.run(ZygoteInit.java:868)
W/System.err( 727): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
W/System.err( 727): at dalvik.system.NativeStart.main(Native Method)