Ich habe zwei verschiedene Videos, die ich in eine VideoView
Verwendung laden möchte
videoView.setVideoURI(Uri.parse(url));
Die beiden Videos, seien es Video 1 und Video 2 , haben die folgenden Spezifikationen (extrahiert mit ffmpeg -i
); Tatsächlich handelt es sich um zwei verschiedene Codierungen desselben Videos:
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
Mir ist bekannt, dass die AAC-Unterstützung mit Honeycomb geliefert wurde, und deshalb habe ich die Videos mit mehreren Geräten getestet. Die Ergebnisse sind unten angegeben:
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)
Beide Videos lassen sich in Google Chrome auf einem PC problemlos wiedergeben. Es kann nützlich sein, hinzuzufügen, dass im OK-Fall sowohl Video als auch Audio korrekt wiedergegeben werden. Im Fehlerfall (1, -2147483648) wird von allen Geräten (außer Nexus One) dasselbe Protokoll 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önnen Sie mich in die richtige Richtung weisen, um welchen Codec zu verwenden? Vielen Dank.
quelle
Antworten:
Nur um etwas für jeden zu klären, der diese Frage anhand des Titels liest.
Bei Betrachtung des Fehlerwerts (1, -2147483648) entspricht der Wert '1' der Konstante in MediaPlayer.MEDIA_ERROR_UNKNOWN .
-2147483648 entspricht hexadezimal 0x80000000, das in Frameworks / native / include / utils / Errors.h als UNKNOWN_ERROR definiert ist
Dies zeigt, dass die Fehlerquelle schwer zu bestimmen ist, da es sich um einen ziemlich generischen Rückgabewert handelt, der durch Codec- und Kompatibilitätsprobleme wie oben erwähnt, aber auch durch Thread-Abbrüche und verschiedene andere Typen verursacht wird.
Für Ihr Problem würde ich empfehlen, die von Android unterstützten Medienformate mit kompatiblen Android-Versionen zu konsultieren und festzustellen, ob der Codierungstyp die Ursache für Ihr Problem ist. Wie oben erwähnt, kann die Antwort auf einen unbekannten Fehler jedoch durch eine Reihe von Problemen verursacht werden.
quelle
encoder
oder entfernenencoder
?Ich hatte den gleichen Fehler auf Android P (Pixel 2 XL), aber alles, was ich tun musste, war
android:usesCleartextTraffic="true"
meinAndroidManifest.xml
Anwendungstag zu setzen.quelle
Für das Streaming hat die Android-Site einen Hinweis:
Ich habe den gleichen Fehler erhalten, bevor ich das
moov
Atom bewegt habe . 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 dies 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 andere Tools, die Sie hier finden können .
quelle
Ich erhalte auch das gleiche MEDIA_ERROR_UNKNOWN- Fehlerproblem beim Abspielen von Videos (rtsp).
In meinem Fall habe ich Probleme mit meinem WLAN. Aus Sicherheitsgründen ist WLAN für das RTSP-Protokoll eingeschränkt. Damit ich mit diesem MEDIA_ERROR_UNKNOWN-Fehlerproblem konfrontiert bin. Überprüfen Sie dies einmal mit Ihren Netzwerkberechtigungen.
Wenn ich zum Abspielen von Videos auf mobile Daten umsteige, funktioniert das für mich einwandfrei. Vielleicht ist dies hilfreich, wenn jemand auf die gleiche Art von Fehler stößt :).
quelle
Achten Sie auf den Support-Medientyp und die Auflösung Ihres Geräts. Fehler
error (1, -2147483648)
treten häufig auf, wenn Ihr Videomedientyp, Ihre Codecs oder Ihre 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
Beispielsweise können wir feststellen, dass Geräte über 3.0 .mp4 unterstützen, aber nicht alle unterstützen HD 720p.
quelle
Ich hatte ein ähnliches Problem. In meinem Fall würde das Video gut abgespielt, wenn ich es zuerst auf das Telefon heruntergeladen und dann abgespielt hätte. Wenn ich jedoch versuchte, Progressive HTTP zu verwenden, wurde der gleiche Fehler im OP angezeigt.
Ich habe überprüft, ob die Atome ftyp, moov und mdat in der richtigen Reihenfolge sind. Es stellte sich heraus, dass das Problem der Wert des ftyp-Feldes war. Es wurde auf 'qt' gesetzt. Ich habe MP4Box verwendet, um die Tracks zu extrahieren und eine neue MP4-Datei zu erstellen, deren ftyp auf 'isom' gesetzt war. Diese neue Datei funktionierte gut für Progressive HTTP.
quelle
Ich habe dies ähnlich wie in der Antwort von @ nam-trung gelöst. Da meine Videos jedoch bereits h264 und mp4 waren, musste ich für jede Datei nur Folgendes ausführen:
ffmpeg -i input.mp4 -vprofile baseline output.mp4
Danach funktionierten alle Videos in VideoView, wenn sie auf allen Geräten ausgeführt wurden, die ich unter API v19 bis v25 getestet habe.
quelle
In meinem Fall war der Fehler darauf zurückzuführen, dass der Mediaplayer keine Dateiberechtigungen für das lokal gespeicherte Video hatte. Versuchen Sie, das Video im
/mnt/sdCARD
Verzeichnis zu speichern .quelle
Ich hatte das gleiche Problem, aber was ich auf meiner Seite getan habe, ist
Zuerst stoppe ich den Media Player und lasse ihn dann frei.
mMediaPlayer.stop (); mMediaPlayer.release ();
quelle
In meinem Fall wurde dieses Problem durch eine Medien-URL mit Leerzeichen verursacht! Hier ist das Update:
mMediaPlayer.setDataSource(source.replaceAll(" ", "%20"));
quelle
Wenn Sie firebase verwenden, sollten Sie den Pfad (oder die URL) von 1: Download Url kopieren, die den https: // firebasestorage enthält .............
nicht vom Lagerort
2:
<uses-permission android:name="android.permission.INTERNET" />
Fügen Sie diese Berechtigung im Manifest-Tag im Manifest-Ordner hinzuinnerhalb der Lagerregeln
innerhalb Lagerungsregeln:
rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write: if true; } } }
quelle