Android Video перестает играть после нескольких воспроизведений Ошибка 1, 2147483648

Хорошо, это немного расстраивает, и я искал Stack, но ни один из ответов, похоже, не помогает.

У меня есть приложение для Android, которое циклически проходит через различное содержимое на экране. В какой-то момент он воспроизводит видео, одно и то же видео, загруженное с того же места.

После случайного количества игр он решает прекратить воспроизведение видеофайла и выдает ошибку выше (-2147483648), которая является общей ошибкой не найденной / неправильной формы файла.

Проблема заключается в том, что видео воспроизводится правильно много раз до появления этой ошибки. Я пробовал ряд альтернатив для исправления этого:

  • VideoView, воспроизводящий файл (начало)
  • Комбинированное чтение MediaPlayer + SurfaceView из файла
  • Чтение MediaPlayer + SurfaceView из дескриптора файла
  • Форсирование разрешений на чтение в мире
  • Копирование файла во временный файл и воспроизведение этого
  • Вручную освобождая медиаплеер для параметров VideoView и MediaPlayer
  • Запуск ручной сборки мусора после каждой игры

И все же, после нескольких игр, в конце концов, он откажется воспроизводить видео.

Одно изменение, которое может или не может быть релевантным, заключается в том, что при воспроизведении из файлового дескриптора он выдает медийный плагин для подготовки исключения Java I / O Exception, который, как мне кажется, связан с тем, что в файле есть какая-то блокировка.

Единственный способ исправить это – перезагрузить устройство. Перезапуск приложения не исправляет его, и он немедленно откажется от воспроизведения файла.

Вот код воспроизведения 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 почти точно, но я не думаю, что стоит вставить код, поскольку ошибка происходит независимо от того, используете ли вы метод 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: Я протестировал код на двух других устройствах Android (один ICS, один Gingerbread) и досадно, что он отлично работает на них и работает более 12 часов без инцидентов. Таким образом, это выглядит ошибкой платформы, но все равно нужно решить эту проблему.

Я почти уверен, что это проблема с используемым устройством Amlogic (очевидно, из-за «amplayer» и «AmlogicPlayer» в logcat). У нас было много проблем с устройством Amlogic AML8726, которое мы тестируем. Попробуйте обновить прошивку, если это возможно.

Я не уверен, но я думаю, что это связано с некоторой проблемой кэширования, поскольку она играет в течение x раз, а затем перестает играть. Файл недоступен, что может быть вызвано несколькими причинами: разрешениями, поврежденным файлом, неправильным файлом, но, похоже, это другой случай.

Вы можете использовать сброс и повторить попытку

Public void reset () Начиная с: API уровня 1

Сбрасывает MediaPlayer в неинициализированное состояние. После вызова этого метода вам придется снова инициализировать его, установив источник данных и вызов prepare ().

Хорошо, я никогда не разрешал это к моему окончательному удовлетворению, тем более, что это было особенно важно для устройства. В конце концов, я просто добавил в обработку исключений, чтобы он не сбой при сбое воспроизведения видео и просто пропустить его и повторить попытку в следующий раз.

В следующий раз видео воспроизводится в цикле, поэтому я предполагаю, что это что-то особенное для устройства.

Intereting Posts
Android DownloadManager «Невозможно открыть файл» Как оживить значок меню переполнения панели инструментов Как установить тип содержимого на HttpURLConnection? Автономный режим приложения Android, локальная синхронизация базы данных sqlite с удаленной базой данных Android Вертикальная прокрутка для ListView внутри горизонтального scrollView GCM 3.0 Требуется обновить токен регистрации? Android: получение даты и времени с сервера NTP Анимированная анимация для Android с экраном Splash, как приложение Palabre Android wifi сниффер: найти ближайшие устройства Есть ли метод setSharedElementsUseOverlay () для переходов Фрагмента? Вернитесь к предыдущему экрану, не создавая новый экземпляр Протоколы SSL / TLS и комплекты шифров с AndroidHttpClient Раздвижные вкладки на панели инструментов с использованием дизайна материалов Предварительный просмотр камеры в Android 7 Отсутствует телефонная книга cordova.js