【问题标题】:Android Video stops playing after multiple plays Error 1, 2147483648Android 视频在多次播放后停止播放错误 1、2147483648
【发布时间】:2012-07-18 07:47:27
【问题描述】:

好的,这有点令人沮丧,我已经搜索了 Stack,但似乎没有一个答案有帮助。

我有一个 Android 应用程序,它在屏幕上循环显示不同的内容。有一次它会播放一个视频,同一个视频,从同一个地方加载。

在随机播放数次后,它决定停止播放视频文件并在上面抛出错误(-2147483648),这是一个通用文件未找到/格式不正确的错误。

问题是视频在出现此错误之前多次正确播放。我已经尝试了多种解决方法:

  • 播放文件的 VideoView(开始)
  • 从文件读取的 MediaPlayer + SurfaceView 组合
  • MediaPlayer + SurfaceView 从文件描述符中读取
  • 强制权限为世界可读
  • 将文件复制到临时文件并播放此文件
  • 为 VideoView 和 MediaPlayer 选项手动释放媒体播放器
  • 每次播放后运行手动垃圾收集

然而,在多次播放之后,它最终还是会拒绝播放视频。

一个可能相关也可能不相关的变化是,当从文件描述符播放时,它会引发媒体播放器准备 Java I/O 异常,我认为这可能与文件上发生某种锁定有关。

解决此问题的唯一方法是重新启动设备。重新启动应用程序并不能修复它,它会立即拒绝播放文件。

这是VideoView的播放代码:

// from main activity
File afile = new File(btvapp.fileroot,btvapp.getDailyVideo().get("FILENAME"));        
afile.setReadable(true, false);
theVideo = (VideoView) findViewById(R.id.videoViewer);
theVideo.requestFocus();
theVideo.setVideoPath(afile.getPath());
theVideo.setOnPreparedListener(this);
theVideo.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    @Override
    public void onCompletion(MediaPlayer mp) {
        // TODO Auto-generated method stub
        //mp.release();
        theVideo.stopPlayback();
        mp.release();
            finish();

    }
} );
theVideo.setOnErrorListener(new MediaPlayer.OnErrorListener() {
    @Override
    public boolean onError(MediaPlayer mp, int what, int extra) {
            finish();
            return false;
        }
    });

// play on prepared function
@Override
  public void onPrepared(MediaPlayer mp) {
  // TODO Auto-generated method stub
  mp.start();
}

surface view 几乎完全使用了 Android SDK 媒体播放示例,但我认为不值得粘贴代码,因为无论您使用 mediaplayer + surfaceview 方法还是 VideoView 播放方法都会发生错误。

想法?快把我逼疯了。

更新:这是完整的日志,包括主应用和生成的视频活动

