wake-up-neo.com

Android MediaPlayer-Fehler (1, -2147483648)

Ich habe zwei verschiedene Videos, mit denen ich versuche, sie in eine VideoView zu laden

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

Die zwei Videos, seien sie Video 1 und Video 2 , haben die folgenden Spezifikationen (extrahiert mit ffmpeg -i); Tatsächlich handelt es sich um zwei verschiedene Codierungen desselben Videos:

  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
    

Mir ist bekannt, dass die AAC-Unterstützung von Honeycomb bereitgestellt wurde, und deshalb habe ich die Videos mit mehreren Geräten getestet. Die Ergebnisse sind unten angegeben:

  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)

Beide Videos können in Google Chrome auf einem PC problemlos abgespielt werden. Es kann hilfreich sein, hinzuzufügen, dass in diesem Fall sowohl Video als auch Audio korrekt wiedergegeben werden. Im Fehlerfall (1, -2147483648) wird dasselbe Protokoll von allen Geräten (außer Nexus One) ausgegeben:

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

Im Fall (1) wird das folgende Protokoll von Nexus One gespuckt und das Video wird nie geladen:

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

Im Fall (2) wird das folgende Protokoll von Nexus One gespuckt und endet, wie Sie sehen, mit einem Fehler (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

Nach dem, was ich gelesen habe, kann der Fehler (1, -2147483648) nicht unterstützten Codecs, beschädigten Metadaten oder falschen Dateiköpfen entsprechen. Wenn ja, könnten Sie mich in die richtige Richtung weisen, um welchen Codec zu verwenden? Vielen Dank.

64
Ayberk Özgür

Nur um etwas zu klären, wenn Sie diese Frage anhand des Titels lesen.

Bei Betrachtung des Fehlerwerts (1, -2147483648) entspricht der Wert '1' der Konstante in MediaPlayer.MEDIA_ERROR_UNKNOWN .

-2147483648 entspricht dem Hexadezimalwert 0x80000000, der als UNKNOWN_ERROR in Frameworks/native/include/utils/Errors.h definiert ist

Dies zeigt, dass die Fehlerquelle schwer zu bestimmen ist, da es sich um einen generischen Rückgabewert handelt, der durch Codec- und Kompatibilitätsprobleme ausgelöst wird, wie oben erwähnt, aber auch Thread-Annullierungen und verschiedene andere Typen.

Für Ihr Problem würde ich empfehlen, die Android Supported Media Formats mit kompatiblen Android-Versionen zu konsultieren und zu sehen, ob der Verschlüsselungstyp die Ursache Ihres Problems ist. Wie oben erwähnt, kann die Antwort "Unbekannter Fehler" jedoch durch eine Reihe von Problemen verursacht werden .

93
sturrockad

Für das Streaming hat die Android-Site eine Anmerkung:

Für 3GPP- und MPEG-4 -Container muss das Moov-Atom vor jedem MDat .__ stehen. Atome, muss aber dem ftyp-Atom folgen.

Ich habe den gleichen Fehler erhalten, bevor ich das moov-Atom bewegte. Um dies zu beheben, können Sie mp4Box mit diesem Befehl verwenden:

MP4Box -hint output.mp4 

Die meisten meiner Videos können danach gestreamt werden. Wenn es nicht funktioniert, versuchen Sie es mit ffmpeg:

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

Es gibt noch andere Tools, die Sie hier finden können: hier .

7
Nam Trung

Ich hatte den gleichen Fehler in Android P (Pixel 2 XL), musste aber nur Android:usesCleartextTraffic="true" in mein AndroidManifest.xml-Anwendungs-Tag einfügen.

4
Rodrigo Garcia

Achten Sie auf den Support-Medientyp und die Auflösung Ihres Geräts. Fehler error (1, -2147483648) wird häufig angezeigt, wenn Ihr Videomedientyp, die Codecs oder die Auflösung von Ihrem Gerät nicht unterstützt werden.

Überprüfen Sie den von Android unterstützten Medientyp in der Dokumentation: 

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

Zum Beispiel können wir feststellen, dass Geräte ab 3.0 .mp4 unterstützen, aber nicht alle unterstützen HD 720p.

2
Renaud Boulard

Ich hatte ein ähnliches Problem. In meinem Fall lief das Video gut, wenn ich es zuerst auf das Telefon heruntergeladen und dann abgespielt habe. Wenn ich jedoch versuchte, Progressive HTTP zu verwenden, würde ich den gleichen Fehler im OP feststellen.

Ich bestätigte, dass die Atome ftyp, moov und mdat in der richtigen Reihenfolge waren. Es stellte sich heraus, dass das Problem der Wert des Feldes ftyp war. Es wurde auf 'qt' gesetzt. Ich habe MP4Box verwendet, um die Spuren zu extrahieren und eine neue mp4-Datei zu erstellen, deren ftyp auf 'isom' eingestellt war. Diese neue Datei funktionierte gut für Progressive HTTP.

1
jdramer

Ich bekomme auch dasselbe MEDIA_ERROR_UNKNOWN Fehlerproblem beim Abspielen von Videos (rtsp).

In meinem Fall finde ich ein Problem mit meinem WLAN. Aus Sicherheitsgründen ist das WLAN für das RTSP-Protokoll eingeschränkt. Damit stehe ich vor diesem MEDIA_ERROR_UNKNOWN-Fehlerproblem. Prüfen Sie einmal mit Ihren Netzwerkberechtigungen.

Wenn ich für das Abspielen von Videos auf mobile Daten umsteige, funktioniert das gut für mich .. Dies kann hilfreich sein, wer immer die gleichen Fehler hat :).

1
Anshu

Ich stand vor demselben Problem, aber was ich auf meiner Seite getan habe, ist 

Zuerst stoppe ich den Mediaplayer und dann Freigegeben.

mediaPlayer.stop (); .___. mediaPlayer.release ();

0
sharma_kunal

In meinem Fall lag der Fehler daran, dass der Mediaplayer keine Dateiberechtigungen für das lokal gespeicherte Video hatte. Speichern Sie das Video im /mnt/sdCARD-Verzeichnis.

0
droiding

Ich löste dies auf ähnliche Weise wie in @ nam-trungs Antwort, jedoch, da meine Videos bereits h264 und mp4 waren, musste ich nur Folgendes ausführen:

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

Danach funktionierten die Videos in VideoView, wenn sie auf allen Geräten ausgeführt wurden, die ich mit API v19 bis v25 getestet habe.

0
MattMatt