package cn.com.basic.face.fragment;
|
|
import android.graphics.Rect;
|
import android.graphics.SurfaceTexture;
|
import android.os.Bundle;
|
import android.support.v7.widget.GridLayoutManager;
|
import android.support.v7.widget.LinearLayoutManager;
|
import android.support.v7.widget.RecyclerView;
|
import android.util.Log;
|
import android.view.Surface;
|
import android.view.SurfaceHolder;
|
import android.view.SurfaceView;
|
import android.view.View;
|
import android.widget.RadioButton;
|
import android.widget.RadioGroup;
|
|
import com.bsk.zhangbo.demoforbsk.R;
|
import cn.com.basic.face.adapter.SupervisoryAdapter;
|
import cn.com.basic.face.base.BaseFragment;
|
import cn.com.basic.face.service.CheckInMng;
|
import cn.com.basic.face.util.RtspFaceNative;
|
import cn.com.basic.face.util.WindowsUtil;
|
import cn.com.basic.face.widget.MyGLSurfaceView;
|
import com.camnter.easyrecyclerview.widget.EasyRecyclerView;
|
import com.orhanobut.logger.Logger;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
|
|
/**
|
* Created by zhangbo on 2017/2/15.
|
*/
|
|
public class SupervisoryFragment extends BaseFragment {
|
|
private RadioGroup mRadioGroup;
|
private RadioButton mRadioButton1, mRadioButton2;
|
private View mRadioLine1, mRadioLine2;
|
private SupervisoryAdapter mAdapter;
|
private List mList;
|
private EasyRecyclerView mRecyclerViewRegister, mRecyclerViewUser;
|
|
//播放
|
|
String mSourceString = "clips/testfile.mp4";
|
|
SurfaceView mSurfaceView1;
|
SurfaceView mSurfaceView2;
|
SurfaceHolder mSurfaceHolder1;
|
|
VideoSink mSelectedVideoSink;
|
|
|
SurfaceHolderVideoSink mSurfaceHolder1VideoSink;
|
|
VideoSink mNativeCodecPlayerVideoSink;
|
GLViewVideoSink mGLView1VideoSink;
|
boolean mCreated = false;
|
boolean mIsPlaying = false;
|
|
/** Load jni .so on initialization */
|
static {
|
//System.loadLibrary("rtspface");//xiuxi
|
}
|
|
|
private static SupervisoryFragment instance = new SupervisoryFragment();
|
|
public static SupervisoryFragment getInstance() {
|
return instance;
|
}
|
|
@Override
|
protected int getLayoutId() {
|
return R.layout.fragment_supervisory;
|
}
|
|
@Override
|
protected void initViews(View view, Bundle savedInstanceState) {
|
mRadioGroup = (RadioGroup) view.findViewById(R.id.fragment_supervisory_bottom_left_radio_group);
|
mRadioButton1 = (RadioButton) view.findViewById(R.id.fragment_supervisory_bottom_visitor_radio_button);
|
mRadioButton2 = (RadioButton) view.findViewById(R.id.fragment_supervisory_bottom_attendance_radio_button);
|
mRadioLine1 = view.findViewById(R.id.fragment_supervisory_bottom_visitor_background);
|
mRadioLine2 = view.findViewById(R.id.fragment_supervisory_bottom_attendance_background);
|
mRecyclerViewRegister = (EasyRecyclerView) view.findViewById(R.id.fragment_supervisory_bottom_register_list);
|
mRecyclerViewUser = (EasyRecyclerView) view.findViewById(R.id.fragment_supervisory_bottom_visitor_list);
|
mRadioButton1.setChecked(true);
|
mRecyclerViewRegister.addItemDecoration(new SpaceItemDecoration());
|
GridLayoutManager gridLayoutManager = new GridLayoutManager(getActivity(), 2);
|
gridLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
|
mRecyclerViewRegister.setLayoutManager(gridLayoutManager);
|
mAdapter = new SupervisoryAdapter(getActivity());
|
|
|
mSurfaceView2 = (SurfaceView) view.findViewById(R.id.fragment_supervisory_exit_camera);
|
mSurfaceView1 = (SurfaceView) view.findViewById(R.id.fragment_supervisory_enter_camera);
|
RtspFaceNative.init();
|
RtspFaceNative.setSurface(1, mSurfaceView1.getHolder().getSurface());
|
RtspFaceNative.setSurface(2, mSurfaceView2.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
|
if(mSurfaceView2 instanceof MyGLSurfaceView) {
|
((MyGLSurfaceView)mSurfaceView2).onResume();
|
}
|
if (mGLView1VideoSink == null) {
|
mGLView1VideoSink = new GLViewVideoSink(mSurfaceView2);
|
}
|
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/sub/av_stream");
|
mCreated = RtspFaceNative.createPlayer(2, "rtsp://admin:admin12345@192.168.1.70:554/h264/ch1/sub/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
|
protected void initListeners() {
|
mRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
|
@Override
|
public void onCheckedChanged(RadioGroup group, int checkedId) {
|
switch (checkedId) {
|
case R.id.fragment_supervisory_bottom_visitor_radio_button:
|
mRadioLine1.setVisibility(View.VISIBLE);
|
mRadioLine2.setVisibility(View.INVISIBLE);
|
mRecyclerViewRegister.setVisibility(View.VISIBLE);
|
mRecyclerViewUser.setVisibility(View.GONE);
|
break;
|
case R.id.fragment_supervisory_bottom_attendance_radio_button:
|
mRadioLine1.setVisibility(View.INVISIBLE);
|
mRadioLine2.setVisibility(View.VISIBLE);
|
mRecyclerViewRegister.setVisibility(View.GONE);
|
mRecyclerViewUser.setVisibility(View.VISIBLE);
|
break;
|
}
|
}
|
});
|
}
|
|
@Override
|
protected void initData() {
|
// switchSurface();
|
mList = new ArrayList();
|
// for (int i = 0; i < 125; i++) {
|
// FacePhotoItem item = new FacePhotoItem();
|
// //item.setType();
|
// item.setName("张三"+i);
|
// if (i % 3 == 0) {
|
// item.setStatus("来访登记");
|
// } else {
|
// item.setStatus("签离");
|
// }
|
// if (i % 5 == 0) {
|
// item.setWarning("");
|
// } else {
|
// item.setWarning("警告");
|
// }
|
// mList.add(item);
|
// }
|
CheckInMng.getInstance().findVisitorList();
|
mAdapter.setList(mList);
|
mRecyclerViewRegister.setAdapter(mAdapter);
|
}
|
|
private class SpaceItemDecoration extends RecyclerView.ItemDecoration {
|
@Override
|
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
|
super.getItemOffsets(outRect, view, parent, state);
|
// outRect.bottom = WindowsUtil.dip2px(getActivity(), 7);
|
outRect.right = WindowsUtil.dip2px(getActivity(), 15);
|
|
if (parent.getChildLayoutPosition(view) == 0 || parent.getChildLayoutPosition(view) == 1) {
|
outRect.left = WindowsUtil.dip2px(getActivity(), 14);
|
}
|
if (parent.getChildLayoutPosition(view) % 2 == 0) {
|
outRect.bottom = WindowsUtil.dip2px(getActivity(), 7);
|
}
|
}
|
}
|
|
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;
|
if(mSurfaceView2 instanceof MyGLSurfaceView) {
|
((MyGLSurfaceView)mSurfaceView2).onPause();
|
}
|
//setPlayingStreamingMediaPlayer(false);//xiuxi
|
super.onPause();
|
}
|
|
@Override
|
public void onResume() {
|
super.onResume();
|
if(mSurfaceView2 instanceof MyGLSurfaceView) {
|
((MyGLSurfaceView)mSurfaceView2).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 SurfaceView SurfaceView;
|
private final SurfaceHolder mSurfaceHolder;
|
|
GLViewVideoSink(SurfaceView myGLSurfaceView) {
|
SurfaceView = myGLSurfaceView;
|
mSurfaceHolder = SurfaceView.getHolder();
|
}
|
|
@Override
|
void setFixedSize(int width, int height) {
|
mSurfaceHolder.setFixedSize(width, height);
|
}
|
|
@Override
|
void useAsSinkForNative() {
|
if(SurfaceView instanceof MyGLSurfaceView) {
|
SurfaceTexture st = ((MyGLSurfaceView)SurfaceView).getSurfaceTexture();
|
Surface s = new Surface(st);
|
RtspFaceNative.setSurface(2, s);
|
s.release();
|
} else {
|
RtspFaceNative.setSurface(2, SurfaceView.getHolder().getSurface());
|
}
|
|
}
|
|
}
|
}
|