首页 文章

Android MediaPlayer错误(1,-2147483648)

提问于
浏览
64

我有两个不同的视频,我正在尝试加载到 VideoView 使用

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

这两个视频,即视频1和视频2,具有以下规格(使用 ffmpeg -i 提取);实际上,它们是同一视频的两种不同编码:

  • 视频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:
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,因此我用几种设备测试了视频;结果如下:

  • 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)

这两款视频都可以在PC上的Google Chrome中播放 . 在正常情况下添加视频和音频都可以正常播放可能很有用 . 在错误(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)可能对应于不受支持的编解码器,损坏的元数据或不正确的文件头 . 如果是这样,你能指出我正确的方向使用哪个编解码器?谢谢 .

10 回答

  • 7

    只是为了根据 Headers 阅读这个问题的任何人澄清一些事情 .

    查看错误值(1,-2147483648)时,'1'值对应于MediaPlayer.MEDIA_ERROR_UNKNOWN中的常量 .

    -2147483648对应于十六进制0x80000000,在frameworks / native / include / utils / Errors.h中定义为UNKNOWN_ERROR

    这表明错误的源很难确定,因为它是一个非常通用的返回值,由上面提到的编解码器和兼容性问题抛出,但也有线程取消和其他几种类型 .

    对于您的问题,我建议您使用兼容的Android版本查看Android Supported Media Formats并查看编码类型是否是导致问题的原因,但如上所述,未知错误响应可能是由许多问题引起的 .

  • 0

    对于流媒体,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
    

    您还可以找到其他工具here .

  • 0

    我在Android P(Pixel 2 XL)上遇到了同样的错误,但我所要做的就是将 android:usesCleartextTraffic="true" 放在我的 AndroidManifest.xml 应用程序标签上 .

  • 1

    请注意支持介质类型和设备的分辨率 . 当您的设备不支持您的视频媒体类型,编解码器或分辨率时,通常会出现错误 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字段的 Value . 它被设置为'qt' . 我使用MP4Box提取曲目并创建一个新的mp4文件,其ftyp设置为'isom' . 这个新文件适用于Progressive HTTP .

  • 2

    播放视频(rtsp)时,我也遇到了相同的 MEDIA_ERROR_UNKNOWN 错误问题 .

    在我的情况下,我发现我的无线网络问题 . 一些安全原因wifi限制为RTSP协议 . 所以我正面临这个MEDIA_ERROR_UNKNOWN错误问题 . 检查一下您的网络权限 .

    当我转向移动数据播放视频时,它对我来说很好 . 对于遇到同样错误的人来说,这可能会有所帮助:) .

  • 1

    在我的情况下,错误是由于媒体播放器没有本地存储的视频的文件权限 . 尝试将视频存储到 /mnt/sdCARD 目录中 .

  • 93

    我面临同样的问题,但我在我身边所做的是

    首先,我停止媒体播放器,然后发布它 .

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

  • 0

    我解决了这个问题与@ nam-trung的回答中说的相似,但是我的视频已经 h264mp4 所有我需要做的是在每个文件上运行以下命令:

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

    之后,在运行API v19到v25的所有设备上运行时,视频都在VideoView中运行 .

  • 4

    在我的情况下,此问题是由带空格的媒体URL引起的!这是修复:

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

相关问题