2016-01-26 5 views
0

Итак, у меня есть IP-камера, которая выводит видеопоток, с которым я могу подключиться через протокол rtsp. Я хочу показать это в своем приложении для Android, поэтому я создал видеообзор, используя следующий код;Задержка видеопотока и отсоединение видеоизображения с использованием потока ip-камеры

VideoView vv = (VideoView)this.findViewById(R.id.videoView); 
    Uri uri = Uri.parse("rtsp://username:[email protected]:554/1/stream3"); 
    vv.setVideoURI(uri); 
    vv.requestFocus(); 
    vv.start(); 

Я ставлю это в OnCreate() основного класса активности, поэтому, когда приложение загружает до него автоматически подключается и начинает потоковое воспроизведение. Мой опыт в этом заключается в том, что он работает, но в конечном итоге становится беспорядочным и просто останавливается случайным образом и, похоже, никогда не возвращается к работе снова. Я должен закрыть приложение и очистить его от памяти и перезапустить его, чтобы вернуть его, - но потом он теряет связь вскоре после этого, что означает, что он почти бесполезен.

Я также обнаружил, что он немного отстает при касании объектов экрана, таких как меню или кнопки, но это может быть просто совпадением - я не могу сказать точно.

Дело в том, что поток идеально подходит для ПК в той же сети через VLC, используя тот же URL-адрес. Итак, что я делаю неправильно, и есть ли лучший способ обработки потокового видео? В конечном итоге я хотел связать видео с некоторыми наложенными текстами и кнопками и, при необходимости, сделать скриншоты. На данный момент мне повезло, если я получаю видео в течение нескольких секунд, прежде чем он вырезает ...

Дополнительные комментарии;

У меня был некоторый успех, когда он работал в течение более длительного времени - так что это не всегда плохо, что затрудняет диагностику. Но когда он останавливается, он останавливается. Действительно ли видеообзор активно пытается подключиться, если он потерял соединение? Есть ли способ продемонстрировать это с индикатором прогресса, возможно, так что это не похоже на то, что он ничего не делает?

ответ

1

Немного поздно, но для других с той же проблемой: попробуйте отладки, установив слушателей на ваш VideoView? т.е. onError, onCompletion и т.д.

Например:

vv.setOnErrorListener(new MediaPlayer.OnErrorListener() { 
      @Override 
      public boolean onError(MediaPlayer mp, int what, int extra) { 
       Log.d("VideoViewError", Integer.toString(what)); 
            //logs the error you're running into 

      //You can also put a switch case here to 
       determine what error it is running into exactly: 
      String errorString = "Media Player Error: "; 
      switch (what) { 
       case MediaPlayer.MEDIA_ERROR_UNKNOWN: { 
        errorString += "Unspecified media player error. "; 
       } 
       case MediaPlayer.MEDIA_ERROR_SERVER_DIED: { 
        errorString += "Media server died. "; 
       } 
      } 
      switch (extra) { 
       case MediaPlayer.MEDIA_ERROR_IO: { 
        errorString += "File or network related operation error."; 
       } 
       case MediaPlayer.MEDIA_ERROR_MALFORMED: { 
        errorString += "Bitstream is not conforming to the related coding standard or file spec."; 
       } 
       case MediaPlayer.MEDIA_ERROR_UNSUPPORTED: { 
        errorString += "Bitstream is conforming to the related coding standard or file spec, but the media framework does not support the feature."; 
       } 
       case MediaPlayer.MEDIA_ERROR_TIMED_OUT: { 
        errorString += "Media operation timed out."; 
       } 
      } 
      Log.d(TAG, errorString); 
       return true; 
      } 
     }); 

Если поток 'окончание', вы получаете onCompletion

setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
     @Override 
     public void onCompletion(MediaPlayer mp) { 
        Log.d("VideoViewError", "Media Player reached end of file"); 
     } 
     } 
     ); 

Вы можете сделать то же самое с setOnInfoListener, который позволяет вы знаете статус просмотра видео во время воспроизведения. (Коды здесь: http://developer.android.com/reference/android/media/MediaPlayer.OnInfoListener.html)

Возможно, не ответ, который вы ищете, но, надеюсь, приведет вас к правильному!

 Смежные вопросы

  • Нет связанных вопросов^_^