Error de MediaPlayer de Android (1, -2147483648)

Tengo dos videos diferentes que estoy tratando de cargar en un VideoView usando

 videoView.setVideoURI(Uri.parse(url)); 

Los dos videos, déjalos ser el video 1 y el video 2 , tienen las siguientes especificaciones (extraídas usando ffmpeg -i ); de hecho, son dos codificaciones diferentes del mismo video:

  1. Video 1:

     Seems stream 0 codec frame rate differs from container frame rate: 180000.00 (180000/1) -> 90000.00 (180000/2) Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '4fbfd5ece4b0932236fc234d.mp4': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: mp42isomavc1 creation_time : 2011-12-03 04:43:46 genre : Trailer artist : Paramount Pictures title : Captain America: The First Avenger - Theatrical Trailer #2 encoder : HandBrake 4344svn 2011111001 date : 2011 Duration: 00:02:30.67, start: 0.000000, bitrate: 6738 kb/s Stream #0.0(und): Video: h264 (High), yuv420p, 1920x800 [PAR 1:1 DAR 12:5], 6575 kb/s, 23.97 fps, 90k tbr, 90k tbn, 180k tbc Metadata: creation_time : 2011-12-03 04:43:46 Stream #0.1(eng): Audio: aac, 48000 Hz, stereo, s16, 159 kb/s Metadata: creation_time : 2011-12-03 04:43:46 
  2. Video 2:

     Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '500416ea44aeb4b95d5ae8a0_hd.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 creation_time : 2011-12-03 04:43:46 title : Captain America: The First Avenger - Theatrical Trailer #2 artist : Paramount Pictures date : 2011 encoder : Lavf53.32.100 genre : Trailer Duration: 00:02:30.69, start: 0.000000, bitrate: 2045 kb/s Stream #0.0(und): Video: h264 (High), yuv420p, 1280x720 [PAR 27:20 DAR 12:5], 1889 kb/s, 23.99 fps, 90k tbr, 180k tbn, 180k tbc Metadata: creation_time : 2011-12-03 04:43:46 Stream #0.1(eng): Audio: aac, 44100 Hz, stereo, s16, 151 kb/s Metadata: creation_time : 2011-12-03 04:43:46 

Soy consciente de que el soporte de AAC vino con Honeycomb, y por lo tanto probé los videos con varios dispositivos; Los resultados se dan a continuación:

  1. SGS II with custom 4.0.3 OS(Sensation ROM 3.4 with CF-Root kernel) - Video 1:OK - Video2:OK
  2. SGS I with Samsung 2.3.3 OS - Video 1:error (1, -2147483648) - Video 2:OK
  3. SGS I with custom 4.0.3 OS(ICS SGS TEAM ROM with Devil kernel) - Video 1:error (1, -2147483648) - Video 2:OK
  4. Nexus One with original 2.3.6 OS - Video 1:See (1) below - Video 2:See (2) below
  5. Emulator with 2.2 OS - Video 1:error (1, -2147483648) - Video 2:error (1, -2147483648)
  6. Emulator with 4.0.3 OS - Video 1:error (1, -2147483648) - Video 2:error (1, -2147483648)

Ambos videos funcionan bien en Google Chrome en una PC. Puede ser útil agregar que, en el caso OK, el video y el audio se reproducen correctamente. En el caso de error (1, -2147483648), el mismo registro se arroja desde todos los dispositivos (excepto Nexus One):

 07-18 10:25:10.996: I/MediaPlayer(17860): uri is:http://s3-eu-west-1.amazonaws.com/cf-templates-k6ohn88yswx5-eu-west-1/videos/4fbc88e7e4b0b0896e877764/4fbfd5ece4b0932236fc234d.mp4 07-18 10:25:10.996: I/MediaPlayer(17860): path is null 07-18 10:25:10.996: D/MediaPlayer(17860): Couldn't open file on client side, trying server side 07-18 10:25:39.859: D/MediaPlayer(17860): getMetadata 07-18 10:25:45.070: E/MediaPlayer(17860): error (1, -2147483648) 07-18 10:25:45.074: E/MediaPlayer(17860): Error (1,-2147483648) 07-18 10:25:45.078: D/VideoView(17860): Error: 1,-2147483648 