07-19 18:47:02.844: V/videpath(7232): /mnt/sdcard/Android/data/au.com.nian.bullertv/files/tmpbtag.mp4
07-19 18:47:03.014: I/dalvikvm(7232): threadid=1: recursive native library load attempt (/system/lib/libmedia_jni.so)
07-19 18:47:03.014: D/MtpDeviceJNI(7232): register_android_mtp_MtpDevice
07-19 18:47:03.014: I/dalvikvm(7232): threadid=1: recursive native library load attempt (/system/lib/libmedia_jni.so)
07-19 18:47:03.014: I/dalvikvm(7232): threadid=1: recursive native library load attempt (/system/lib/libmedia_jni.so)
07-19 18:47:03.024: V/MediaPlayerService(87): Client(56) constructor
07-19 18:47:03.024: V/MediaPlayerService(87): Create new client(56) from pid 7232, uid 10043, 
07-19 18:47:03.034: V/MediaPlayerService(87): setDataSource(/mnt/sdcard/Android/data/au.com.nian.bullertv/files/tmpbtag.mp4)
07-19 18:47:03.034: V/MediaPlayerService(87): media.amsuperplayer.enable is enabled
07-19 18:47:03.034: V/MediaPlayerService(87): media.amsuperplayer.enable is enabled
07-19 18:47:03.034: V/MediaPlayerService(87): player type = 6
07-19 18:47:03.034: V/MediaPlayerService(87): Create AmSuperPlayer
07-19 18:47:03.034: V/AmSuperPlayer(87): [AmSuperPlayer::74]
07-19 18:47:03.034: V/AmSuperPlayer(87): [AmSuperPlayer::76]
07-19 18:47:03.034: V/AmSuperPlayer(87): AmSuperPlayer init now
07-19 18:47:03.034: V/AmSuperPlayer(87): [onFirstRef::103]
07-19 18:47:03.034: V/AmSuperPlayer(87): [initCheck::110]
07-19 18:47:03.034: V/AmSuperPlayer(87): [initCheck::112]
07-19 18:47:03.034: V/AmSuperPlayer(87): [setNotifyCallback::455]
07-19 18:47:03.034: V/AmSuperPlayer(87): [hardwareOutput::330]
07-19 18:47:03.034: V/AmSuperPlayer(87): [hardwareOutput::332]
07-19 18:47:03.034: V/AudioSink(87): AudioOutput(112)
07-19 18:47:03.034: V/MediaPlayerService(87):  setDataSource
07-19 18:47:03.034: V/AmSuperPlayer(87): [setDataSource::118]
07-19 18:47:03.034: V/AmSuperPlayer(87): [setDataSource::120]
07-19 18:47:03.034: V/MediaPlayerService(87): [56] setVideoSurfaceTexture(0x28290)
07-19 18:47:03.034: V/AmSuperPlayer(87): [setVideoSurfaceTexture::168]
07-19 18:47:03.034: V/AmSuperPlayer(87): [setVideoSurfaceTexture::170]
07-19 18:47:03.034: V/MediaPlayerService(87): [56] setVideoSurfaceTexture(0x29660)
07-19 18:47:03.034: V/MediaPlayerService(87): [56] setAudioStreamType(3)
07-19 18:47:03.034: V/MediaPlayerService(87): [56] prepareAsync
07-19 18:47:03.034: V/AmSuperPlayer(87): [prepareAsync::199]
07-19 18:47:03.034: V/AmSuperPlayer(87): [prepareAsync::202]
07-19 18:47:03.034: V/AmSuperPlayer(87): initThread(7388) started
07-19 18:47:03.034: V/AmSuperPlayer(87): createPlayer
07-19 18:47:03.034: V/AmSuperPlayer(87): Create Amlogic Player
07-19 18:47:03.034: V/AmlogicPlayer(87): AmlogicPlayer constructor
07-19 18:47:03.034: I/AmlogicPlayer(87): media.amplayer.stopbuflevel is not set
07-19 18:47:03.034: V/AmlogicPlayer(87): onFirstRef
07-19 18:47:03.034: I/AmlogicPlayer(87): found 0 not exit player threads,try exit it now
07-19 18:47:03.034: V/AmlogicPlayer(87): initCheck
07-19 18:47:03.034: V/AmSuperPlayer(87): [CreatePlayer::678]
07-19 18:47:03.034: V/AmlogicPlayer(87): setDataSource
07-19 18:47:03.034: V/AmlogicPlayer(87): History mgt old[,0,-1]
07-19 18:47:03.034: V/AmlogicPlayer(87): History mgt    [/mnt/sdcard/Android/data/au.com.nian.bullertv/files/tmpbtag.mp4,0,0]
07-19 18:47:03.034: V/AmlogicPlayer(87): setDataSource url=/mnt/sdcard/Android/data/au.com.nian.bullertv/files/tmpbtag.mp4, len=63
07-19 18:47:03.034: V/AmlogicPlayer(87): Set setVideoSurfaceTexture
07-19 18:47:03.034: I/AmlogicPlayer(87): media.amplayer.lpbufferlevel is not set
07-19 18:47:03.034: I/AmlogicPlayer(87): media.amplayer.buffertime is not set
07-19 18:47:03.034: V/AmlogicPlayer(87): prepareAsync
07-19 18:47:03.034: I/AmlogicPlayer(87): media.amplayer.noaudio is disabled
07-19 18:47:03.034: I/AmlogicPlayer(87): media.amplayer.novideo is disabled
07-19 18:47:03.034: V/AmlogicPlayer(87): buffer level setting is:0.001000-0.020000-0.800000
07-19 18:47:03.034: V/AmlogicPlayer(87): prepareAsync,file_name=/mnt/sdcard/Android/data/au.com.nian.bullertv/files/tmpbtag.mp4
07-19 18:47:03.034: I/amplayer(87): LibPlayer version:Version:2.1.0.
07-19 18:47:03.034: I/amplayer(87): LibPlayer git version:
07-19 18:47:03.034: I/amplayer(87): LibPlayer version serial:201000000000000
07-19 18:47:03.034: I/amplayer(87): LibPlayer Last Changed:
07-19 18:47:03.034: I/amplayer(87): LibPlayer Last Build: Tue May 22 17:40:26 HKT 2012
07-19 18:47:03.034: I/amplayer(87): LibPlayer Builer Name: clei
07-19 18:47:03.034: I/amplayer(87): [player_start:enter]p=0x2a98dc black=0
07-19 18:47:03.034: I/amplayer(87): ***player_para=0x112d28,start_param=0x2a98dc
07-19 18:47:03.034: I/amplayer(87): [player_thread_create:70]creat thread success,tid=149280
07-19 18:47:03.034: I/amplayer(87): [player_start:exit]pid = 23 
07-19 18:47:03.034: V/AmlogicPlayer(87): Start player,pid=23
07-19 18:47:03.034: I/amplayer(87): pid[23]::enter into player_thread
07-19 18:47:03.034: I/amplayer(87): pid[23]::Init State: mute_on=0 black=0 t_pos:1074106323s read_max_cnt=0
07-19 18:47:03.034: I/amplayer(87): file::::[/mnt/sdcard/Android/data/au.com.nian.bullertv/files/tmpbtag.mp4],len=63
07-19 18:47:03.154: I/amplayer(87): **[update_state]pid:23 status=BEGIN_INIT(last:UNKNOW_STATE) err=0x0 curtime=0 (ms:0) fulltime=0 lsttime=0
07-19 18:47:03.154: I/amplayer(87): **[update_state]abuflevel=0.000 vbublevel=0.000 abufrp=0 vbufrp=0 read_end=0
07-19 18:47:03.154: V/AmlogicPlayer(87): update_process pid=23, current=0,status=[BEGIN_INIT]
07-19 18:47:03.154: V/AmlogicPlayer(87): Playing percent =0,mPlayTime:0,mStreamTime:0
07-19 18:47:03.154: V/AmSuperPlayer(87): [notify::404]
07-19 18:47:03.154: V/AmSuperPlayer(87): [Notify::411]
07-19 18:47:03.154: V/AmSuperPlayer(87): cookie=0x475e0,msg=3,ext1=0,ext2=0
07-19 18:47:03.154: I/amplayer(87): [ffmpeg_open_file] file=/mnt/sdcard/Android/data/au.com.nian.bullertv/files/tmpbtag.mp4,header=
07-19 18:47:03.154: I/amplayer(87): ffmpeg error: Couldn't open input file! ret==ffffffe8
07-19 18:47:03.154: I/amplayer(87): [player_dec_init]ffmpeg_open_file failed(/mnt/sdcard/Android/data/au.com.nian.bullertv/files/tmpbtag.mp4)*****ret=fcffffff!
07-19 18:47:03.154: I/amplayer(87): pid[23]player_thread release0 begin...(sta:0x30001)
07-19 18:47:03.154: I/amplayer(87): [get_pts_video]No codec handler
07-19 18:47:03.154: I/amplayer(87): **[update_state]pid:23 status=ERROR(last:BEGIN_INIT) err=0x3000001 curtime=0 (ms:0) fulltime=0 lsttime=0
07-19 18:47:03.154: I/amplayer(87): **[update_state]abuflevel=0.000 vbublevel=0.000 abufrp=0 vbufrp=0 read_end=0
07-19 18:47:03.154: V/AmlogicPlayer(87): update_process pid=23, current=0,status=[ERROR]
07-19 18:47:03.154: V/AmSuperPlayer(87): [notify::404]
07-19 18:47:03.154: V/AmSuperPlayer(87): [Notify::411]
07-19 18:47:03.154: V/AmSuperPlayer(87): cookie=0x475e0,msg=64,ext1=1,ext2=fcffffff
07-19 18:47:03.154: V/AmSuperPlayer(87): [CreatePlayer::702]
07-19 18:47:03.154: I/AmSuperPlayer(87): media.amplayer.enable is enabled
07-19 18:47:03.154: I/AmSuperPlayer(87): media.stagefright.enable-player is disabled
07-19 18:47:03.154: V/AmSuperPlayer(87): [CreatePlayer::713]
07-19 18:47:03.154: V/AmSuperPlayer(87): Need to creat new player=3
07-19 18:47:03.154: V/AmlogicPlayer(87): stop
07-19 18:47:03.154: I/amplayer(87): [player_stop:enter]pid=23
07-19 18:47:03.154: I/amplayer(87): [player_stop]player_status=30001
07-19 18:47:03.154: I/amplayer(87): [player_stop]pid=23 thread is already stopped
07-19 18:47:03.154: V/AmlogicPlayer(87): AmlogicPlayer destructor
07-19 18:47:03.154: V/AmlogicPlayer(87): release
07-19 18:47:03.154: V/AmlogicPlayer(87): [release::1461]
07-19 18:47:03.154: I/amplayer(87): [player_stop:enter]pid=23
07-19 18:47:03.154: I/amplayer(87): [player_stop]player_status=30001
07-19 18:47:03.154: I/amplayer(87): [player_stop]pid=23 thread is already stopped
07-19 18:47:03.154: I/amplayer(87): [player_exit:enter]pid=23
07-19 18:47:03.154: I/amplayer(87): [player_exit]player_state=0x30001
07-19 18:47:03.154: I/amplayer(87): [player_stop:enter]pid=23
07-19 18:47:03.154: I/amplayer(87): [player_stop]player_status=30001
07-19 18:47:03.154: I/amplayer(87): [player_stop]pid=23 thread is already stopped
07-19 18:47:03.154: I/amplayer(87): [player_thread_wait_exit:80]pid=[23] thead_id=149280
07-19 18:47:03.154: V/AmlogicPlayer(87): Player status:ERROR, error occur
07-19 18:47:03.154: V/AmSuperPlayer(87): [notify::404]
07-19 18:47:03.154: V/AmSuperPlayer(87): [Notify::411]
07-19 18:47:03.154: V/AmSuperPlayer(87): cookie=0x475e0,msg=64,ext1=1,ext2=ffffffff
07-19 18:47:03.154: I/amplayer(87): **[update_state]pid:23 status=EXIT(last:ERROR) err=0x0 curtime=0 (ms:0) fulltime=0 lsttime=0
07-19 18:47:03.154: I/amplayer(87): **[update_state]abuflevel=0.000 vbublevel=0.000 abufrp=0 vbufrp=0 read_end=0
07-19 18:47:03.154: V/AmlogicPlayer(87): update_process pid=23, current=0,status=[EXIT]
07-19 18:47:03.154: V/AmlogicPlayer(87): Player status:EXIT, playback exit
07-19 18:47:03.154: I/amplayer(87): pid[23]::stop play, exit player thead!(sta:0x30004)
07-19 18:47:03.154: I/amplayer(87): [player_thread_wait_exit:86]thead_id=149280 returning
07-19 18:47:03.154: I/amplayer(87): [player_exit]player thread already exit: 0
07-19 18:47:03.154: I/amplayer(87): [player_release_pid:72]release pid=23
07-19 18:47:03.154: I/amplayer(87): [player_exit:exit]pid=23
07-19 18:47:03.154: V/AmlogicPlayer(87): set fs/sys/class/video/disable_video=2 failed
07-19 18:47:03.154: I/amplayer(87): ENABLE_FREE_SCALE not define!
07-19 18:47:03.154: I/amplayer(87): [get_display_mode]display_mode=fail
07-19 18:47:03.154: I/amplayer(87): open /sys/class/graphics/fb0/scale fail.
07-19 18:47:03.154: I/amplayer(87): open /sys/class/graphics/fb1/scale fail.
07-19 18:47:03.154: I/amplayer(87): open /sys/class/graphics/fb1/scale_axis fail.
07-19 18:47:03.154: I/amplayer(87): open /sys/class/graphics/fb0/blank fail.
07-19 18:47:03.154: I/amplayer(87): open /sys/class/graphics/fb1/blank fail.
07-19 18:47:03.154: I/amplayer(87): [get_display_mode]display_mode=fail
07-19 18:47:03.154: I/amplayer(87): open /sys/class/graphics/fb0/free_scale fail.
07-19 18:47:03.154: I/amplayer(87): open /sys/class/graphics/fb1/free_scale fail.
07-19 18:47:03.154: I/amplayer(87): open /sys/class/video/axis fail.
07-19 18:47:03.154: I/amplayer(87): open /sys/class/ppmgr/ppscaler fail.
07-19 18:47:03.154: I/amplayer(87): open /sys/class/ppmgr/ppscaler_rect fail.
07-19 18:47:03.154: I/amplayer(87): display mode: 292344
07-19 18:47:03.154: I/amplayer(87): [enable_freescale_MBX]set video axis: 0 0 0 0 
07-19 18:47:03.154: V/AmlogicPlayer(87): VideoViewClose=-33554433
07-19 18:47:03.154: V/AmlogicPlayer(87): [release::1471]
07-19 18:47:03.154: V/AmlogicPlayer(87): History mgt old[,0,-1]
07-19 18:47:03.154: V/AmlogicPlayer(87): History mgt    [/mnt/sdcard/Android/data/au.com.nian.bullertv/files/tmpbtag.mp4,1,0]
07-19 18:47:03.154: V/AmSuperPlayer(87): createPlayer
07-19 18:47:03.154: V/AmSuperPlayer(87):  create StagefrightPlayer
07-19 18:47:03.154: V/AmSuperPlayer(87): [CreatePlayer::678]
07-19 18:47:03.154: I/AwesomePlayer(87): setDataSource_l('/mnt/sdcard/Android/data/au.com.nian.bullertv/files/tmpbtag.mp4')
07-19 18:47:03.154: V/AmSuperPlayer(87): [CreatePlayer::713]
07-19 18:47:03.154: V/AmSuperPlayer(87): [CreatePlayer::729]
07-19 18:47:03.154: V/AmSuperPlayer(87): Start new player now=3
07-19 18:47:03.154: V/AmSuperPlayer(87): [initThread::762]
07-19 18:47:03.154: V/AmSuperPlayer(87): [notify::404]
07-19 18:47:03.154: V/AmSuperPlayer(87): [Notify::411]
07-19 18:47:03.154: V/AmSuperPlayer(87): cookie=0x475e0,msg=64,ext1=1,ext2=80000000
07-19 18:47:03.154: V/MediaPlayerService(87): [56] notify (0x23d50, 100, 1, -2147483648)
07-19 18:47:03.154: **E/MediaPlayer(7232): error (1, -2147483648)**
07-19 18:47:03.154: V/videoerr(7232): java.io.IOException: Prepare failed.: status=0x1

