2011-06-26 3 views
3

code:Live Streaming plantage sur Honeycomb

 path = "httplive://<host>/moviets/index.m3u8"; 
     // Create a new media player and set the listeners 
     mMediaPlayer = new MediaPlayer(); 
     mMediaPlayer.setDataSource(path); 
     mMediaPlayer.setOnErrorListener(this); 
     mMediaPlayer.setDisplay(holder); 
     mMediaPlayer.prepare(); // Crashes here. prepareAsync() does not help either 
     mMediaPlayer.setOnBufferingUpdateListener(this); 
     mMediaPlayer.setOnCompletionListener(this); 
     mMediaPlayer.setOnPreparedListener(this); 
     mMediaPlayer.setOnVideoSizeChangedListener(this); 
     mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
     mMediaPlayer.start(); 

Trace de la pile:

ERROR/MediaPlayer(1349): error (100, 0) 
ERROR/MediaPlayerDemo(1349): error: Prepare failed.: status=0x64 
ERROR/MediaPlayerDemo(1349): java.io.IOException: Prepare failed.: status=0x64 
ERROR/MediaPlayerDemo(1349):  at android.media.MediaPlayer.prepare(Native Method) 
ERROR/MediaPlayerDemo(1349):  at com.example.Example.VideoPlayerActivity.playVideo(VideoPlayerActivity.java:81) 
ERROR/MediaPlayerDemo(1349):  at com.example.Example.VideoPlayerActivity.surfaceCreated(VideoPlayerActivity.java:138) 
ERROR/MediaPlayerDemo(1349):  at android.view.SurfaceView.updateWindow(SurfaceView.java:565) 
ERROR/MediaPlayerDemo(1349):  at android.view.SurfaceView.access$000(SurfaceView.java:84) 
ERROR/MediaPlayerDemo(1349):  at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:173) 
ERROR/MediaPlayerDemo(1349):  at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:590) 
ERROR/MediaPlayerDemo(1349):  at android.view.ViewRoot.performTraversals(ViewRoot.java:1325) 
ERROR/MediaPlayerDemo(1349):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1944) 
ERROR/MediaPlayerDemo(1349):  at android.os.Handler.dispatchMessage(Handler.java:99) 
ERROR/MediaPlayerDemo(1349):  at android.os.Looper.loop(Looper.java:126) 
ERROR/MediaPlayerDemo(1349):  at android.app.ActivityThread.main(ActivityThread.java:3997) 
ERROR/MediaPlayerDemo(1349):  at java.lang.reflect.Method.invokeNative(Native Method) 
ERROR/MediaPlayerDemo(1349):  at java.lang.reflect.Method.invoke(Method.java:491) 
ERROR/MediaPlayerDemo(1349):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
ERROR/MediaPlayerDemo(1349):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 
ERROR/MediaPlayerDemo(1349):  at dalvik.system.NativeStart.main(Native Method) 
DEBUG/MediaPlayerDemo(1349): surfaceChanged called 

Logcat:

DEBUG/MediaPlayerDemo(1349): surfaceCreated called 
INFO/System.out(1349): the path is httplive://192.168.0.196/moviets/index.m3u8 
INFO/StagefrightPlayer(1312): setDataSource('httplive://192.168.0.196/moviets/index.m3u8') 
INFO/LiveSession(1312): onConnect 'http://192.168.0.196/moviets/index.m3u8' 
INFO/NuHTTPDataSource(1312): connect to 192.168.0.196:80/moviets/index.m3u8 @0 
INFO/NuHTTPDataSource(1312): connect to 192.168.0.196:80/moviets/index.m3u8 @0 
INFO/NuHTTPDataSource(1312): connect to 192.168.0.196:80/moviets/file5.ts @0 
INFO/avc_utils(1312): found AVC codec config (320 x 240, Baseline-profile level 3.0) 
INFO/ESQueue(1312): found something resembling an AAC syncword at offset 1017 
INFO/NuHTTPDataSource(1312): connect to 192.168.0.196:80/moviets/file6.ts @0 
INFO/ESQueue(1312): found AAC codec config (48000 Hz, 7 channels) 
INFO/ESQueue(1312): [ 06-26 17:37:17.397 1312:0x550 F/ESQueue ] 
INFO/ESQueue(1312): frameworks/base/media/libstagefright/mpeg2ts/ESQueue.cpp:255 Should not be here. 
INFO/DEBUG(31): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 
INFO/DEBUG(31): Build fingerprint: 'generic/sdk/generic:3.0/HONEYCOMB/104254:eng/test-keys' 
INFO/DEBUG(31): pid: 1312, tid: 1360 >>> /system/bin/mediaserver <<< 
INFO/DEBUG(31): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadbaad 
INFO/DEBUG(31): r0 deadbaad r1 0000000c r2 00000027 r3 00000000 
INFO/DEBUG(31): r4 00000080 r5 aff46658 r6 00000007 r7 00000000 
INFO/DEBUG(31): r8 a2b72589 r9 00012a6c 10 00100000 fp 00000001 
INFO/DEBUG(31): ip ffffffff sp 4060f488 lr aff193e9 pc aff15f58 cpsr 00000030 
INFO/NuHTTPDataSource(1312): connect to 192.168.0.196:80/moviets/file7.ts @0 
INFO/DEBUG(31):   #00 pc 00015f58 /system/lib/libc.so 
INFO/DEBUG(31):   #01 pc 00001466 /system/lib/liblog.so (__android_log_assert) 
INFO/DEBUG(31): libc base address: aff00000 

Ce que les souches moi est la ligne "trouvé config codec AAC", alors que le fichier vidéo contient un encodage mp3. Est-ce normal ou mon client Android détecte à tort MP3 comme aac? FYI, d'autres vidéos avec l'encodage aac jouent bien sur le client

Une idée?

Répondre

1

Cela ressemble à un bogue dans l'émulateur Honeycomb où Android détecte à tort le flux mp3 comme aac. FFmpeg, d'autre part, détecte correctement le flux mp3, comme ci-dessous

ffmpeg -i file6.ts 
Stream #0.1[0x101]: Audio: mp3, 48000 Hz, 2 channels, s16, 192 kb/s 

Malheureusement, Android pense qu'il est AAC

INFO/avc_utils(1312): found AVC codec config (320 x 240, Baseline-profile level 3.0) 
INFO/ESQueue(1312): found something resembling an AAC syncword at offset 1017 
INFO/NuHTTPDataSource(1312): connect to <ip>:<port>/moviets/file6.ts @0 
INFO/ESQueue(1312): found AAC codec config (48000 Hz, 7 channels) 
INFO/ESQueue(1312): [ 06-26 17:37:17.397 1312:0x550 F/ESQueue ] 
INFO/ESQueue(1312): frameworks/base/media/libstagefright/mpeg2ts/ESQueue.cpp:255 \ 
        Should not be here. 

La solution consiste à utiliser un encodage AAC. Si vous utilisez ffmpeg, utilisez l'option -acodec libfaac. Cela fonctionne pour notre projet car nous avons la liberté de choisir les formats vidéo source. Ce n'est peut-être pas nécessairement votre cas.