From fe0d3cbc02c0db8e7b18b06e3d027c5502d7fe59 Mon Sep 17 00:00:00 2001 From: xuxiuxi <xuxiuxi@454eff88-639b-444f-9e54-f578c98de674> Date: 星期一, 20 三月 2017 15:23:13 +0800 Subject: [PATCH] --- VisitFace/DemoForBsk/app/src/main/java/com/bsk/zhangbo/demoforbsk/ui/fragment/OneFragment.java | 315 ++++++++++++++++++++++++++++++++++------------------ 1 files changed, 207 insertions(+), 108 deletions(-) diff --git a/VisitFace/DemoForBsk/app/src/main/java/com/bsk/zhangbo/demoforbsk/ui/fragment/OneFragment.java b/VisitFace/DemoForBsk/app/src/main/java/com/bsk/zhangbo/demoforbsk/ui/fragment/OneFragment.java index 8af1b20..7f22d73 100644 --- a/VisitFace/DemoForBsk/app/src/main/java/com/bsk/zhangbo/demoforbsk/ui/fragment/OneFragment.java +++ b/VisitFace/DemoForBsk/app/src/main/java/com/bsk/zhangbo/demoforbsk/ui/fragment/OneFragment.java @@ -2,6 +2,7 @@ import android.content.res.AssetManager; import android.graphics.Rect; +import android.graphics.SurfaceTexture; import android.os.Bundle; import android.support.v4.view.ViewPager; import android.support.v7.widget.GridLayoutManager; @@ -20,10 +21,15 @@ import com.bsk.zhangbo.demoforbsk.adapter.MyFragmentPagerAdapter; import com.bsk.zhangbo.demoforbsk.adapter.OneBottomRecylerViewAdapter; import com.bsk.zhangbo.demoforbsk.base.BaseFragment; +import com.bsk.zhangbo.demoforbsk.ui.activity.TestARGB8888Activity; import com.bsk.zhangbo.demoforbsk.util.WindowsUtil; +import com.bsk.zhangbo.demoforbsk.widget.MyGLSurfaceView; import com.camnter.easyrecyclerview.widget.EasyRecyclerView; +import com.orhanobut.logger.Logger; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; import java.util.List; @@ -43,6 +49,20 @@ //鎾斁 + String mSourceString = "clips/testfile.mp4"; + + SurfaceView mSurfaceView1; + MyGLSurfaceView mGLView1; + SurfaceHolder mSurfaceHolder1; + + VideoSink mSelectedVideoSink; + VideoSink mNativeCodecPlayerVideoSink; + + SurfaceHolderVideoSink mSurfaceHolder1VideoSink; + + GLViewVideoSink mGLView1VideoSink; + boolean mCreated = false; + boolean mIsPlaying = false; // SurfaceHolderVideoSink mSurfaceHolder1VideoSink; // VideoSink mSelectedVideoSink; @@ -70,7 +90,7 @@ /** Load jni .so on initialization */ static { - System.loadLibrary("native-codec-jni"); + //System.loadLibrary("native-codec-jni");//xiuxi } @@ -100,30 +120,75 @@ mAdapter = new OneBottomRecylerViewAdapter(getActivity()); - // set up the Surface 1 video sink -// mSurfaceView1 = (SurfaceView) view.findViewById(R.id.surfaceview1); -// mSurfaceHolder1 = mSurfaceView1.getHolder(); -// -// mSurfaceHolder1.addCallback(new SurfaceHolder.Callback() { -// -// @Override -// public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { -// Log.v("", "surfaceChanged format=" + format + ", width=" + width + ", height=" -// + height); -// } -// -// @Override -// public void surfaceCreated(SurfaceHolder holder) { -// Log.v("", "surfaceCreated"); -// setSurface(holder.getSurface()); -// } -// -// @Override -// public void surfaceDestroyed(SurfaceHolder holder) { -// Log.v("", "surfaceDestroyed"); -// } -// -// }); + mGLView1 = (MyGLSurfaceView) view.findViewById(R.id.surfaceview2); + mSurfaceView1 = (SurfaceView) view.findViewById(R.id.surfaceview1); + mSurfaceHolder1 = mSurfaceView1.getHolder(); + + mSurfaceHolder1.addCallback(new SurfaceHolder.Callback() { + + @Override + public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { + Logger.e( "surfaceChanged format=" + format + ", width=" + width + ", height=" + + height); + } + + @Override + public void surfaceCreated(SurfaceHolder holder) { + Logger.e( "surfaceCreated"); + } + + @Override + public void surfaceDestroyed(SurfaceHolder holder) { + Logger.e( "surfaceDestroyed"); + } + + }); + //surfaceview +// if (mSurfaceHolder1VideoSink == null) { +// mSurfaceHolder1VideoSink = new SurfaceHolderVideoSink(mSurfaceHolder1); +// } +// mSelectedVideoSink = mSurfaceHolder1VideoSink; + + + //openGL + mGLView1.onResume(); + if (mGLView1VideoSink == null) { + mGLView1VideoSink = new GLViewVideoSink(mGLView1); + } + mSelectedVideoSink = mGLView1VideoSink; + + + //鎾斁寤惰繜锛堝垵濮嬪寲杈冩參锛屽彲鑳藉鑷存棤娉曟甯告挱鏀撅級 + Thread thread = new Thread(new Runnable() { + @Override + public void run() { + try { + Thread.sleep(5000); + if (!mCreated) { + if (mNativeCodecPlayerVideoSink == null) { + if (mSelectedVideoSink == null) { + return; + } + mSelectedVideoSink.useAsSinkForNative(); + mNativeCodecPlayerVideoSink = mSelectedVideoSink; + } + if (mSourceString != null) { + mCreated = createStreamingMediaPlayer(getResources().getAssets(), + mSourceString); + } + } + if (mCreated) { + mIsPlaying = !mIsPlaying; + setPlayingStreamingMediaPlayer(mIsPlaying); + } + + + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + }); + //thread.start();//xiuxi } @Override @@ -164,17 +229,6 @@ mAdapter.setList(mList); mRecyclerViewRegister.setAdapter(mAdapter); - -// mSurfaceHolder1VideoSink = new SurfaceHolderVideoSink(mSurfaceHolder1); -// mSelectedVideoSink = mSurfaceHolder1VideoSink; -// mSelectedVideoSink.useAsSinkForNative(); -// mNativeCodecPlayerVideoSink = mSelectedVideoSink; -// -// mCreated = createStreamingMediaPlayer(getResources().getAssets(), -// mSourceString); -// mIsPlaying = !mIsPlaying; -// setPlayingStreamingMediaPlayer(mIsPlaying); - } private class SpaceItemDecoration extends RecyclerView.ItemDecoration { @@ -190,81 +244,126 @@ if (parent.getChildLayoutPosition(view) % 2 == 0) { outRect.bottom = WindowsUtil.dip2px(getActivity(), 7); } -// if (parent.getChildLayoutPosition(view) % 2 == 1) { -// outRect.right = WindowsUtil.dip2px(getActivity(), 4); -// }else { -// -// } } } -// void switchSurface() { -// if (mCreated && mNativeCodecPlayerVideoSink != mSelectedVideoSink) { -// // shutdown and recreate on other surface -// Log.i("@@@", "shutting down player"); -// shutdown(); -// mCreated = false; -// mSelectedVideoSink.useAsSinkForNative(); -// mNativeCodecPlayerVideoSink = mSelectedVideoSink; -// if (mSourceString != null) { -// Log.i("@@@", "recreating player"); -// mCreated = createStreamingMediaPlayer(getResources().getAssets(), mSourceString); -// mIsPlaying = false; -// } -// } -// } -// /** -// * Called when the activity is about to be paused. -// */ -// @Override -// public void onPause() { -// mIsPlaying = false; -// setPlayingStreamingMediaPlayer(false); -// super.onPause(); -// } -// -// /** -// * Called when the activity is about to be destroyed. -// */ -// @Override -// public void onDestroy() { -// shutdown(); -// mCreated = false; -// super.onDestroy(); -// } -// -// -// // VideoSink abstracts out the difference between Surface and SurfaceTexture -// // aka SurfaceHolder and GLSurfaceView -// static abstract class VideoSink { -// -// abstract void setFixedSize(int width, int height); -// -// abstract void useAsSinkForNative(); -// -// } -// -// static class SurfaceHolderVideoSink extends VideoSink { -// -// private final SurfaceHolder mSurfaceHolder; -// -// SurfaceHolderVideoSink(SurfaceHolder surfaceHolder) { -// mSurfaceHolder = surfaceHolder; -// } -// -// @Override -// void setFixedSize(int width, int height) { -// mSurfaceHolder.setFixedSize(width, height); -// } -// -// @Override -// void useAsSinkForNative() { -// Surface s = mSurfaceHolder.getSurface(); -// Log.i("@@@", "setting surface " + s); -// setSurface(s); -// } -// -// } + void switchSurface() { + if (mCreated && mNativeCodecPlayerVideoSink != mSelectedVideoSink) { + // shutdown and recreate on other surface + Log.i("@@@", "shutting down player"); + shutdown(); + mCreated = false; + mSelectedVideoSink.useAsSinkForNative(); + mNativeCodecPlayerVideoSink = mSelectedVideoSink; + if (mSourceString != null) { + Log.i("@@@", "recreating player"); + mCreated = createStreamingMediaPlayer(getResources().getAssets(), mSourceString); + mIsPlaying = false; + } + } + } + + /** + * Called when the activity is about to be paused. + */ + @Override + public void onPause() { + mIsPlaying = false; + mGLView1.onPause(); + //setPlayingStreamingMediaPlayer(false);//xiuxi + super.onPause(); + } + + @Override + public void onResume() { + super.onResume(); + mGLView1.onResume(); + } + + /** + * Called when the activity is about to be destroyed. + */ + @Override + public void onDestroy() { + shutdown(); + mCreated = false; + super.onDestroy(); + } + + /** + * Native methods, implemented in jni folder + */ +// public static native void createEngine(); + + public static native boolean createStreamingMediaPlayer(AssetManager assetMgr, String filename); + + public static native void setPlayingStreamingMediaPlayer(boolean isPlaying); + + public static native void shutdown(); + + public static native void setSurface(Surface surface); + + public static native void rewindStreamingMediaPlayer(); + + /** Load jni .so on initialization */ + static { + //System.loadLibrary("native-codec-jni");//xiuxi + } + + // VideoSink abstracts out the difference between Surface and SurfaceTexture + // aka SurfaceHolder and GLSurfaceView + static abstract class VideoSink { + + abstract void setFixedSize(int width, int height); + + abstract void useAsSinkForNative(); + + } + + static class SurfaceHolderVideoSink extends VideoSink { + + private final SurfaceHolder mSurfaceHolder; + + SurfaceHolderVideoSink(SurfaceHolder surfaceHolder) { + mSurfaceHolder = surfaceHolder; + } + + @Override + void setFixedSize(int width, int height) { + mSurfaceHolder.setFixedSize(width, height); + } + + @Override + void useAsSinkForNative() { + Surface s = mSurfaceHolder.getSurface(); + Log.i("@@@", "setting surface " + s); + setSurface(s); + } + + } + + + static class GLViewVideoSink extends VideoSink { + + private final MyGLSurfaceView mMyGLSurfaceView; + + GLViewVideoSink(MyGLSurfaceView myGLSurfaceView) { + mMyGLSurfaceView = myGLSurfaceView; + } + + @Override + void setFixedSize(int width, int height) { + } + + @Override + void useAsSinkForNative() { + SurfaceTexture st = mMyGLSurfaceView.getSurfaceTexture(); + Surface s = new Surface(st); + setSurface(s); + s.release(); + } + + } } -- Gitblit v1.8.0