2012-07-19 213 views
6

好吧,这有点令人沮丧,我已经搜索了Stack,但没有一个答案似乎有所帮助。Android视频在多次播放后停止播放错误1,2147483648

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

经过随机播放次数后,它决定停止播放视频文件,并将错误提示上方(-2147483648),这是一般文件未找到/格式不正确的错误。

问题是视频播放正确无数次,然后出现此错误。我已经尝试了一些替代品来解决这个:

  • 一个VideoView播放文件(开始)
  • 媒体播放+ SurfaceView组合从文件中读取
  • 的MediaPlayer + SurfaceView从文件描述符读取
  • 强制将权限设置为全球可读
  • 将文件复制到临时文件并播放此
  • 手动为VideoView和MediaPlayer选项手动释放媒体播放器
  • 运行手动垃圾收集各自发挥

,但仍后,多次播放完毕后,最终,它会拒绝播放视频。

可能或可能不相关的一个变化是,当从文件描述符播放时,它会抛出一个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(); 
} 

表面视图采用了Android SDK mediaplaying例子几乎一模一样,但我不认为这是值得粘贴代码,因为错误发生,无论您使用mediaplayer + surfaceview方法或VideoView播放方法。

想法?快把我逼疯。

UPDATE:下面是完整的日志包括主应用程序和催生了视频活动

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,一个姜饼),令人讨厌的是,它可以正常工作,并且没有发生事故超过12小时。所以,它看起来是一个平台错误,但仍然需要解决这个问题。

+0

可以粘贴错误日志,请包含错误以上的行 – 2012-07-19 07:16:34

+0

我只是再次运行它,将很快粘贴日志,请注意我现在正在运行SurfaceView。可能需要半个小时才能崩溃。 – DoctorDbx 2012-07-19 07:44:45

+0

确定已更新。请注意,我必须从重新启动中获取此日志,但错误是一样的。看着它说'没有编解码器失败',但当然,它已经在此之前正确播放了37次视频。 – DoctorDbx 2012-07-19 08:56:25

回答

1

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

+1

的确,这是正在使用的盒子上的芯片组。已将固件升级到制造商提供的最新版本。但这并没有解决问题。它也有其他一些问题。 – DoctorDbx 2012-08-25 01:41:53

+0

基于Amlogic的设备仍然存在AmlogicPlayer的问题,与其他设备相比,直播流缓冲仍然非常慢。所有经过测试的Amlogic设备(总共4个),rk3188上3秒和三星gt9200上3秒的相同流的加载时间为8秒。真的很刺激! – ole 2015-08-24 08:38:30

0

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

你可以使用reset,然后再试一次

公共无效复位()自:API等级1

重置在MediaPlayer其未初始化的状态。调用这个 方法后,您必须通过设置数据源 并调用prepare()来重新初始化它。

+0

我会这样做,但也许可能需要进一步解释一下,视频的实际播放是在不同的活动中进行的,以保留之前的布局和活动。播放完成后,finish()会在该活动上被调用,并且它应该被销毁。因此调用重置并不重要吗?但..会放弃它。 – DoctorDbx 2012-07-19 09:19:05

+0

reset()不起作用。同样的错误。 : -/ – DoctorDbx 2012-07-19 09:46:23

+0

好的,你可以在一个活动中创建/复制你的文件并在另一个活动中播放,只是出于好奇你在播放该文件之前检查。在构建/复制该文件结束时可能会发生一些问题。 – 2012-07-19 10:00:39

0

好吧,我从来没有解决这个问题到我的最终满意度,特别是因为它是特定的设备。最后,我只是在异常处理中添加了这样的功能,以便在播放视频失败时不会崩溃,下次再跳过并重试。

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