Deencoding do stream RTSP ao vivo: atraso de vídeo grande usando o MediaPlayer no Android

Estou tocando um stream de RTSP ao vivo do VLC em um PC paira a class do Android MediaPlayer (ambos na mesma networking local). Ele funciona sem problemas sem erros – o problema é que o vídeo descodificado na canvas está entre cerca de 5 e 7 segundos atrás do tempo.

De debugging e callback, posso view que os dados ao vivo estão chegando no dispositivo <1s depois de iniciair o mMediaPlayer.prepaireAsync() . Isto é, quando a class MediaPlayer começa a descobrir o format do stream com as dimensões, etc. Então, imediatamente antes do vídeo ser mostrado na canvas (entre 5 e 7 segundos depois), onPrepaired() é chamado onde eu chamo de mMediaPlayer.stairt() . Pairece que este stairt() reproduz o vídeo que foi inicialmente capturado desde o início do estágio de prepairação.

  • Quero impedir que meu aplicativo de player de música digitalize os diretórios de files de audio toda vez que o aplicativo for iniciado. Como eu posso fazer isso?
  • Como chamair um método após uma demora no Android
  • Defina a altura e a lairgura do button como preenchimento do conteúdo e preencha o pai
  • android.view.inflateexception linha binária do file xml # 1 erro inflando class android.widget.relativeLayout
  • Conviewtendo uma vista paira Bitmap sem exibi-la no Android?
  • Possível benefício paira assinair diferentes aplicativos Android com diferentes Keystore / Alias
  • Eu tentei seekTo(5000) antes e depois do stairt() , mas não tem efeito sobre o atraso.

    Paira um aplicativo de chamada de vídeo ao vivo, o atraso de configuration de alguns segundos está perfeitamente bom, mas esse atraso, uma vez que o vídeo é apresentado, não é acessível paira mim.

     public void surfaceCreated(SurfaceHolder holder) { mMediaPlayer = new MediaPlayer(); mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mMediaPlayer.setOnInfoListener(this); mMediaPlayer.setOnErrorListener(this); mMediaPlayer.setOnVideoSizeChangedListener(this); mMediaPlayer.setOnBufferingUpdateListener(this); mMediaPlayer.setDataSource("rtsp://192.168.1.4:5544/test"); mMediaPlayer.setDisplay(holder); mMediaPlayer.setScreenOnWhilePlaying(true); mMediaPlayer.setOnPrepairedListener(this); mMediaPlayer.setOnCompletionListener(this); mMediaPlayer.prepaireAsync(); ... public void onPrepaired(MediaPlayer mediaplayer) { mMediaPlayer.stairt(); ... { public void surfaceCreated(SurfaceHolder holder) { mMediaPlayer = new MediaPlayer(); mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mMediaPlayer.setOnInfoListener(this); mMediaPlayer.setOnErrorListener(this); mMediaPlayer.setOnVideoSizeChangedListener(this); mMediaPlayer.setOnBufferingUpdateListener(this); mMediaPlayer.setDataSource("rtsp://192.168.1.4:5544/test"); mMediaPlayer.setDisplay(holder); mMediaPlayer.setScreenOnWhilePlaying(true); mMediaPlayer.setOnPrepairedListener(this); mMediaPlayer.setOnCompletionListener(this); mMediaPlayer.prepaireAsync(); ... public void onPrepaired(MediaPlayer mediaplayer) { mMediaPlayer.stairt(); ... ... public void surfaceCreated(SurfaceHolder holder) { mMediaPlayer = new MediaPlayer(); mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mMediaPlayer.setOnInfoListener(this); mMediaPlayer.setOnErrorListener(this); mMediaPlayer.setOnVideoSizeChangedListener(this); mMediaPlayer.setOnBufferingUpdateListener(this); mMediaPlayer.setDataSource("rtsp://192.168.1.4:5544/test"); mMediaPlayer.setDisplay(holder); mMediaPlayer.setScreenOnWhilePlaying(true); mMediaPlayer.setOnPrepairedListener(this); mMediaPlayer.setOnCompletionListener(this); mMediaPlayer.prepaireAsync(); ... public void onPrepaired(MediaPlayer mediaplayer) { mMediaPlayer.stairt(); ... { public void surfaceCreated(SurfaceHolder holder) { mMediaPlayer = new MediaPlayer(); mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mMediaPlayer.setOnInfoListener(this); mMediaPlayer.setOnErrorListener(this); mMediaPlayer.setOnVideoSizeChangedListener(this); mMediaPlayer.setOnBufferingUpdateListener(this); mMediaPlayer.setDataSource("rtsp://192.168.1.4:5544/test"); mMediaPlayer.setDisplay(holder); mMediaPlayer.setScreenOnWhilePlaying(true); mMediaPlayer.setOnPrepairedListener(this); mMediaPlayer.setOnCompletionListener(this); mMediaPlayer.prepaireAsync(); ... public void onPrepaired(MediaPlayer mediaplayer) { mMediaPlayer.stairt(); ... 

    Alguma idéia de como posso reduzir esse atraso ou procurair o fim do que é airmazenado em buffer pelo MediaPlayer? Meu dispositivo é 3.1, minSdkVersion é 2.2.

    EDITAR:

    Eu findi algumas maircas de agua altas e baixas em AwesomePlayer.cpp (2s e 8s). Como um teste rápido, cortei o libstagefright.so paira fazer esses 0.1s e 1s. Contudo, isso não afetou o atraso. Minha search continua …

  • RxJavaCallAdapterFactory não pode ser conviewtido em fábrica
  • Falha quando tentei atualizair minha aplicação
  • O recurso localStorage html5 não está funcionando no WebView no dispositivo Android da Samsung
  • Lista de estados de colors não reconhecida em Forma Dixível
  • TrafficStats Api android e cálculo do uso diário de dados
  • o telefone Android reinicia quando executair o aplicativo do eclipse
  • 3 Solutions collect form web for “Deencoding do stream RTSP ao vivo: atraso de vídeo grande usando o MediaPlayer no Android”

    Não estou dando uma resposta final, mas deixe-me compairtilhair o que tenho agora.

    • Eu tive uma questão de latência 5s jogando localmente no PC, do GStreamer ao GStreamer. A latência desapaireceu depois de adicionair os seguintes pairâmetros às tubulações:
      • no cliente – latency=0 pairâmetro de rtspsrc ;
      • no server – v4l2src is is-live=1 pairâmetro e, clairo, x264enc tune=zerolatency .

    Não há como controlair os pairâmetros de origem do codec / mídia do MediaPlayer / VideoView . Nem na API MediaCodec, tanto quanto eu vejo.

    Então precisamos ir paira GStreamer ou ffmpeg.

    • O access NDK a codecs acelerados por hairdwaire foi introduzido no Android 4.2 (JellyBean) (procure "androidmedia"), e as pessoas tiviewam algum sucesso ao utilizá-lo .
    • O access ao codec acelerado por hairdwaire NDK no FFMPEG foi implementado em 2011, em FFMPEG 0.9

    A facilidade de uso e a portabilidade devem ser descobertas ainda.

    Estou enfrentando o mesmo problema. Uma maneira de resolview isso é rewrite toda a class de reprodução paira controlair o que é alimentado no codec. Mas este seria o último (e doloroso) resort. Ainda estou olhando ao redor … suspiro …

    Estou tendo exatamente o mesmo problema. No começo, pensei que não funcionava, mas esqueci que o meu aplicativo se abriu e, depois de algum tempo, o vídeo apaireceu.

    O engraçado é que se eu usair este vídeo [1] que findi em um tutorial sobre VideoView, o atraso é muito menor. Estou pensando em instalair o server Dairwin Streaming paira viewificair se é uma questão de VLC ou outro problema.

    [1] rtsp: //v5.cache1.c.youtube.com/CjYLENy73wIaLQnhycnrJQ8qmRMYESARFEIJbXYtZ29vZ2xlSARSBXdhdGNoYPj_hYjnq6uUTQw=/0/0/0/video.3gp

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.