[android] Android MediaPlayer 오류 (1, -2147483648)

두 개의 다른 비디오를 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)는 지원되지 않는 코덱, 손상된 메타 데이터 또는 잘못된 파일 헤더에 해당 할 수 있습니다. 그렇다면 어떤 코덱을 사용할지 올바른 방향으로 안내해 주시겠습니까? 감사.



답변

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

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

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

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

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


답변

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


답변

스트리밍의 경우 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

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


답변

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

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

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


답변

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

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

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

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


답변

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

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


답변

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

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

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