Lỗi Android MediaPlayer (1, -2147483648)


82

Tôi có hai video khác nhau mà tôi đang cố tải vào VideoViewbằng cách sử dụng

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

Hai video, giả sử là video 1video 2 , có các thông số kỹ thuật sau (trích xuất bằng cách sử dụng ffmpeg -i); trên thực tế, chúng là hai mã hóa khác nhau của cùng một video:

  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
    

Tôi biết rằng hỗ trợ AAC đi kèm với Honeycomb, và do đó tôi đã thử nghiệm video với một số thiết bị; Các kết quả được đưa ra dưới đây:

  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)

Cả hai video đều phát tốt trong Google Chrome trên PC. Có thể hữu ích khi thêm rằng trong trường hợp OK, cả video và âm thanh đều phát chính xác. Trong trường hợp lỗi (1, -2147483648), cùng một nhật ký được đăng từ tất cả các thiết bị (ngoại trừ 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

Trong trường hợp (1), nhật ký sau được sao chép từ Nexus One và video không bao giờ tải:

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

Trong trường hợp (2), nhật ký sau được đăng từ Nexus One và như bạn có thể thấy, kết thúc bằng lỗi (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

Từ những gì tôi đã đọc, lỗi (1, -2147483648) có thể tương ứng với codec không được hỗ trợ, siêu dữ liệu bị hỏng hoặc tiêu đề tệp không chính xác. Nếu đúng như vậy, bạn có thể chỉ cho tôi hướng đi đúng để sử dụng codec nào không? Cảm ơn.


2
Bạn có phát video trực tuyến trên tất cả các thiết bị không? Bạn có thể vui lòng chia sẻ những phát hiện của bạn với tôi? Tôi đang gặp vấn đề tương tự. Video hoạt động trên một số thiết bị và trên một số thiết bị thì không.
Adil Malik

Câu trả lời:


108

Chỉ để làm rõ điều gì đó cho bất kỳ ai đọc câu hỏi này dựa trên tiêu đề.

Khi xem xét giá trị lỗi (1, -2147483648), giá trị '1' tương ứng với hằng số trong MediaPlayer.MEDIA_ERROR_UNKNOWN .

-2147483648 tương ứng với 0x80000000 thập lục phân được định nghĩa là UNKNOWN_ERROR trong khung / gốc / bao gồm / utils / Lỗi.h

Điều này cho thấy nguồn của lỗi rất khó xác định vì nó là một giá trị trả về khá chung chung, do codec và các vấn đề tương thích như đã đề cập ở trên cũng như hủy luồng và một số loại khác.

Đối với vấn đề của bạn, tôi khuyên bạn nên tham khảo Định dạng phương tiện được hỗ trợ của Android với các phiên bản Android tương thích và xem liệu loại mã hóa có phải là nguyên nhân gây ra sự cố của bạn hay không, nhưng như đã đề cập ở trên, phản hồi Lỗi không xác định có thể do một số sự cố gây ra.


1
Giải pháp là gì? Không có? Tôi không hiểu rõ ý của bạn. Vì vậy, Chỉ cần thay đổi encoderhoặc nên loại bỏ encoder?
Huy Tower

@MirrorTowers: Trong trường hợp của tôi, trên một số thiết bị, tôi không có quyền đọc tệp mặc dù chính ứng dụng của tôi đã tạo ra chúng, sau khi tải chúng xuống từ máy chủ và đưa chúng vào thư mục bộ nhớ cache của ứng dụng. Hãy thử thay đổi quyền đọc.
nonzaprej

2
Tôi đã gặp lỗi này khi phát trực tuyến tài nguyên từ https trên 3.0. Có vẻ như HTTPS chỉ được hỗ trợ từ Android 3.1 trở đi
QuantumTiger

Là một bản cập nhật - điều này hiện cũng được định nghĩa rõ ràng là 'MEDIA_ERROR_SYSTEM (-2147483648) - lỗi hệ thống cấp thấp.' trong tài liệu trực tuyến Android dành cho MediaPlayer (tại thời điểm viết bài): developer.android.com/reference/android/media/… - không nhất thiết phải giúp ích nhiều nhưng ít nhất nó có ở đó rõ ràng ...
Mick

27

Tôi cũng gặp phải lỗi tương tự trên Android P (Pixel 2 XL), nhưng tất cả những gì tôi phải làm là đặt thẻ ứng dụng android:usesCleartextTraffic="true"của mình AndroidManifest.xml.


Không thể giúp bạn với điều đó. MediaPlayer không đáng tin cậy, tôi muốn khuyên bạn sử dụng ExoPlayer github.com/google/ExoPlayer
Rod Lima

7

Để phát trực tuyến, trang web Android có một lưu ý:

Đối với các thùng chứa 3GPP và MPEG-4, nguyên tử moov phải đứng trước bất kỳ nguyên tử mdat nào, nhưng phải đứng sau nguyên tử ftyp.

Tôi cũng mắc lỗi tương tự trước khi di chuyển moovnguyên tử. Để khắc phục điều này, bạn có thể sử dụng mp4Box với lệnh sau:

MP4Box -hint output.mp4 

Hầu hết các video của tôi có thể phát trực tuyến sau đó. Nếu nó không hoạt động, hãy thử điều này với ffmpeg:

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

Có những công cụ khác bạn có thể tìm thấy ở đây .


2

Tôi cũng đang nhận được cùng MEDIA_ERROR_UNKNOWN lỗi khi phát video (rtsp).

Trong trường hợp của tôi, tôi đang tìm thấy sự cố với wifi của mình. Một số lý do bảo mật mà wifi bị hạn chế đối với giao thức RTSP. Vì vậy, tôi đang gặp phải sự cố lỗi MEDIA_ERROR_UNKNOWN này. Sau khi kiểm tra các quyền mạng của bạn.

Khi tôi chuyển sang dữ liệu di động để phát video, nó hoạt động tốt đối với tôi. Có thể điều này sẽ hữu ích cho những ai gặp phải lỗi tương tự :).


2

Quan tâm đến loại phương tiện hỗ trợ và độ phân giải của thiết bị của bạn. lỗierror (1, -2147483648) thường xảy ra khi loại phương tiện video, codec hoặc độ phân giải không được thiết bị của bạn hỗ trợ.

Kiểm tra loại phương tiện được Android hỗ trợ trong tài liệu:

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

Ví dụ: chúng ta có thể nhận thấy rằng thiết bị trên 3.0 hỗ trợ .mp4, nhưng không phải tất cả chúng đều hỗ trợ HD 720p.


1

Tôi đã có một vấn đề tương tự. Trong trường hợp của tôi, video sẽ phát tốt khi tôi tải video xuống điện thoại trước và sau đó phát. Nhưng khi tôi cố gắng sử dụng HTTP lũy tiến, tôi sẽ gặp lỗi tương tự được ghi nhận trong OP.

Tôi đã xác minh rằng các nguyên tử ftyp, moov và mdat theo đúng thứ tự. Hóa ra vấn đề là giá trị của trường ftyp. Nó được đặt thành 'qt'. Tôi đã sử dụng MP4Box để giải nén các bản nhạc và tạo một tệp mp4 mới có ftyp được đặt thành 'isom'. Tệp mới này hoạt động tốt cho HTTP lũy tiến.


1

Tôi đã giải quyết vấn đề này tương tự như cách được nêu trong câu trả lời của @ nam-trung, tuy nhiên, vì video của tôi đã là h264mp4 nên tất cả những gì tôi cần làm là chạy như sau trên mỗi tệp:

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

Sau đó, tất cả các video đều hoạt động trong VideoView khi chạy trên tất cả các thiết bị mà tôi đã thử nghiệm khi chạy API v19 đến v25.


0

Trong trường hợp của tôi, lỗi là do người trung gian không có quyền đối với tệp đối với video được lưu trữ cục bộ. Hãy thử lưu trữ video vào /mnt/sdCARDthư mục.


2
Tôi không thể lưu trữ video, video phải được phát trực tuyến từ máy chủ bên ngoài.
Ayberk Özgür

0

Tôi đang đối mặt với vấn đề tương tự, nhưng những gì tôi đã làm về phía mình là

Đầu tiên, tôi dừng trình phát đa phương tiện và sau đó phát hành nó.

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


-1

Trong trường hợp của tôi, sự cố này là do URL phương tiện có dấu cách! Đây là bản sửa lỗi:

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

Ứng dụng Android Universal Media Player (UAMP) thực hiện điều này. Bản sửa lỗi để làm cho nó hoạt động cho các URL giống như ở cbsrmt.com được hiển thị chính xác ở trên.
Lee Hounshell

-1

nếu bạn đang sử dụng firebase, thì bạn nên sao chép đường dẫn (hoặc url) từ 1: Url tải xuống chứa https: // firebasestorage .............

không phải từ vị trí lưu trữ

2: <uses-permission android:name="android.permission.INTERNET" />thêm quyền này trong thẻ tệp kê khai bên trong thư mục tệp kê khai

bên trong Quy tắc lưu trữ

bên trong Quy tắc lưu trữ:

rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
 allow read, write: if true;
  }  
 }  
 }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.