Android: ошибка поиска видео - PullRequest
       24

Android: ошибка поиска видео

2 голосов
/ 24 октября 2011

У меня есть приложение с видеоплеером. Я реализовал метод, который сохраняет текущую позицию в видео, так что в следующий раз, когда пользователь воспроизводит то же видео, оно воспроизводится с того места, где его оставили. Однако я не могу загрузить видео с той позиции, откуда оно осталось. Журнал cat постоянно показывает эту ошибку

10-23 21:23:23.699: ERROR/TI_Video_Decoder(1250): Unknown event: 1
10-23 21:23:23.699: ERROR/TI_Video_Decoder(1250): Corrupted Data in buffer 0x2b59c8 0(int# 0/0)
10-23 21:23:23.699: ERROR/TI_Video_Decoder(1250): Unknown event: 1
10-23 21:23:23.699: ERROR/TI_Video_Decoder(1250): Corrupted Data in buffer 0x4a2ad0 0(int# 0/0)
10-23 21:23:23.699: ERROR/TI_Video_Decoder(1250): Unknown event: 1
10-23 21:23:23.699: ERROR/TI_Video_Decoder(1250): Corrupted Data in buffer 0x2b5a20 0(int# 0/0)
10-23 21:23:23.699: ERROR/TI_Video_Decoder(1250): Unknown event: 1
10-23 21:23:23.699: ERROR/TI_Video_Decoder(1250): Unknown event: 1
10-23 21:23:23.699: ERROR/TI_Video_Decoder(1250): Corrupted Data in buffer 0x1c09a0 0(int# 0/0)
10-23 21:23:23.699: ERROR/TI_Video_Decoder(1250): Unknown event: 1
10-23 21:23:23.699: ERROR/TI_Video_Decoder(1250): Unknown event: 1
10-23 21:23:23.699: ERROR/TI_Video_Decoder(1250): Corrupted Data in buffer 0x3dafa0 0(int# 0/0)
10-23 21:23:23.707: ERROR/TI_Video_Decoder(1250): Unknown event: 1
10-23 21:23:23.707: ERROR/TI_Video_Decoder(1250): Unknown event: 1
10-23 21:23:23.707: ERROR/TI_Video_Decoder(1250): Unknown event: 1
10-23 21:23:23.707: ERROR/TI_Video_Decoder(1250): Corrupted Data in buffer 0x2b59c8 0(int# 0/0)
10-23 21:23:23.707: ERROR/TI_Video_Decoder(1250): Corrupted Data in buffer 0x1c4028 0(int# 0/0)
10-23 21:23:23.707: ERROR/TI_Video_Decoder(1250): Corrupted Data in buffer 0x2b5a20 0(int# 0/0)
10-23 21:23:23.707: ERROR/TI_Video_Decoder(1250): Corrupted Data in buffer 0x4a2ad0 0(int# 0/0)

Это мой код для воспроизведения видео. Кто-нибудь может направить меня сюда, почему я получаю эту ошибку. Спасибо .. вот код

открытый класс Player расширяет активность {

private static Context mContext;
private int mStartTime = 0;
private int sliderPosition; 
private int setTime;
private String uriString; 
private MediaPlayer player;

private class ErrorListener implements OnErrorListener {

private class CompletionListener implements OnCompletionListener {
    // FIXME: @Override
    public void onCompletion(MediaPlayer mp) {
        mContext = null;
        mStartTime = 0;
        System.exit(-1);
    }
}

private static Context getContext() {
    return mContext;
}

private static void setContext(Context context) {
    mContext = context;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    System.gc();
super.onCreate(savedInstanceState);
    setContext(this);
    Intent intent = getIntent();
    Uri uri = intent.getData();
    uriString = intent.getStringExtra("filename" );
    if (uri != null) {  
        setContentView(R.layout.videoview);
        VideoView videoView = (VideoView) findViewById(R.id.videoview);
        videoView.setVideoURI(uri);
        videoView.setMediaController(new MediaController(this));
        videoView.setOnErrorListener(new ErrorListener());
        videoView.setOnCompletionListener(new CompletionListener());
        videoView.setKeepScreenOn(true);
        videoView.requestFocus();
    }
}//onCreate Method Ends

public void onStart(){
    super.onStart();
    VideoView videoView = (VideoView) findViewById(R.id.videoview);
    SharedPreferences Settings = getSharedPreferences("MyStoragePreferences", MODE_PRIVATE);
  if(Settings.contains(uriString))
    {
        setTime= Settings.getInt(uriString, 0);
        videoView.seekTo(setTime);
    videoView.start();
    }
    else
    {
        videoView.seekTo(mStartTime);
        videoView.seekTo(0);
        if (mStartTime == 0){
        videoView.start();
        }
    }
}

public void onSaveInstanceState(Bundle outState){
    VideoView videoView = (VideoView) findViewById(R.id.videoview);
    mStartTime = videoView.getCurrentPosition();
    outState.putInt("restartTime", mStartTime);
    super.onSaveInstanceState(outState);
}

@Override
protected void onDestroy() {
    mContext = null;
    super.onDestroy();
}

@Override
protected void onStop(){
    super.onStop();
    VideoView videoView = (VideoView) findViewById(R.id.videoview);
    videoView.stopPlayback();

}

@Override
protected void onPause(){
    super.onPause();
    VideoView videoView = (VideoView) findViewById(R.id.videoview);
    sliderPosition= videoView.getCurrentPosition();
    SharedPreferences Settings = getSharedPreferences("MyStoragePreferences", MODE_PRIVATE);
    SharedPreferences.Editor prefEditor = Settings.edit();
    prefEditor.putInt(uriString, sliderPosition);
    prefEditor.commit();
}

}

1 Ответ

2 голосов
/ 24 октября 2011

Из документации:

Несмотря на то, что асинхронный вызов seekTo(int) возвращает правильный путь, фактическая операция поиска может занять некоторое время, особенно для потоковой передачи аудио / видео.Когда фактическая операция поиска завершается, внутренний механизм проигрывателя вызывает пользователя, введенного OnSeekComplete.onSeekComplete(), если OnSeekCompleteListener был предварительно зарегистрирован через setOnSeekCompleteListener(OnSeekCompleteListener).

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

...