2012-07-19 28 views
6

OK, esto es un poco frustrante, y he buscado Stack pero ninguna de las respuestas parece ayudar.Android Video deja de reproducirse después de varias reproducciones Error 1, 2147483648

Tengo una aplicación para Android que muestra diferentes contenidos en la pantalla. En un momento, reproduce un video, el mismo video, cargado desde el mismo lugar.

Después de un número aleatorio de reproducciones, decide dejar de reproducir el archivo de video y arroja el error arriba (-2147483648) que es un archivo genérico no encontrado/error de formato incorrecto.

El problema es que el video se reproduce correctamente varias veces antes de que aparezca este error. He intentado una serie de alternativas para la fijación del mismo:

  • un VideoView reproducción de un archivo (el comienzo)
  • un combo MediaPlayer + SurfaceView al leer el archivo
  • MediaPlayer + SurfaceView lectura de descriptor de archivo
  • forzando permisos para leer en todo el mundo
  • copiando el archivo en un archivo temporal y reproduciendo este
  • liberando manualmente el reproductor para las opciones VideoView y MediaPlayer
  • funcionamiento manual de recolección de basura después de cada juego

y aún así, después de múltiples obras de teatro, con el tiempo, que se niegan a reproducir el vídeo.

Un cambio que podría o no ser relevante es cuando se reproduce un descriptor de archivo que arroja un reproductor de medios que prepara Java I/O Excepción que creo que está relacionado con tal vez hay algún bloqueo en el archivo.

La única forma de solucionar esto es reiniciando el dispositivo. Reiniciar la aplicación no lo soluciona e inmediatamente se negará a reproducir el archivo.

Este es el código jugar 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(); 
} 

La vista de la superficie utiliza el SDK de Android ejemplo mediaplaying casi exactamente, pero no creo que vale la pena pegar el código, ya que ocurre el error, independientemente de si utilice el método mediaplayer + surfaceview O el método de reproducción VideoView.

¿Pensamientos? Volviéndome loco.

ACTUALIZACIÓN: Aquí está el registro completo, incluyendo la aplicación principal y la actividad de video generado

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 

ACTUALIZACIÓN 2: He probado el código en otros 2 dispositivos Android (un ICS, un pan de jengibre) y molestamente funciona bien en ellos y funcionó durante más de 12 horas sin incidentes. Por lo tanto, parece ser un error de plataforma, pero aún debe resolver esto.

+0

puede pegar el registro del error, incluya las líneas que están por encima del error –

+0

Lo estoy ejecutando nuevamente, pegará el registro en breve, tenga en cuenta que estoy ejecutando SurfaceView en este momento. Puede demorar media hora en colisionar. – DoctorDbx

+0

OK actualizado. Tenga en cuenta que tuve que tomar este registro desde el reinicio, pero el error es el mismo. Al mirar en él dice "no falla el códec", pero por supuesto, ha reproducido el video correctamente 37 veces antes de esto. – DoctorDbx

Respuesta

1

Estoy casi seguro de que este es un problema con el dispositivo basado en Amlogic que está utilizando (evidente debido al "amplayer" y "AmlogicPlayer" en el logcat). Hemos tenido muchos problemas con un dispositivo Amlogic AML8726 que estamos probando. Intente actualizar el firmware si es posible.

+1

De hecho, ese es el conjunto de chips en la caja que se utiliza. Ha actualizado el firmware a la última disponible desde manuf. pero esto no resolvió el problema. También tiene algunos otros problemas. – DoctorDbx

+0

los dispositivos basados ​​en Amlogic todavía tienen problemas con su AmlogicPlayer, y el almacenamiento en memoria intermedia de las transmisiones en vivo sigue siendo super lento en comparación con otros dispositivos. los tiempos de carga de la misma secuencia son 8 segundos en todos los dispositivos de Amlogic probados (4 en total), 3 segundos en un rk3188 y 3 segundos en un Samsung GT9200. realmente irritante! – ole

0

No estoy seguro Pero creo que esto se debe a un problema de almacenamiento en caché, ya que se reproduce x veces y luego deja de reproducirse. No se puede acceder al archivo que puede deberse a varias razones: Permisos, archivo dañado, archivo incorrecto, pero parece ser un caso diferente.

Se puede utilizar reset y vuelve a intentarlo

reinicio public void() desde: API Nivel 1

Restablece el MediaPlayer a su estado no inicializado. Después de llamar a este método , tendrá que inicializarlo de nuevo configurando los datos fuente y llamando a prepare().

+0

Haré eso, pero tal vez sea necesario explicar un poco más, la reproducción real del video se lleva a cabo en una actividad diferente para preservar el diseño y la actividad anteriores. Cuando finalice la reproducción, se llama a finish() sobre la actividad y se debe (se debe) destruir. Por lo tanto, restablecer las llamadas no importaría realmente, ¿verdad? Pero ... lo intentaré. – DoctorDbx

+0

restablecer() no funcionó. Mismo error. : -/ – DoctorDbx

+0

OK, por lo que está compilando/copiando su archivo en una actividad y jugando en otra, solo por curiosidad está revisando antes de reproducir ese archivo. Algún problema puede estar ocurriendo al final de compilar/copiar ese archivo. –

0

Bien, nunca resolví esto para mi máxima satisfacción, especialmente porque era particular de un dispositivo. Al final acabo de agregar el manejo de excepciones para que no se bloquee al no poder reproducir el video y solo omitirlo y volver a intentarlo la próxima vez.

El video se reproduce la próxima vez, así que supongo que es algo específico del dispositivo.

Cuestiones relacionadas