2016-01-06 4 views
3

Я работаю над приложением Android, которое показывает потоковое видео в реальном времени через RTSP. Предполагая, что у меня есть хорошо функционирующий сервер RTSP, который проходит H264 пакеты, а также для просмотра потока следует подключить к rtsp://1.2.3.4:5555/streamvlc-android-sdk - не может просматривать видео в реальном времени RTSP

Так что я пытался использовать родной MediaPlayer \ VideoView, но не повезло (видео не застрял после того, как 2 -3 секунд воспроизведения, так что я загружен VLC-андроид-SDK mrmaffen (в можно найти here) и использовали следующий код:.

  ArrayList<String> options = new ArrayList<String>(); 
      options.add("--no-drop-late-frames"); 
      options.add("--no-skip-frames"); 
      options.add("-vvv"); 
      videoVlc = new LibVLC(options); 

      newVideoMediaPlayer = new org.videolan.libvlc.MediaPlayer(videoVlc); 
      final IVLCVout vOut = newVideoMediaPlayer.getVLCVout(); 
      vOut.addCallback(this); 
      vOut.setVideoView(videoView); //videoView is a pre-defined view which is part of the layout 
      vOut.attachViews(); 
      newVideoMediaPlayer.setEventListener(this); 

      Media videoMedia = new Media (videoVlc, Uri.parse(mVideoPath)); 
      newVideoMediaPlayer.setMedia(videoMedia); 
      newVideoMediaPlayer.play(); 

проблема заключается в том, что я вижу пустой экран

Хранить в помните, что когда я устанавливаю RTSP-ссылку только с аудиопотоком, она отлично работает.

Является ли кто-то знакомым с этим sdk и имеет представление об этой проблеме? Заранее спасибо

+0

есть вы решили эту проблему с помощью [VLC-андроид-SDK] (https://github.com/ mrmaffen/VLC-андроид-SDK)? –

ответ

1

Я играю RTSP потокового с помощью следующего кода

try { 
     Uri rtspUri=Uri.parse("rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov"); 


     final MediaWrapper mw = new MediaWrapper(rtspUri); 
     mw.removeFlags(MediaWrapper.MEDIA_FORCE_AUDIO); 
     mw.addFlags(MediaWrapper.MEDIA_VIDEO); 

     MediaWrapperListPlayer.getInstance().getMediaList().add(mw); 

     VLCInstance.getMainMediaPlayer().setEventListener(this); 
    VLCInstance.get().setOnHardwareAccelerationError(this); 


    final IVLCVout vlcVout = VLCInstance.getMainMediaPlayer().getVLCVout(); 
    vlcVout.addCallback(this); 
    vlcVout.setVideoView(mSurfaceView); 
    vlcVout.attachViews(); 
    final SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this); 
    final String aout = VLCOptions.getAout(pref); 
    VLCInstance.getMainMediaPlayer().setAudioOutput(aout); 
    MediaWrapperListPlayer.getInstance().playIndex(this, 0); 

    } catch (Exception e) { 
     Log.e(TAG, e.toString()); 
    } 

Когда вы играете событие, необходимо включить видео дорожки.

private void onPlaying() { 
    stopLoadingAnimation(); 
    VLCInstance.getMainMediaPlayer().setVideoTrackEnabled(true); 
} 

Это может быть полезно для вас

0

Попробуйте добавить эту опцию:

--rtsp-tcp 
+0

Спасибо, это работает! Даже VLC для Android из Google Play не может воспроизводить некоторые потоки (так как у нее нет этой опции). В коде: options.add ("- rtsp-tcp"); новый LibVLC (контекст, опции); –

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

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