No puedo reproducir video mp4 en mi aplicación para Android

Quiero muy jugar video mp4 en mi aplicación android. Incluso escribí un poco de código para ello:

String sourceUrl = "http://tvstream.cn.ru/storage/1kanal/20120530/" + "1kanal-20120530-01-14-00-20120530-03-16-00.mp4"; final VideoView videoView = (VideoView) findViewById(R.id.videoView); getWindow().setFormat(PixelFormat.TRANSLUCENT); final MediaController mediaController = new MediaController(this); mediaController.setMediaPlayer(videoView); videoView.setMediaController(mediaController); videoView.setVideoURI(Uri.parse(sourceUrl)); videoView.setOnPreparedListener(new OnPreparedListener() { public void onPrepared(MediaPlayer mp) { videoView.requestFocus(); videoView.start(); mediaController.show(); } }); 

Pero nada funciona 🙁 Cuando lanzo mi aplicación en el emulador (Android 2.3.3) Tengo stacktrace extraño con algunos códigos de error comunes:

Después de pocas horas de google y experimentos decidí intentar lanzar mi aplicación en el dispositivo real y ver logcat:

 D/test.tv.activity.PlayerActivity( 3428): Player source: http://tvstream.cn.ru/storage/1kanal/20120530/1kanal-20120530-01-14-00-20120530-03-16-00.mp4 D/VideoView( 3428): onMeasure() I/VideoView( 3428): Setting size: 320x430 I/Launcher( 260): onWindowFocusChanged(false) D/Launcher( 260): setWallpaperDimension() called D/Launcher( 260): USE_NON_SCROLLABLE_IMAGE_WALLPAPER is true I/ActivityManager( 163): Start proc org.reactivephone for broadcast org.reactivephone/ru.yandex.common.clid.ClidBroadcastReceiver: pid=3448 uid=10073 gids={1015, 3003} I/ActivityManager( 163): No longer want com.sec.android.provider.badge (pid 2310): hidden #16 I/MediaPlayer( 3428): uri is:http://tvstream.cn.ru/storage/1kanal/20120530/1kanal-20120530-01-14-00-20120530-03-16-00.mp4 I/MediaPlayer( 3428): path is null D/MediaPlayer( 3428): Couldn't open file on client side, trying server side D/Launcher( 260): It's image wallpaper. suggestDesiredDimensions(-1,-1) I/ActivityManager( 163): Displayed test.tv/.activity.PlayerActivity: +943ms D/VideoView( 3428): onMeasure() I/VideoView( 3428): Setting size: 320x430 W/dalvikvm( 3406): threadid=5: spin on suspend #1 threadid=22 (pcf=0) W/dalvikvm( 3406): threadid=5: spin on suspend resolved in 1154 msec W/SearchableInfo( 163): Invalid searchable metadata for org.reactivephone/.ui.RegionForm: Search label must be a resource reference. I/ActivityManager( 163): Start proc com.google.android.googlequicksearchbox for broadcast com.google.android.googlequicksearchbox/.SourceUpdateReceiver: pid=3457 uid=10027 gids={3003} I/WindowOrientationListener( 163): orientation 295.6932 gives new rotation = 2 I/OrientationDebug( 163): [pwm] in MyOrientationListener.onOrientationChanged() rotation=3 mFancyRotationAnimation=0 now call mWindowManager.setRotation() I/OrientationDebug( 163): [wms] in setRotation() rotation=3 alwaysSendConfiguration=false animFlags=0 I/OrientationDebug( 163): [wms] in setRotation() now call setRotationUnchecked() I/WindowManager( 163): Setting rotation to 3, animFlags=0 I/ActivityManager( 163): Config changed: { scale=1.0 imsi=250/1 loc=ru_RU touch=3 keys=1/1/2 nav=1/1 orien=2 layout=18 uiMode=17 seq=7} D/PhoneApp( 241): updateProximitySensorMode: lock already released. I/ActivityThread( 3457): Pub com.google.android.googlequicksearchbox.shortcuts: com.google.android.googlequicksearchbox.WebHistoryProvider I/ActivityThread( 3457): Pub com.google.android.googlequicksearchbox.google: com.google.android.googlequicksearchbox.google.GoogleSuggestionProvider I/ActivityManager( 163): No longer want com.sec.android.widgetapp.clockweather.clockwidget (pid 1214): hidden #16 D/Finsky ( 3406): [1] 2.run: Loaded library for account: [Y091GklnFtI4Ab1gmLOw-nJkJXQ] D/Finsky ( 3406): [1] 2.run: Finished loading 1 libraries. W/dalvikvm( 3406): VFY: unable to resolve instance field 78 D/DfeApi ( 3406): [1] DfeApiContext.getSmallestScreenWidthDp: smallestScreenWidthDp does not exist, using pre-ics hack. E/QCvdec ( 95): Setparameter: unknown param 2130706451 W/TimedEventQueue( 95): Event 3 was not found in the queue, already cancelled? E/QCvdec ( 95): Omx Flush issued when vdec is not initialized yet. W/QCvdec ( 95): ====================================================================== W/QCvdec ( 95): Open Max Statistics W/QCvdec ( 95): ====================================================================== W/QCvdec ( 95): empty this buffer rate = NaN W/QCvdec ( 95): empty this buffer total time = 0 W/QCvdec ( 95): empty this buffer count = 0 W/QCvdec ( 95): ====================================================================== D/test.tv.activity.PlayerActivity( 3428): Player source: http://tvstream.cn.ru/storage/1kanal/20120530/1kanal-20120530-01-14-00-20120530-03-16-00.mp4 D/VideoView( 3428): onMeasure() I/VideoView( 3428): Setting size: 480x270 I/MediaPlayer( 3428): uri is:http://tvstream.cn.ru/storage/1kanal/20120530/1kanal-20120530-01-14-00-20120530-03-16-00.mp4 I/MediaPlayer( 3428): path is null D/MediaPlayer( 3428): Couldn't open file on client side, trying server side D/VideoView( 3428): onMeasure() I/VideoView( 3428): Setting size: 480x270 D/WifiService( 163): [mPersistState] : On D/BatteryService( 163): update start D/BatteryService( 163): update start D/BatteryService( 163): update start E/QCvdec ( 95): Setparameter: unknown param 2130706451 I/VideoView( 3428): start() D/WifiService( 163): [mPersistState] : On D/WifiService( 163): [mPersistState] : On D/WifiWatchdogService( 163): (android.server.ServerThread) wntk (1c:af:f7:2e:7f:c8) does not require the watchdog E/QCvdec ( 95): Unsupported profile, level, or widht, height E/QCvdec ( 95): Unsupported clip E/QCvdec ( 95): Unsupported profile, level, or widht, height E/QCvdec ( 95): Unsupported clip E/QCvdec ( 95): Omx Flush issued when vdec is not initialized yet. E/QCvdec ( 95): Omx Flush issued when vdec is not initialized yet. E/QCvdec ( 95): Empty this buffer in Invalid State E/OMXCodec( 95): [OMX.qcom.video.decoder.avc] ERROR(0x8000100a, 0) E/OMXCodec( 95): [OMX.qcom.video.decoder.avc] ERROR(0x8000100a, 0) E/OMXCodec( 95): read : mState[9] is wrong... E/MediaPlayer( 3428): error (1, -2147483648) E/OMXCodec( 95): [OMX.qcom.video.decoder.avc] ERROR(0x8000100a, 0) E/QCvdec ( 95): Omx Flush issued when vdec is not initialized yet. D/VideoView( 3428): onMeasure() I/VideoView( 3428): Setting size: 335x270 I/VideoView( 3428): start() E/MediaPlayer( 3428): start called in state 0 E/MediaPlayer( 3428): error (-38, 0) E/MediaPlayer( 3428): Error (1,-2147483648) D/VideoView( 3428): Error: 1,-2147483648 E/MediaPlayer( 3428): Error (-38,0) D/VideoView( 3428): Error: -38,0 D/PowerManagerService( 163): reactivateScreenLocksLocked mProxIgnoredBecauseScreenTurnedOff=false I/PowerManagerService( 163): Ulight 1->3|0 W/InputManagerService( 163): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@40873ab8 I/PowerManagerService( 163): Light Animator Finished curIntValue=141 D/Finsky ( 3406): [1] 5.onFinished: Installation state replication succeeded. D/BatteryService( 163): update start D/BatteryService( 163): update start D/BatteryService( 163): update start 

