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 --getcurrentpositionreturn 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
Post a Comment