Tengo dos videos diferentes que estoy tratando de cargar en un VideoView
uso
videoView.setVideoURI(Uri.parse(url));
Los dos videos, que sean video 1 y video 2 , tienen las siguientes especificaciones (extraídas usando ffmpeg -i
); de hecho, son dos codificaciones diferentes del mismo video:
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
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 Honeycomb incluía compatibilidad con AAC y, por lo tanto, probé los videos con varios dispositivos; Los resultados se dan a continuación:
SGS II with custom 4.0.3 OS(Sensation ROM 3.4 with CF-Root kernel) - Video 1:OK - Video2:OK
SGS I with Samsung 2.3.3 OS - Video 1:error (1, -2147483648) - Video 2:OK
SGS I with custom 4.0.3 OS(ICS SGS TEAM ROM with Devil kernel) - Video 1:error (1, -2147483648) - Video 2:OK
Nexus One with original 2.3.6 OS - Video 1:See (1) below - Video 2:See (2) below
Emulator with 2.2 OS - Video 1:error (1, -2147483648) - Video 2:error (1, -2147483648)
Emulator with 4.0.3 OS - Video 1:error (1, -2147483648) - Video 2:error (1, -2147483648)
Ambos videos se reproducen bien en Google Chrome en una PC. Puede ser útil agregar que, en el caso correcto, el video y el audio se reproducen correctamente. En el caso del error (1, -2147483648), se arroja el mismo registro 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 caso (1), el siguiente registro se emite 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 caso (2), el siguiente registro se arroja 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 compatibles, metadatos corruptos o encabezados de archivo incorrectos. Si es así, ¿podría indicarme la dirección correcta para utilizar qué códec? Gracias.
fuente
Respuestas:
Solo para aclarar algo para cualquiera que lea esta pregunta basada en el título.
Al mirar el valor de error (1, -2147483648), el valor '1' corresponde a la constante en MediaPlayer.MEDIA_ERROR_UNKNOWN .
-2147483648 corresponde al 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, provocado por problemas de compatibilidad y códec como se mencionó anteriormente, pero también cancelaciones de subprocesos y varios otros tipos.
Para su problema, recomendaría consultar los formatos multimedia compatibles con Android con versiones de Android compatibles y ver si el tipo de codificación es la causa de su problema, pero como se mencionó anteriormente, la respuesta de error desconocido puede deberse a una serie de problemas.
fuente
encoder
o debería eliminarencoder
?Me enfrentaba al mismo error en Android P (Pixel 2 XL), pero todo lo que tenía que hacer era poner
android:usesCleartextTraffic="true"
laAndroidManifest.xml
etiqueta de mi aplicación.fuente
Para la transmisión, el sitio de Android tiene una nota:
Recibí el mismo error antes de mover el
moov
átomo. Para solucionar este problema, puede utilizar mp4Box con este comando:MP4Box -hint output.mp4
La mayoría de mis videos se pueden transmitir 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 puede encontrar aquí .
fuente
También obtengo el mismo MEDIA_ERROR_UNKNOWN error para reproducir video (rtsp).
En mi caso, tengo problemas con mi wifi. Algunas razones de seguridad wifi está restringido para el protocolo RTSP. Entonces me enfrento a este problema de error MEDIA_ERROR_UNKNOWN. Una vez verifique con sus permisos de red.
Cuando cambio a datos móviles para reproducir videos, me funciona bien. Puede ser que esto sea útil para quienes enfrentan el mismo tipo de error :).
fuente
Tenga cuidado con el tipo de medio de soporte y la resolución de su dispositivo. Error
error (1, -2147483648)
suelen aparecer cuando su dispositivo no admite el tipo de medio de video, los códecs o la resolución.Consulte el tipo de medio compatible con Android en la documentación:
https://developer.android.com/guide/appendix/media-formats.html
Por ejemplo, podemos notar que los dispositivos por encima de 3.0 admiten .mp4, pero no todos admiten HD 720p.
fuente
Tuve un problema similar. En mi caso, el video se reproduciría bien cuando lo descargué al teléfono primero y luego lo reproduje. Pero cuando intenté usar HTTP progresivo, obtendría el mismo error anotado en el OP.
Verifiqué que los átomos ftyp, moov y mdat estaban en el orden correcto. Resultó que el problema era el valor del campo ftyp. Estaba configurado 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.
fuente
Resolví esto de manera similar a como se indica 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é ejecutando API v19 a v25.
fuente
En mi caso, el error se debió a que el reproductor multimedia no tenía permisos de archivo en el video almacenado localmente. Intente almacenar el video en el
/mnt/sdCARD
directorio.fuente
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 ();
fuente
En mi caso, este problema fue causado por una URL multimedia con espacios. Aquí está la solución:
mMediaPlayer.setDataSource(source.replaceAll(" ", "%20"));
fuente
si está usando firebase, entonces debe copiar la ruta (o url) de 1: Download Url que contiene https: // firebasestorage .............
no desde el lugar de almacenamiento
2:
<uses-permission android:name="android.permission.INTERNET" />
agregue este permiso en la etiqueta de manifiesto dentro de la carpeta de manifiestodentro de las reglas de almacenamiento
Dentro de las Reglas de almacenamiento:
rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write: if true; } } }
fuente