更新 2: 我已经在其他 2 台 Android 设备(一台 ICS,一台 Gingerbread)上测试了代码,令人讨厌的是,它在它们上运行良好,并且运行了 12 多个小时而没有发生任何事故。所以,它看起来是一个平台错误,但仍然需要解决这个问题。

【问题讨论】:

  • 你能粘贴错误日志吗,请包括错误上方的行
  • 我只是再次运行它,稍后将粘贴日志,注意我现在正在运行surfaceview。崩溃可能需要半个小时。
  • 确定已更新。请注意,我必须从重新启动中获取此日志,但错误是相同的。看着它说“没有编解码器故障”,但当然,在此之前它已经正确播放了 37 次视频。
  • 所有这一切让我认为这是某种文件锁定或缓存错误......当我通过 Android 上的文件浏览器播放它时,它可以正常播放,但在应用程序启动时仍然崩溃。
  • 出于好奇,您在什么设备上试用过这个?

标签: android android-videoview android-mediaplayer


【解决方案1】:

我几乎可以肯定这是您正在使用的基于 Amlogic 的设备的问题(由于 logcat 中的“amplayer”和“AmlogicPlayer”很明显)。我们正在测试的基于 Amlogic AML8726 的设备存在大量问题。如果可能,请尝试升级固件。

