From 117e18fedf48e401043e9538732d0d9e6f7ef080 Mon Sep 17 00:00:00 2001 From: xuxiuxi <xuxiuxi@454eff88-639b-444f-9e54-f578c98de674> Date: 星期三, 22 三月 2017 16:25:46 +0800 Subject: [PATCH] --- VisitFace/DemoForBsk/app/src/main/java/com/bsk/zhangbo/demoforbsk/ui/fragment/OneFragment.java | 346 +++++++++++++++++++++++++++++++++++--------------------- 1 files changed, 215 insertions(+), 131 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..39714d2 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,7 +2,9 @@ import android.content.res.AssetManager; import android.graphics.Rect; +import android.graphics.SurfaceTexture; import android.os.Bundle; +import android.support.v4.app.Fragment; import android.support.v4.view.ViewPager; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.LinearLayoutManager; @@ -15,16 +17,24 @@ import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.Toast; +import android.widget.VideoView; import com.bsk.zhangbo.demoforbsk.R; 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.RtspFaceNative; 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; + /** @@ -40,37 +50,27 @@ private List mList; private EasyRecyclerView mRecyclerViewRegister, mRecyclerViewUser; - //鎾斁 + String mSourceString = "clips/testfile.mp4"; -// SurfaceHolderVideoSink mSurfaceHolder1VideoSink; -// VideoSink mSelectedVideoSink; -// VideoSink mNativeCodecPlayerVideoSink; -// SurfaceView mSurfaceView1; -// SurfaceHolder mSurfaceHolder1; -// boolean mCreated = false; -// boolean mIsPlaying = false; -// String mSourceString = "clips/testfile.mp4"; + SurfaceView mSurfaceView1; + MyGLSurfaceView mGLView1; + SurfaceHolder mSurfaceHolder1; - /** - * 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(); + VideoSink mSelectedVideoSink; + + + SurfaceHolderVideoSink mSurfaceHolder1VideoSink; + + VideoSink mNativeCodecPlayerVideoSink; + GLViewVideoSink mGLView1VideoSink; + boolean mCreated = false; + boolean mIsPlaying = false; /** Load jni .so on initialization */ static { - System.loadLibrary("native-codec-jni"); + System.loadLibrary("rtspface");//xiuxi } @@ -100,30 +100,90 @@ 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); + RtspFaceNative.init(); + try { + Thread.sleep(3000); + }catch (Exception e) { + e.printStackTrace(); + } + RtspFaceNative.setSurface(1, mSurfaceView1.getHolder().getSurface()); + RtspFaceNative.setSurface(2, mGLView1.getHolder().getSurface()); + + 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(); + mSurfaceHolder1VideoSink.useAsSinkForNative(); + //mSelectedVideoSink.useAsSinkForNative(); + //mSurfaceHolder1VideoSink.useAsSinkForNative(); + mNativeCodecPlayerVideoSink = mSelectedVideoSink; + } + if (mSourceString != null) { + //mCreated = createStreamingMediaPlayer(getResources().getAssets(), + // mSourceString); + mCreated = RtspFaceNative.createPlayer(1, "rtsp://admin:admin12345@192.168.1.70:554/h264/ch1/main/av_stream"); + mCreated = RtspFaceNative.createPlayer(2, "rtsp://admin:admin12345@192.168.1.70:554/h264/ch1/main/av_stream"); + ////mCreated = createPlayer(2, "rtsp://admin:admin12345@192.168.1.70:554/h264/ch1/main/av_stream"); + } + } + if (mCreated) { + mIsPlaying = !mIsPlaying; + //setPlayingStreamingMediaPlayer(mIsPlaying); + } + + + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + }); + thread.start();//xiuxi } @Override @@ -164,17 +224,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 +239,116 @@ 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"); + RtspFaceNative.shutdown(1); + mCreated = false; + mSelectedVideoSink.useAsSinkForNative(); + mNativeCodecPlayerVideoSink = mSelectedVideoSink; + if (mSourceString != null) { + Log.i("@@@", "recreating player"); + //mCreated = createStreamingMediaPlayer(getResources().getAssets(), mSourceString); + mIsPlaying = false; + mCreated = RtspFaceNative.createPlayer(1, "rtsp://admin:admin12345@192.168.1.70:554/h264/ch1/main/av_stream"); + mCreated = RtspFaceNative.createPlayer(2, "rtsp://admin:admin12345@192.168.1.70:554/h264/ch1/main/av_stream"); + ////mCreated = createPlayer(2, "rtsp://admin:admin12345@192.168.1.70:554/h264/ch1/main/av_stream"); + } + } + } + + /** + * 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() { + RtspFaceNative.shutdown(1); + 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); + RtspFaceNative.setSurface(1, s); + + + /*SurfaceTexture st = mSurfaceHolder.getSurfaceTexture(); + Surface s = new Surface(st); + RtspFaceNative.setSurface(2, s); + s.release();*/ + } + + } + + + 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); + RtspFaceNative.setSurface(2, s); + s.release(); + } + + } } -- Gitblit v1.8.0