En el (1) caso, el siguiente registro se arrojó desde Nexus One, y el video nunca se carga:

 07-18 13:49:20.115: D/MediaPlayer(10109): Couldn't open file on client side, trying server side 07-18 13:49:20.115: I/StagefrightPlayer(68): setDataSource('http://s3-eu-west-1.amazonaws.com/cf-templates-k6ohn88yswx5-eu-west-1/videos/4fbc88e7e4b0b0896e877764/4fbfd5ece4b0932236fc234d.mp4') 07-18 13:49:20.135: I/NuHTTPDataSource(68): connect to s3-eu-west-1.amazonaws.com:80/cf-templates-k6ohn88yswx5-eu-west-1/videos/4fbc88e7e4b0b0896e877764/4fbfd5ece4b0932236fc234d.mp4 @0 07-18 13:49:20.155: I/ActivityManager(98): Displayed com.woisio/.video.VideoActivity: +450ms 07-18 13:49:20.795: I/NuCachedSource2(68): Keep alive 07-18 13:49:22.185: I/OMXCodec(68): [OMX.qcom.video.decoder.avc] allocating 4 buffers of size 460800 on input port 07-18 13:49:22.195: I/OMXCodec(68): [OMX.qcom.video.decoder.avc] allocating 8 buffers of size 2304000 on output port 07-18 13:49:25.325: D/dalvikvm(9499): GC_EXPLICIT freed 13K, 50% free 2726K/5379K, external 1625K/2137K, paused 116ms 07-18 13:49:27.525: I/NuCachedSource2(68): Keep alive 07-18 13:49:28.235: I/NuCachedSource2(68): Cache full, done prefetching for now 07-18 13:49:30.275: D/dalvikvm(9902): GC_EXPLICIT freed 8K, 50% free 2714K/5379K, external 1625K/2137K, paused 69ms 07-18 13:49:34.255: D/Finsky(9066): [1] 5.onFinished: Installation state replication succeeded. 07-18 13:49:35.855: I/NuCachedSource2(68): Keep alive 07-18 13:49:39.055: D/dalvikvm(9911): GC_EXPLICIT freed 22K, 50% free 2710K/5379K, external 1625K/2137K, paused 38ms 07-18 13:49:42.575: I/NuCachedSource2(68): Keep alive 07-18 13:49:43.285: I/NuCachedSource2(68): Keep alive 07-18 13:49:44.095: D/dalvikvm(9918): GC_EXPLICIT freed 7K, 50% free 2708K/5379K, external 1625K/2137K, paused 66ms 07-18 13:49:49.085: D/dalvikvm(9925): GC_EXPLICIT freed 15K, 49% free 3268K/6407K, external 1625K/2137K, paused 50ms 07-18 13:49:50.925: I/NuCachedSource2(68): Keep alive 07-18 13:49:54.115: D/dalvikvm(6756): GC_EXPLICIT freed 9K, 44% free 3774K/6727K, external 1625K/2137K, paused 77ms 07-18 13:49:57.685: I/NuCachedSource2(68): Keep alive 07-18 13:49:58.375: I/NuCachedSource2(68): Keep alive 07-18 13:49:59.105: D/dalvikvm(9066): GC_EXPLICIT freed 385K, 53% free 3186K/6727K, external 1625K/2137K, paused 66ms 07-18 13:50:05.955: I/NuCachedSource2(68): Keep alive 07-18 13:50:06.045: D/dalvikvm(8047): GC_EXPLICIT freed 9K, 47% free 3830K/7111K, external 1625K/2137K, paused 86ms 07-18 13:50:09.465: I/3gw.Service(488): Mobile Network not connected - not roaming 07-18 13:50:12.765: I/NuCachedSource2(68): Keep alive 07-18 13:50:13.465: I/NuCachedSource2(68): Keep alive 07-18 13:50:18.775: I/WindowManager(98): Setting rotation to 3, animFlags=0 07-18 13:50:18.795: I/ActivityManager(98): Config changed: { scale=1.0 imsi=286/2 loc=en_US touch=3 keys=1/1/2 nav=3/1 orien=2 layout=34 uiMode=17 seq=34} 07-18 13:50:18.895: D/dalvikvm(169): GC_EXTERNAL_ALLOC freed 108K, 48% free 3253K/6215K, external 5172K/5180K, paused 37ms 07-18 13:50:21.005: I/NuCachedSource2(68): Keep alive 07-18 13:50:21.265: D/dalvikvm(98): GC_EXPLICIT freed 394K, 42% free 6631K/11335K, external 4458K/5567K, paused 109ms 

