Android MediaPlayer hatası (1, -2147483648)


84

Ben içine yük çalışıyorum iki farklı video var VideoViewkullanarak

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

Video 1 ve video 2 olmak üzere iki video aşağıdaki özelliklere sahiptir (kullanılarak çıkarılır ffmpeg -i); aslında, aynı videonun iki farklı kodlamasıdır:

  1. 1. video:

    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. 2. video:

    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
    

AAC desteğinin Honeycomb ile birlikte geldiğinin farkındayım ve bu nedenle videoları birkaç cihazla test ettim; sonuçlar aşağıda verilmiştir:

  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)

Her iki video da bir PC'de Google Chrome'da iyi oynatılıyor. Tamam durumunda, hem video hem de sesin doğru şekilde oynatıldığını eklemek faydalı olabilir. Hata (1, -2147483648) durumunda, aynı günlük tüm cihazlardan (Nexus One hariç) püskürtülür:

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

(1) durumunda, aşağıdaki günlük Nexus One'dan alınır ve video hiçbir zaman yüklenmez:

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

(2) durumunda, aşağıdaki günlük Nexus One'dan püskürtülür ve görebileceğiniz gibi bir hatayla biter (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

Okuduklarımdan, hata (1, -2147483648) desteklenmeyen codec bileşenlerine, bozuk meta verilere veya yanlış dosya başlıklarına karşılık gelebilir. Eğer öyleyse, hangi codec bileşenini kullanmak için beni doğru yönü gösterebilir misiniz? Teşekkürler.


2
Videoları tüm cihazlarda yayınladınız mı? Bulgularınızı lütfen benimle paylaşır mısınız? Ben de aynı sorunu yaşıyorum. Videolar birkaç cihazda çalışır ve birkaç cihazda çalışmaz.
Adil Malik

Yanıtlar:


111

Sadece başlığa göre bu soruyu okuyan herkes için bir şeyi açıklığa kavuşturmak için.

Hata değerine (1, -2147483648) bakıldığında, '1' değeri MediaPlayer.MEDIA_ERROR_UNKNOWN sabitine karşılık gelir .

-2147483648, / native / include / utils / Errors.h çerçevelerinde UNKNOWN_ERROR olarak tanımlanan onaltılık 0x80000000'e karşılık gelir.

Bu, yukarıda belirtildiği gibi kodek ve uyumluluk sorunları ve aynı zamanda iş parçacığı iptalleri ve diğer birkaç tür tarafından atılan oldukça genel bir dönüş değeri olduğundan, hatanın kaynağını tespit etmenin zor olduğunu gösterir.

Sorununuz için, uyumlu Android sürümlerine sahip Android Destekli Ortam Biçimlerine başvurmanızı ve kodlama türünün sorununuzun nedeni olup olmadığına bakmanızı öneririz, ancak yukarıda belirtildiği gibi Bilinmeyen Hata yanıtına bir dizi sorun neden olabilir.


1
Çözüm nedir? Yok mu? Ne demek istediğini tam olarak anlamıyorum. Yani sadece değişime mi ihtiyacınız var encoderyoksa kaldırmalı encodermı?
Huy Tower

@MirrorTowers: Benim durumumda, bazı cihazlarda dosyaları bir sunucudan indirip uygulamanın önbellek klasörüne koyduktan sonra, onları oluşturan uygulamam olmasına rağmen okuma iznim yoktu. Okuma izinlerini değiştirmeyi deneyin.
nonzaprej

2
3.0 üzerinde https'den bir kaynak aktarırken bu hatayı aldım. Görünüşe göre HTTPS yalnızca Android 3.1'den itibaren destekleniyor
QuantumTiger

Güncelleme olarak - bu artık açıkça "MEDIA_ERROR_SYSTEM (-2147483648) - düşük seviyeli sistem hatası" olarak da tanımlanmaktadır. MediaPlayer için Android çevrimiçi belgelerinde (yazarken): developer.android.com/reference/android/media/… - bu kadar yardımcı olmuyor ama en azından açık bir şekilde orada ...
Mick

28

Ben Android P (Piksel 2 XL) aynı hatayı bakan oldu, ama yapmam gereken tüm konulmuştur android:usesCleartextTraffic="true"benim üzerinde AndroidManifest.xmluygulama etiketi.


