android - Vitamio equivalent of MEDIA_INFO_VIDEO_RENDERING_START -


using vitamio media player, not see constant when video starts rendering (as there has been normal android mediaplayer since api 17). onpreparedlisteners not detect when rendering physically starts, and, result, black screen prior video starting seemingly unavoidable.

is there way detect when video has started rendering in vitamio?

though it's bit of hack, found way works wonders:

  • create boolean, defaulted false, determines whether or not buffering has completed first time.
  • set oninfolistener on vitamio videoview.
  • look mediaplayer.media_info_buffering_end
  • if boolean created false, set true , wait, while loop, until yourvideoview.getcurrentposition() != 0. note 0 may low -- getcurrentposition return number higher 0 before has started, typically returned value no higher 1000 / (the fps of video). used 40.
  • execute desired code (remove other views make videoview visible, or add videoview layout).
  • in oncompletionlistener, set created boolean false.

    public class animationcanvas extends videoview{

    public static animationcanvas animationcanvas; private static boolean bufferedonce = false; public animationcanvas(context context, attributeset attrs){     super(context, attrs);     animationcanvas = this;     getholder().addcallback(this);     this.setoninfolistener(new mediaplayer.oninfolistener() {         @override         public boolean oninfo(mediaplayer mp, int what, int extra) {             if (!bufferedonce && == mediaplayer.media_info_buffering_end) {                 bufferedonce = true;                 while (getcurrentposition() < 40) {                     try {                         thread.sleep(2);                     } catch (interruptedexception e) {                         e.printstacktrace();                     }                 }                 mainactivity.framelayout.removeview(maincanvas.maincanvas);                 return true;             }             return false;         }     });     this.setoncompletionlistener(new mediaplayer.oncompletionlistener() {         @override         public void oncompletion(mediaplayer mp) {             bufferedonce = false;             mainactivity.framelayout.addview(maincanvas.maincanvas);             mainactivity.framelayout.removeview(animationcanvas);         }     }); } 

edit: note option create separate runnable waiting (while(vv.getcurrentposition() < 40){}) , then, in same runnable, call runonuithread() run second runnable alters / removes / adds views if needed (views can touched thread in created.) way, there no need oninfolistener -- start first runnable in onpreparedlistener.


Comments