En el (2) caso, el siguiente registro se arrojó desde Nexus One y, como puede ver, termina con un error (1, -2147483648):

 07-18 13:47:03.595: D/MediaPlayer(10059): Couldn't open file on client side, trying server side 07-18 13:47:03.595: I/StagefrightPlayer(68): setDataSource('http://s3-eu-west-1.amazonaws.com/cf-templates-k6ohn88yswx5-eu-west-1/videos/4ff4514444aec3d2f9f07ead/500416ea44aeb4b95d5ae8a0_hd.mp4') 07-18 13:47:03.605: I/NuHTTPDataSource(68): connect to s3-eu-west-1.amazonaws.com:80/cf-templates-k6ohn88yswx5-eu-west-1/videos/4ff4514444aec3d2f9f07ead/500416ea44aeb4b95d5ae8a0_hd.mp4 @0 07-18 13:47:03.625: I/ActivityManager(98): Displayed com.woisio/.video.VideoActivity: +505ms 07-18 13:47:05.355: I/OMXCodec(68): [OMX.qcom.video.decoder.avc] allocating 4 buffers of size 460800 on input port 07-18 13:47:05.355: I/OMXCodec(68): [OMX.qcom.video.decoder.avc] allocating 8 buffers of size 1382400 on output port 07-18 13:47:05.365: I/NuCachedSource2(68): Keep alive 07-18 13:47:08.375: D/MediaPlayer(10059): getMetadata 07-18 13:47:08.745: D/dalvikvm(9925): GC_EXPLICIT freed 651K, 49% free 3275K/6407K, external 1625K/2137K, paused 68ms 07-18 13:47:09.205: I/3gw.Service(488): Mobile Network not connected - not roaming 07-18 13:47:11.565: I/NuCachedSource2(68): Cache full, done prefetching for now 07-18 13:47:12.095: I/NuCachedSource2(68): Keep alive 07-18 13:47:14.245: W/QCvdec(68): H264_Utils::check_header 07-18 13:47:14.245: W/QCvdec(68): check_header: start code 33 07-18 13:47:14.245: W/QCvdec(68): H264_Utils::check_header 07-18 13:47:14.245: W/QCvdec(68): check_header: start code 10 07-18 13:47:14.245: W/QCvdec(68): Parsing Error unsupported profile or level 07-18 13:47:14.245: W/QCvdec(68): ETB in Invalid State 07-18 13:47:14.245: E/OMXCodec(68): [OMX.qcom.video.decoder.avc] ERROR(0x8000100a, 0) 07-18 13:47:14.245: E/MediaPlayer(10059): error (1, -2147483648) 07-18 13:47:14.285: E/MediaPlayer(10059): Error (1,-2147483648) 07-18 13:47:14.285: D/VideoView(10059): Error: 1,-2147483648 

Por lo que he leído, el error (1, -2147483648) puede corresponder a códecs no admitidos, metadatos corruptos o encabezados de archivo incorrectos. Si es así, ¿podría señalarme en la dirección correcta para usar qué códec? Gracias.

Solo para aclarar algo para cualquiera que lea esta pregunta en función del título.

Al mirar el valor de error (1, -2147483648), el valor ‘1’ corresponde a la constante en MediaPlayer.MEDIA_ERROR_UNKNOWN .