Intento encontrar algo sobre "OMX.qcom.video.decoder.avc] ERROR (0x8000100a, 0)", pero no encontré nada interesante. Acerca de "No se pudo abrir el archivo en el lado del cliente, intentando el lado del servidor" problema stackoverflow tiene muchas respuestas, pero nadie ayudó.

Cuando lanzo esta aplicación en ICS (en emulador) tengo errores similares:

 06-01 10:22:14.674: I/NuCachedSource2(37): ERROR_END_OF_STREAM 06-01 10:22:15.375: I/OMXCodec(37): [OMX.google.h264.decoder] AVC profile = 100 (High), level = 30 06-01 10:22:15.384: I/OMXCodec(37): [OMX.google.h264.decoder] video dimensions are 320 x 240 06-01 10:22:15.384: I/OMXCodec(37): [OMX.google.h264.decoder] Crop rect is 320 x 240 @ (0, 0) 06-01 10:22:16.253: W/NetworkManagementSocketTagger(89): setKernelCountSet(10013, 0) failed with errno -2 06-01 10:22:16.374: I/Launcher(553): setLoadOnResume 06-01 10:22:16.584: D/MediaPlayer(602): getMetadata 06-01 10:22:16.614: I/NuCachedSource2(37): new range: offset= 0 06-01 10:22:16.694: I/ChromiumHTTPDataSource(37): connect to http://tvstream.cn.ru/storage/1kanal/20120530/1kanal-20120530-01-14-00-20120530-03-16-00.mp4 @0 06-01 10:22:16.834: E/SoftAVC(37): Decoder failed: -2 06-01 10:22:16.844: E/OMXCodec(37): [OMX.google.h264.decoder] ERROR(0x80001001, -1007) 06-01 10:22:16.884: D/AudioSink(37): bufferCount (4) is too small and increased to 12 

