web-dev-qa-db-fra.com

Erreur Android MediaPlayer (1, -2147483648)

J'ai deux vidéos différentes que j'essaye de charger dans une VideoView en utilisant

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

Les deux vidéos, qu’elles soient vidéo 1 et vidéo 2 , ont les spécifications suivantes (extraites à l’aide de ffmpeg -i); en fait, ce sont deux encodages différents de la même vidéo:

  1. Vidéo 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. Vidéo 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
    

Je sais que Honeycomb est pris en charge par AAC et, par conséquent, j'ai testé les vidéos avec plusieurs appareils. les résultats sont donnés ci-dessous:

  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)

Les deux vidéos sont lisibles dans Google Chrome sur un PC. Il peut être utile d’ajouter que, dans l’affirmative, la lecture audio et vidéo est correcte. Dans le cas d'erreur (1, -2147483648), le même journal est généré par tous les périphériques (à l'exception de 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

Dans le cas (1), le journal suivant est généré par Nexus One et la vidéo ne se charge jamais:

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

Dans le cas (2), le journal suivant est généré par Nexus One et se termine, comme vous pouvez le constater, par une erreur (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

D'après ce que j'ai lu, l'erreur (1, -2147483648) peut correspondre à des codecs non pris en charge, à des métadonnées corrompues ou à des en-têtes de fichiers incorrects. Si tel est le cas, pouvez-vous m'indiquer dans quelle direction utiliser quel codec? Merci.

64
Ayberk Özgür

Juste pour clarifier quelque chose pour quiconque lisant cette question basée sur le titre.

Lorsque vous examinez la valeur d'erreur (1, -2147483648), la valeur "1" correspond à la constante dans MediaPlayer.MEDIA_ERROR_UNKNOWN .

-2147483648 correspond à l'hexadécimal 0x80000000 qui est défini comme UNKNOWN_ERROR dans frameworks/native/include/utils/Errors.h

Cela montre qu'il est difficile d'identifier la source de l'erreur car il s'agit d'une valeur de retour assez générique, générée par des problèmes de codec et de compatibilité comme mentionné ci-dessus, mais également par des annulations de threads et plusieurs autres types.

Pour votre problème, je vous recommanderais de consulter les Formats multimédia pris en charge par Android avec les versions Android compatibles et de voir si le type d'encodage est la cause de votre problème, mais comme mentionné ci-dessus, la réponse Erreur inconnue peut être causée par un certain nombre de problèmes .

93
sturrockad

Pour le streaming, le site Android a une note:

Pour les conteneurs 3GPP et MPEG-4, l'atome de Moov doit précéder tout mdat des atomes, mais doit réussir l’atome de ftyp.

J'ai eu la même erreur avant de déplacer l'atome moov. Pour résoudre ce problème, vous pouvez utiliser mp4Box avec cette commande:

MP4Box -hint output.mp4 

La plupart de mes vidéos peuvent être diffusées après. Si cela ne fonctionne pas, essayez ceci avec ffmpeg:

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

Il existe d’autres outils que vous pouvez trouver ici .

7
Nam Trung

J'étais confronté à la même erreur sur Android P (Pixel 2 XL), mais tout ce que j'avais à faire était de mettre Android:usesCleartextTraffic="true" sur mon tag d'application AndroidManifest.xml.

4
Rodrigo Garcia

Prenez soin du type de support et de la résolution de votre appareil. Error error (1, -2147483648) apparaît souvent lorsque votre type de support vidéo, vos codecs ou votre résolution n'est pas pris en charge par votre appareil.

Vérifiez le type de support pris en charge par Android dans la documentation: 

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

Par exemple, nous pouvons remarquer que les périphériques supérieurs à 3.0 prennent en charge le format .mp4, mais tous ne prennent pas en charge la HD 720p.

2
Renaud Boulard

J'ai eu un problème similaire. Dans mon cas, la vidéo se lirait bien lorsque je l’aurais d'abord téléchargée sur le téléphone, puis lue. Mais lorsque j'essayais d'utiliser HTTP progressif, j'obtenais la même erreur que celle notée dans l'OP.

J'ai vérifié que les atomes ftyp, moov et mdat étaient dans le bon ordre. Il s’est avéré que le problème tenait à la valeur du champ ftyp. Il était réglé sur 'qt'. J'ai utilisé MP4Box pour extraire les pistes et créer un nouveau fichier mp4 dont le ftyp était réglé sur 'isom'. Ce nouveau fichier a bien fonctionné pour HTTP progressif.

1
jdramer

Je reçois également le même problème d’erreur MEDIA_ERROR_UNKNOWN lors de la lecture de vidéo (rtsp).

Dans mon cas, je trouve un problème avec mon wifi. Quelques raisons de sécurité wifi est limité pour le protocole RTSP. Donc, je suis confronté à ce problème d'erreur MEDIA_ERROR_UNKNOWN. Une fois vérifier avec vos autorisations de réseau.

Lorsque je passe aux données mobiles pour la lecture de vidéos, cela fonctionne très bien pour moi ... peut-être que ce sera utile pour tous ceux qui font face au même type d'erreur :).

1
Anshu

Je faisais face au même problème, mais ce que j'ai fait de mon côté c'est 

Tout d'abord, j'arrête le lecteur multimédia, puis je le relâche.

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

0
sharma_kunal

Dans mon cas, l'erreur était due au fait que le lecteur multimédia ne disposait pas d'autorisations de fichier sur la vidéo stockée localement. Essayez de stocker la vidéo dans le répertoire /mnt/sdCARD.

0
droiding

J'ai résolu ce problème de la même manière que dans la réponse de @ nam-trung. Cependant, comme mes vidéos étaient déjà au format h264 et mp4 , tout ce que je devais faire était d'exécuter ce qui suit sur chaque fichier:

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

Après cela, toutes les vidéos fonctionnaient dans VideoView lorsqu'elles étaient exécutées sur tous les périphériques testés sous API v19 à v25.

0
MattMatt