Android MediaPlayer 오류 (1, -2147483648)


83

두 개의 다른 비디오를 VideoView사용하여 로드하려고합니다.

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

두 동영상은 video 1video 2 이며 다음 사양을 갖습니다 (를 사용하여 추출 ffmpeg -i). 사실, 이들은 동일한 비디오의 두 가지 다른 인코딩입니다.

  1. 비디오 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. 비디오 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
    

AAC 지원이 Honeycomb과 함께 제공된다는 것을 알고 있으므로 여러 장치에서 비디오를 테스트했습니다. 결과는 다음과 같습니다.

  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)

두 비디오 모두 PC의 Chrome에서 잘 재생됩니다. OK의 경우 비디오와 오디오가 모두 올바르게 재생된다는 점을 추가하는 것이 유용 할 수 있습니다. 오류 (1, -2147483648)의 경우 모든 기기 (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

(1)의 경우 Nexus One에서 다음 로그가 분출되고 동영상이로드되지 않습니다.

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)의 경우 다음 로그가 Nexus One에서 생성되고 보시다시피 오류 (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

내가 읽은 오류 (1, -2147483648)는 지원되지 않는 코덱, 손상된 메타 데이터 또는 잘못된 파일 헤더에 해당 할 수 있습니다. 그렇다면 어떤 코덱을 사용할지 올바른 방향으로 안내해 주시겠습니까? 감사.


2
모든 장치에서 스트리밍되는 비디오를 얻었습니까? 발견 한 내용을 저와 공유해 주시겠습니까? 나는 같은 문제가 있습니다. 비디오는 몇 가지 장치에서 작동하지만 몇 가지 장치에서는 작동하지 않습니다.
Adil Malik 2013 년

답변:


108

제목에 따라이 질문을 읽는 모든 사람을 위해 무언가를 명확히하기 위해서입니다.

오류 값 (1, -2147483648)을 볼 때 '1'값은 MediaPlayer.MEDIA_ERROR_UNKNOWN 의 상수에 해당합니다 .

-2147483648은 frameworks / native / include / utils / Errors.h에서 UNKNOWN_ERROR로 정의 된 16 진수 0x80000000에 해당합니다.

이것은 위에서 언급 한 코덱 및 호환성 문제뿐만 아니라 스레드 취소 및 기타 여러 유형으로 인해 발생하는 매우 일반적인 반환 값이기 때문에 오류의 소스를 고정하기 어렵다는 것을 보여줍니다.

문제의 경우 호환되는 Android 버전과 함께 Android 지원 미디어 형식 을 참조하여 인코딩 유형이 문제의 원인인지 확인하는 것이 좋습니다 . 그러나 위에서 언급했듯이 알 수없는 오류 응답은 여러 문제로 인해 발생할 수 있습니다.


1
해결 방법이 무엇입니까? 없어? 나는 당신이 무엇을 의미하는지 명확하게 이해하지 못합니다. 그래서 변경이 필요 encoder하거나 제거해야 encoder합니까?
Huy Tower

@MirrorTowers : 제 경우 일부 기기에서는 파일을 만든 사람이 내 앱 이었지만 서버에서 다운로드하여 앱의 캐시 폴더에 넣은 후 파일을 읽을 권한이 없었습니다. 읽기 권한을 변경해보십시오.
nonzaprej

2
3.0에서 https에서 리소스를 스트리밍 할 때이 오류가 발생했습니다. HTTPS는 Android 3.1 이상에서만 지원되는 것 같습니다
QuantumTiger

업데이트로-이것은 이제 'MEDIA_ERROR_SYSTEM (-2147483648)-하위 수준 시스템 오류'로 명시 적으로 정의됩니다. MediaPlayer에 대한 Android 온라인 문서 (작성 당시) : developer.android.com/reference/android/media/…- 반드시 그다지 도움이되지는 않지만 적어도 명시 적으로 있습니다 ...
Mick

27

나는 안드로이드 P (픽셀 2 XL)에서 동일한 오류에 직면했지만, 내가했던 일은 넣어 android:usesCleartextTraffic="true"내에서 AndroidManifest.xml응용 프로그램 태그입니다.


당신을 도울 수 없습니다. MediaPlayer를 신뢰할 수없는, 내가 ExoPlayer 사용하도록 추천하고 싶습니다 github.com/google/ExoPlayer
로드 리마

7

스트리밍의 경우 Android 사이트에는 다음과 같은 메모가 있습니다.

3GPP 및 MPEG-4 컨테이너의 경우 moov 원자가 모든 mdat 원자 앞에 와야하지만 ftyp 원자 뒤에 와야합니다.

moov원자 를 이동하기 전에 같은 오류가 발생했습니다 . 이 문제를 해결하려면 다음 명령으로 mp4Box 를 사용할 수 있습니다 .

MP4Box -hint output.mp4 

그 이후로 대부분의 동영상을 스트리밍 할 수 있습니다. 작동하지 않으면 ffmpeg로 시도하십시오.

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

여기에서 찾을 수있는 다른 도구가 있습니다 .


2

비디오 (rtsp) 재생시 에도 동일한 MEDIA_ERROR_UNKNOWN 오류 문제가 발생합니다.

제 경우에는 Wi-Fi에 문제가 있습니다. RTSP 프로토콜에 대해 Wi-Fi가 제한되는 몇 가지 보안 이유. 그래서이 MEDIA_ERROR_UNKNOWN 오류 문제에 직면 해 있습니다. 네트워크 권한을 확인하십시오.

비디오 재생을 위해 모바일 데이터로 이동할 때 잘 작동합니다. 같은 종류의 오류에 직면 한 사람에게 도움이 될 수 있습니다. :).


