2012-07-19 11 views
6

OK, đây là một chút bực bội và tôi đã tìm kiếm Stack nhưng không có câu trả lời nào có vẻ hữu ích.Android Video ngừng phát sau nhiều lần phát Lỗi 1, 2147483648

Tôi có một ứng dụng Android chạy qua các nội dung khác nhau trên màn hình. Tại một thời điểm, nó phát video, cùng một video, được tải từ cùng một vị trí.

Sau một số lần phát ngẫu nhiên, nó quyết định ngừng phát tệp video và ném lỗi lên trên (-2147483648) là lỗi chung không tìm thấy/lỗi định dạng không chính xác.

Sự cố là video phát chính xác nhiều lần trước khi lỗi này xuất hiện. Tôi đã thử một số lựa chọn thay thế để sửa chữa này:

  • một VideoView chơi một tập tin (đầu)
  • một combo MediaPlayer + SurfaceView đọc từ tập tin
  • MediaPlayer + SurfaceView đọc từ bộ mô tả tập tin
  • buộc quyền truy cập vào thế giới có thể đọc được
  • sao chép tệp vào tệp tạm thời và phát này
  • phát hành trình phát phương tiện theo cách thủ công cho cả tùy chọn VideoView và MediaPlayer
  • chạy bộ sưu tập rác thủ công sau mỗi lần phát

nhưng vẫn, sau nhiều lần phát, cuối cùng, nó sẽ từ chối phát video.

Một thay đổi có thể hoặc không có liên quan là khi phát từ một bộ mô tả tệp, nó ném một trình phát đa phương tiện chuẩn bị Java I/O ngoại lệ mà tôi tin là có liên quan đến có lẽ bằng cách nào đó một số khóa xảy ra trên tệp.

Cách duy nhất để khắc phục điều này là khởi động lại thiết bị. Khởi động lại ứng dụng không khắc phục được nó và ngay lập tức nó sẽ từ chối phát tệp.

Đây là VideoView đang chơi:

// 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(); 
} 

Quan điểm bề mặt sử dụng Android SDK mediaplaying dụ gần như chính xác, nhưng tôi không nghĩ rằng nó có giá trị dán mã, kể từ khi lỗi xảy ra bất kể bạn sử dụng phương pháp mediaplayer + surfaceview HOẶC phương pháp phát lại VideoView.

Suy nghĩ? Làm tôi phát điên.

CẬP NHẬT: Dưới đây là toàn bộ bản ghi bao gồm các ứng dụng chính và các hoạt động phim sinh ra

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 

UPDATE 2: Tôi đã thử nghiệm mã trên 2 thiết bị Android khác (một ICS, một Gingerbread) và khó chịu nó hoạt động tốt trên chúng và chạy trong hơn 12 giờ mà không có sự cố. Vì vậy, nó có vẻ là một lỗi nền tảng, nhưng vẫn cần phải giải quyết vấn đề này.

+0

bạn có thể dán nhật ký lỗi, vui lòng bao gồm các dòng nằm phía trên lỗi –

+0

Tôi chỉ chạy lại, sẽ dán nhật ký ngay, lưu ý rằng tôi đang chạy surfaceview ngay bây giờ. Có thể mất nửa giờ để sụp đổ. – DoctorDbx

+0

OK được cập nhật. Lưu ý, tôi đã phải lấy nhật ký này từ khởi động lại nhưng lỗi là như nhau. Nhìn vào nó nói 'không có lỗi codec' nhưng tất nhiên, nó đã phát video chính xác 37 lần trước đó. – DoctorDbx

Trả lời

1

Tôi gần như tích cực đây là vấn đề với thiết bị dựa trên Amlogic bạn đang sử dụng (hiển nhiên do "amplayer" và "AmlogicPlayer" trong nhật ký). Chúng tôi đã có rất nhiều vấn đề với thiết bị dựa trên AML8726 Amlogic mà chúng tôi đang thử nghiệm. Hãy thử nâng cấp firmware nếu có thể.

+1

Thật vậy đó là chipset trên hộp đang được sử dụng. Đã nâng cấp firmware lên phiên bản mới nhất có sẵn từ manuf. nhưng điều này không giải quyết được vấn đề. Nó cũng có một vài vấn đề khác. – DoctorDbx

+0

Thiết bị dựa trên amlogic vẫn gặp sự cố với AmlogicPlayer của họ và bộ đệm từ luồng trực tiếp vẫn siêu chậm so với các thiết bị khác. thời gian tải của cùng một luồng là 8 giây trong tất cả các thiết bị Amlogic ive thử nghiệm (4 trong tổng số), 3 giây trên một rk3188 và 3 giây trên một gt9200 samsung. thực sự khó chịu! – ole

0

Tôi không chắc Nhưng tôi nghĩ điều này là do một số vấn đề trong bộ nhớ đệm, vì nó phát trong x lần và sau đó dừng phát. Không thể truy cập tệp có thể do nhiều lý do: Quyền, tệp bị hỏng, tệp sai nhưng có vẻ như bạn là một trường hợp khác.

Bạn có thể sử dụng reset và thử lại

public void reset() Kể từ: API Level 1

Resets các MediaPlayer để nhà nước chưa được khởi tạo của nó. Sau khi gọi phương thức này, bạn sẽ phải khởi tạo lại bằng cách đặt dữ liệu nguồn và gọi điện chuẩn bị().

+0

Tôi sẽ làm điều đó nhưng có lẽ cần phải giải thích thêm một chút, việc phát lại video thực tế được thực hiện trong một hoạt động khác để duy trì bố cục và hoạt động trước đó. Khi phát lại xong, kết thúc() được gọi trên hoạt động và nó (nên được) bị phá hủy. Vì vậy, gọi lại đặt lại sẽ không thực sự quan trọng phải không? Nhưng .. sẽ cho nó một đi. – DoctorDbx

+0

đặt lại() không hoạt động. Lỗi tương tự. : -/ – DoctorDbx

+0

OK, do đó bạn đang xây dựng/sao chép tệp của mình trong một hoạt động và chơi trong một hoạt động khác, chỉ vì tò mò mà bạn đang kiểm tra trước khi phát tệp đó. Một số vấn đề có thể xảy ra ở cuối xây dựng/sao chép tệp đó. –

0

OK, tôi chưa bao giờ giải quyết vấn đề này với sự hài lòng tối thượng của mình, đặc biệt là vì nó dành riêng cho thiết bị. Cuối cùng tôi chỉ thêm vào trong xử lý ngoại lệ vì vậy nó sẽ không sụp đổ khi không chơi video và chỉ bỏ qua nó và thử lại lần sau.

Video phát trong vòng lặp vào lần sau, vì vậy tôi đoán đó là nội dung cụ thể cho thiết bị.