【讨论】:

  • 确实是正在使用的盒子上的芯片组。已将固件升级到 manuf 提供的最新版本。但这并没有解决问题。它还有一些其他问题。
  • 基于 Amlogic 的设备的 AmlogicPlayer 仍然存在问题,与其他设备相比,实时流的缓冲仍然非常慢。在我测试的所有 Amlogic 设备(总共 4 个)中,相同流的加载时间为 8 秒,在 rk3188 上为 3 秒,在三星 gt9200 上为 3 秒。真的很烦人!
【解决方案2】:

好吧,我从来没有解决这个问题让我非常满意,尤其是因为它是特定于设备的。最后我只是添加了异常处理,因此在播放视频失败时它不会崩溃,只需跳过它,下次再试一次。

视频确实会在下一次循环播放,所以我猜它是特定于设备的。

【讨论】:

    【解决方案3】:

    我不确定但我认为这是由于一些缓存问题,因为它播放了 x 次然后停止播放。文件无法访问,可能有多种原因:权限、文件损坏、文件错误,但您的情况似乎不同。

    你能不能用reset再试一次

    public void reset () 自:API 级别 1

    将 MediaPlayer 重置为未初始化状态。调用这个之后 方法,你将不得不通过设置数据再次初始化它 源并调用 prepare()。

    【讨论】:

    • 我会这样做,但也许有必要进一步解释一下,视频的实际播放是在不同的活动中进行的,以保留以前的布局和活动。播放完成后,在 Activity 上调用 finish() 并将其(应该)销毁。因此,调用 reset 并不重要吗?但是..会试一试。
    • 好的,所以您在一个活动中构建/复制文件并在另一个活动中播放,只是出于好奇,您在播放该文件之前是否存在检查。在构建/复制该文件结束时可能会出现一些问题。
    • 文件不存在是实际下载的,所以肯定会检查是否存在(不存在播放器不播放,而是用asynctask下载如果不存在,应用程序将继续循环)。该文件肯定也存在,它预先播放了 37 次就证明了这一点。这真是令人头疼的问题,但不幸的是,这是我需要解决的问题。
    • 在文件管理器或图库中打开文件时,视频可以通过股票媒体播放器正常播放。上次是第 37 次,我会很快告诉你它是否一直在 37 日停止。我只是在创建这个问题时设置了一个计数器。
    • 这是一个真正令人头疼的问题。为什么在 37 日之后?当每次播放相同的文件时。有一个简单的检查来找出您的视频视图是否有问题使用其他媒体播放器播放它。这将帮助您查明错误。我的意思是继续播放股票媒体播放器,直到它崩溃
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多