Como ya sé, Android soporta la reproducción de vídeo decodificado con h264 (http://developer.android.com/guide/appendix/media-formats.html). Entonces, ¿alguien puede decirme qué hago mal?

Probablemente su archivo está usando un perfil no admitido, observe que la página de formatos de medios oficiales sólo muestra el Perfil de línea de base como se admite para H.264 AVC.

Trate de transcodificar el video especificando Perfil de línea de base como se sugiere en esta pregunta stackoverflow , es decir, si su contenedor es MP4:

 ffmpeg -i yourfile.mp4 -c:v libx264 -profile:v baseline -level 1 yourfile_BaselineProfile.mp4 

Si esto funciona no es un problema en su código, sólo tiene que utilizar formatos compatibles.

Prueba esto

 File clip=new File(Environment.getExternalStorageDirectory(), "test.mp4"); if (clip.exists()) { video=(VideoView)findViewById(R.id.video); video.setVideoPath(clip.getAbsolutePath()); ctlr=new MediaController(this); ctlr.setMediaPlayer(video); video.setMediaController(ctlr); video.requestFocus(); video.start(); 

Las clases de VideoView no permiten reproducir videos de formato de archivo MP4. Vaya a través de este enlace para los formatos de medios de Android . Intente revisar su video con Daroon Player

  • Prácticas recomendadas para la transmisión de audio
  • Escucha de cambio de estado para MediaPlayer
  • ¿Establecer el tiempo de espera de MediaPlayer?
  • Cómo mostrar el mini controlador en la parte inferior o controles de medios persistentes como spotify o Google música en la aplicación completa
  • Varios MediaPlayers no funcionan en Nexus 5
  • Detener Android MediaPlayer iniciado automáticamente por la página web en WebView
  • Android MediaPlayer Live Streaming detiene después de aproximadamente 1 minuto en Samsung Galaxy S4 y S5
  • ¿Cómo puedo consultar uri para la canción de la memoria interna
  • Cómo jugar mp3 + g en mediaplayer android
  • Posiciona MediaController dentro de un Fragmento
  • Media Player Looping: Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.