android - how to play video using custom GLSurfaceView? -
in application want play 3dvideo on target image, have started camera in c++ , able set 3d image on target image using custom view, requirement play 3dvideo on target image in place of 3d image, have tried play video using custom glsurfaceview. below code onsurfacecreated method not called.
public class glpreview extends glsurfaceview implements onbufferingupdatelistener, oncompletionlistener, onpreparedlistener, onvideosizechangedlistener, surfaceholder.callback, glsurfaceview.renderer{ private static final string tag = "mediaplayerdemo"; private int mvideowidth; private int mvideoheight; private mediaplayer mmediaplayer; private glsurfaceview mpreview; private surfaceholder holder; private string path; private bundle extras; private static final string media = "media"; private static final int local_video = 4; private static final int stream_video = 5; private boolean misvideosizeknown = false; private boolean misvideoreadytobeplayed = false; context context2; public glpreview(context context, attributeset attrs) { super(context, attrs); // this.setzordermediaoverlay(true); log.d(tag, "glpreview: onpause"); this.context2 = context; mpreview = (glsurfaceview) findviewbyid(r.id.surface); // holder = mpreview.getholder(); setbackgroundresource(r.drawable.vuforiasizzlereel); } public void playvideo() { docleanup(); try { // create new media player , set listeners mmediaplayer = new mediaplayer(); mmediaplayer.setdatasource(path); mmediaplayer.setdisplay(holder); mmediaplayer.prepare(); mmediaplayer.setonbufferingupdatelistener(this); mmediaplayer.setoncompletionlistener(this); mmediaplayer.setonpreparedlistener(this); mmediaplayer.setonvideosizechangedlistener(this); mmediaplayer.setaudiostreamtype(audiomanager.stream_music); } catch (exception e) { log.e(tag, "error: " + e.getmessage(), e); } } public void onpause() { super.onpause(); log.d(tag, "glpreview: onpause"); } public void onresume() { // this.setzordermediaoverlay(true); super.onresume(); log.d(tag, "glpreview: onresume"); } public void surfacecreated(surfaceholder holder) { log.d(tag, "glpreview: surfacecreated"); super.surfacecreated(holder); } public void surfacechanged(surfaceholder holder, int format, int w, int h) { log.d(tag, string.format( "glpreview: surfacechanged, format=%d, w=%d, h=%d", format, w, h)); super.surfacechanged(holder, format, w, h); } public void surfacedestroyed(surfaceholder holder) { log.d(tag, "glpreview: surfacedestroyed"); super.surfacedestroyed(holder); } protected void onattachedtowindow() { log.d(tag, "glpreview: onattachedtowindow"); super.onattachedtowindow(); } protected void ondetachedfromwindow() { log.d(tag, "glpreview: ondetachedfromwindow"); super.ondetachedfromwindow(); } protected void onwindowvisibilitychanged(int vis) { string newvisibility; switch (vis) { case view.gone: newvisibility = "gone"; break; case view.invisible: newvisibility = "invisible"; break; case view.visible: newvisibility = "visible"; break; default: newvisibility = string.format("unknown constant %d", vis); } log.d(tag, string.format("glpreview: onwindowvisibilitychanged -> %s", newvisibility)); super.onwindowvisibilitychanged(vis); } private void docleanup() { mvideowidth = 0; mvideoheight = 0; misvideoreadytobeplayed = false; misvideosizeknown = false; } public void onvideosizechanged(mediaplayer mp, int width, int height) { log.v(tag, "onvideosizechanged called"); if (width == 0 || height == 0) { log.e(tag, "invalid video width(" + width + ") or height(" + height + ")"); return; } misvideosizeknown = true; mvideowidth = width; mvideoheight = height; if (misvideoreadytobeplayed && misvideosizeknown) { startvideoplayback(); } } public void onprepared(mediaplayer mediaplayer) { log.d(tag, "onprepared called"); misvideoreadytobeplayed = true; if (misvideoreadytobeplayed && misvideosizeknown) { startvideoplayback(); } } @override public void oncompletion(mediaplayer mp) { // todo auto-generated method stub } @override public void onbufferingupdate(mediaplayer mp, int percent) { // todo auto-generated method stub } private void startvideoplayback() { log.v(tag, "startvideoplayback"); // holder.setfixedsize(mvideowidth, mvideoheight); mmediaplayer.start(); } @override public void ondrawframe(gl10 gl) { // todo auto-generated method stub } @override public void onsurfacechanged(gl10 gl, int width, int height) { // todo auto-generated method stub } @override public void onsurfacecreated(gl10 gl, eglconfig config) { // todo auto-generated method stub log.d(tag, "glpreview : onsurfacecreated"); playvideo(); } } call custom glsurfaceview :
glpreview productview = new glpreview(cloudreco.this, null); i don't know missing. in advance.
in case should not implement surfaceholder.callback glpreview because glsurfaceview sets callback surfaceholder , calls renderer.surfacecreated . should implement glsurfaceview.renderer methods - ondrawframe, onsurfacecreated(gl10 gl, eglconfig config) . refer glsurfaceview source code. glsurfaceview implements surfacecreated(surfaceholder holder); , calls renderer
Comments
Post a Comment