-2147483648 corresponde a hexadecimal 0x80000000 que se define como UNKNOWN_ERROR en frameworks / native / include / utils / Errors.h

Esto muestra que la fuente del error es difícil de precisar, ya que es un valor de retorno bastante genérico, arrojado por codec y problemas de compatibilidad como se mencionó anteriormente, pero también cancelaciones de subprocesos y varios otros tipos.

Para su problema, recomendaría consultar los formatos de medios admitidos por Android con versiones compatibles de Android y ver si el tipo de encoding es la causa de su problema, pero como se mencionó anteriormente, la respuesta de error desconocido puede ser causada por una serie de problemas.

Para la transmisión, el sitio de Android tiene una nota:

Para los contenedores 3GPP y MPEG-4, el átomo moov debe preceder a cualquier átomo mdat, pero debe suceder al átomo ftyp.

Tengo el mismo error antes de mover el átomo moov . Para solucionar esto, puede usar mp4Box con este comando:

 MP4Box -hint output.mp4 

La mayoría de mis videos pueden transmitirse después de eso. Si no funciona, intente esto con ffmpeg:

 ffmpeg -i input.flv -f mp4 -vcodec libx264 -vprofile baseline -acodec libfaac -ar 16k -ab 32k output.mp4 MP4Box -hint output.mp4 

Hay otras herramientas que puedes encontrar aquí .

Cuide el tipo de medio de soporte y la resolución de su dispositivo. error (1, -2147483648) frecuencia, el error de error (1, -2147483648) aparece cuando el dispositivo no admite el tipo de medio de video, los códecs o la resolución.

Verifique el tipo de medio admitido por Android en la documentación:

https://developer.android.com/guide/appendix/media-formats.html

Por ejemplo, podemos observar que el dispositivo por encima de 3.0 admite .mp4, pero no todos admiten HD 720p.

Tuve un problema similar. En mi caso, el video funcionaría bien cuando lo descargué al teléfono primero y luego lo reproduje. Pero cuando traté de usar HTTP progresivo obtendría el mismo error que se menciona en el PO.

Verifiqué que los átomos ftyp, moov y mdat estaban en el orden correcto. Resultó que el problema era el valor del campo ftyp. Fue establecido en ‘qt’. Usé MP4Box para extraer las pistas y crear un nuevo archivo mp4 que tenía el ftyp configurado en ‘isom’. Este nuevo archivo funcionó bien para HTTP progresivo.

También estoy recibiendo el mismo error de error MEDIA_ERROR_UNKNOWN para reproducir video (rtsp).

En mi caso, estoy teniendo problemas con mi wifi. Algunas razones de seguridad wifi están restringidas para el protocolo RTSP. Para que me enfrente a este problema de error MEDIA_ERROR_UNKNOWN. Una vez que verifique con sus permisos de red.

Cuando me estoy moviendo a datos móviles para reproducir video, está funcionando bien para mí. Puede ser que esto sea útil para quien enfrenta el mismo tipo de error :).

En mi caso, el error se debió a que el reproductor de medios no tenía permisos de archivo en el video almacenado localmente. Intente almacenar el video en el directorio /mnt/sdCARD .

Estaba enfrentando el mismo problema, pero lo que hice de mi lado es

Primero detengo el reproductor multimedia y luego lo lanzo.

mMediaPlayer.stop (); mMediaPlayer.release ();

Resolví esto de la misma manera que en la respuesta de @ nam-trung, sin embargo, como mis videos ya eran h264 y mp4, todo lo que tenía que hacer era ejecutar lo siguiente en cada archivo:

 ffmpeg -i input.mp4 -vprofile baseline output.mp4 

Después de eso, todos los videos funcionaron en VideoView cuando se ejecutaron en todos los dispositivos que probé al ejecutar API v19 a v25.

En mi caso, ¡este problema fue causado por una URL de medios con espacios! Aquí está la solución:

 mMediaPlayer.setDataSource(source.replaceAll(" ", "%20"));