2

장치의 지원 미디어 유형과 해상도를 관리하십시오. 오류가 error (1, -2147483648)자주 발생하며 비디오 미디어 유형, 코덱 또는 해상도가 장치에서 지원되지 않을 때 나타납니다.

문서에서 Android에서 지원하는 미디어 유형을 확인하십시오.

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

예를 들어 3.0 이상의 장치는 .mp4를 지원하지만 모든 장치가 HD 720p를 지원하지는 않습니다.


1

비슷한 문제가있었습니다. 제 경우에는 먼저 휴대폰에 다운로드 한 다음 재생하면 동영상이 잘 재생됩니다. 그러나 Progressive HTTP를 사용하려고 할 때 OP에 표시된 것과 동일한 오류가 발생합니다.

ftyp, moov 및 mdat 원자가 올바른 순서인지 확인했습니다. 문제는 ftyp 필드의 값이라는 것이 밝혀졌습니다. 'qt'로 설정되었습니다. MP4Box를 사용하여 트랙을 추출하고 ftyp가 'isom'으로 설정된 새 mp4 파일을 만들었습니다. 이 새 파일은 Progressive HTTP에서 제대로 작동했습니다.


1

나는 이것을 @ nam-trung의 대답에 명시된 방식과 유사하게 해결했지만 내 비디오가 이미 h264mp4 이기 때문에 각 파일에서 다음을 실행하는 것이 필요했습니다.

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

그 후 API v19 ~ v25를 실행하여 테스트 한 모든 장치에서 실행할 때 비디오가 모두 VideoView 에서 작동했습니다 .


0

제 경우에는 미디어 플레이어가 로컬에 저장된 비디오에 대한 파일 권한이 없기 때문에 오류가 발생했습니다. 비디오를 /mnt/sdCARD디렉토리 에 저장해보십시오 .


2
비디오를 저장할 수 없습니다. 외부 서버에서 스트리밍해야합니다.
Ayberk Özgür

0

나는 같은 문제에 직면했지만 내 편에서 한 일은

먼저 미디어 플레이어를 중지 한 다음 해제했습니다.

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


-1

제 경우이 문제는 공백이있는 미디어 URL로 인해 발생했습니다! 수정 사항은 다음과 같습니다.

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

Android Universal Media Player 앱 (UAMP)이이를 수행합니다. cbsrmt.com과 같은 URL에서 작동하도록 수정하는 방법은 위에 올바르게 표시됩니다.
Lee Hounshell 2016 년

-1

firebase를 사용하는 경우 1 : Download Url에서 경로 (또는 URL)를 복사해야합니다. https : // firebasestorage . ............. .

저장 위치가 아님

2 : <uses-permission android:name="android.permission.INTERNET" /> 매니페스트 폴더 내의 매니페스트 태그에이 권한을 추가합니다.

내부 보관 규칙

내부 보관 규칙 :

rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
 allow read, write: if true;
  }  
 }  
 }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.