Sana bu konuda yardımcı olamam. MediaPlayer güvenilir değil, ExoPlayer'ı kullanmanızı tavsiye ederim github.com/google/ExoPlayer
Rod Lima

7

Akış için Android sitesinde bir not var:

3GPP ve MPEG-4 kapları için moov atomu, herhangi bir mdat atomundan önce gelmeli, ancak ftyp atomundan sonra gelmelidir.

Atomu hareket ettirmeden önce aynı hatayı aldım moov. Bunu düzeltmek için mp4Box'ı şu komutla kullanabilirsiniz:

MP4Box -hint output.mp4 

Videolarımın çoğu bundan sonra yayınlanabilir. Çalışmazsa, bunu ffmpeg ile deneyin:

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

Burada bulabileceğiniz başka araçlar da var .


2

Video oynatmak için de aynı MEDIA_ERROR_UNKNOWN hata sorununu alıyorum (rtsp).

Benim durumumda wifi ile ilgili sorun buluyorum. Bazı güvenlik nedenleri, RTSP protokolü için wifi kısıtlıdır. Bu yüzden bu MEDIA_ERROR_UNKNOWN hata sorunuyla karşı karşıyayım. Ağ izinlerinizi bir kez kontrol edin.

Video oynatmak için mobil verilere geçtiğimde, benim için iyi çalışıyor. Bu, aynı tür bir hatayla karşılaşan herkese yardımcı olabilir :).


2

Cihazınızın destek ortam türüne ve çözünürlüğüne dikkat edin. error (1, -2147483648)Video ortam türünüz, kodekleriniz veya çözünürlüğünüz cihazınız tarafından desteklenmediğinde sıklıkla hata oluşur .

Belgelerde Android tarafından desteklenen ortam türünü kontrol edin:

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

Örneğin, 3.0'ın üzerindeki cihazların .mp4'ü desteklediğini, ancak hepsinin HD 720p'yi desteklemediğini görebiliriz.


1

Benzer bir sorun yaşadım. Benim durumumda, videoyu önce telefona indirip sonra oynattığımda video iyi oynatılıyordu. Ancak Aşamalı HTTP'yi kullanmaya çalıştığımda OP'de belirtilen aynı hatayı alıyordum.

Ftyp, moov ve mdat atomlarının doğru sırada olduğunu doğruladım. Sorunun ftyp alanının değeri olduğu ortaya çıktı. "Qt" olarak ayarlandı. Parçaları çıkarmak ve ftyp 'isom' olarak ayarlanmış yeni bir mp4 dosyası oluşturmak için MP4Box kullandım. Bu yeni dosya, Aşamalı HTTP için iyi çalıştı.


1

Bunu @ nam-trung'un cevabında belirtilen şekilde çözdüm, ancak videolarım zaten h264 ve mp4 olduğundan tek yapmam gereken her dosyada aşağıdakileri çalıştırmaktı:

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

Bundan sonra, API v19 ile v25 arasında çalışırken test ettiğim tüm cihazlarda çalıştırıldığında videoların tümü VideoView'da çalıştı .


0

Benim durumumda hata, mediaplayer'ın yerel olarak depolanan videoda dosya izinlerine sahip olmamasından kaynaklanıyordu. Videoyu /mnt/sdCARDdizine kaydetmeyi deneyin .


2
Videoyu saklayamıyorum, harici bir sunucudan akışı sağlanmalı.
Ayberk Özgür

0

Ben de aynı sorunla karşı karşıyaydım ama kendi tarafımda yaptığım şey

Önce medya oynatıcıyı durdurup ardından Serbest bıraktım.

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


-1

Benim durumumda, bu soruna boşluk içeren bir medya URL'si neden oldu! İşte düzeltme:

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

Android Universal Media Player uygulaması (UAMP) bunu yapar. Bunun cbsrmt.com adresindekine benzer URL'ler için çalışmasını sağlamaya yönelik düzeltme yukarıda doğru bir şekilde gösterilmektedir.
Lee Hounshell

-1

firebase kullanıyorsanız, yolu (veya url'yi) https: // firebasestorage içeren 1: İndirme URL'sinden kopyalamanız gerekir. .............

depolama konumundan değil

2: <uses-permission android:name="android.permission.INTERNET" />bu izni manifest klasörünün içindeki manifest etiketine ekleyin

içinde depolama kuralları

içinde depolama kuralları:

rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
 allow read, write: if true;
  }  
 }  
 }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.