欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

GB28181设备端的后台采集的实现

程序员文章站 2022-07-06 08:20:07
...

     我们提供了GB28181设备端的sdk和demo,是需要开发人员做一些业务界面的二次开发的。但是其实很多用户提出需要在android手机或者设备在屏幕熄灭(后台运行)的情况下继续采集视音频数据,能够不影响GB28181平台上视频的预览等各项业务的开展,特别是特种行业油田的,车载,警务执法仪,是要能完全自适应的无值守使用的。要求横竖屏切换,前后置摄像头切换,前后台运行都能够正常使用。。

     众所周知,android里面预览摄像头有两种,一种是使用surfaceview,一种是TextureView。我们demo里采用的是surfaceview,代码如下:

   

private SurfaceView surfaceView;

    @Override
    public void surfaceCreated(SurfaceHolder surfaceHolder) {
        startCapture();
        Log.i(TAG, "Main surfaceCreated");
    }

    @Override
    public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
        Log.i(TAG, "Main surfaceChanged. width: " + i1);
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
        Log.i(TAG, "Main surfaceDestroyed");
        stopCapture();
    }

startCapture函数里把surfaceView.getHolder()与camera关联,代码如下:

  if (ret == 0) {
           boolean isStart = gbtdevice.start(cameraId, surfaceView.getHolder());
            if(isStart == false)
            {
                showToast("该设备的camera不支持该分辨率!");
                gbtdevice.close();
                gbtdevice = null;
                return;
            }
        }

这样实现很简单,但是surfaceview里面系统封装了自带的纹理,不要说在后台运行,就是放大缩小,移动都不行。

       那么我们采用TextureView实现摄像头的预览,直接把摄像机yuv数据输入的纹理即可。代码如下:

private TextureView   texview;
texview.setSurfaceTextureListener(new SYSurfaceTextureListener());
private final class SYSurfaceTextureListener implements TextureView.SurfaceTextureListener{

		@Override
		public void onSurfaceTextureAvailable(SurfaceTexture surface,
											  int width, int height) {
			SYGbtDeviceApp.getInstance().mSurfaceTexture = surface;
		}

		@Override
		public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
			//关闭、释放Camera资源
			SYGbtDeviceApp.getInstance().mSurfaceTexture = new SurfaceTexture(0);
			return true;
		}

		@Override
		public void onSurfaceTextureSizeChanged(SurfaceTexture surface,
												int width, int height) {
		}

		@Override
		public void onSurfaceTextureUpdated(SurfaceTexture surface) {
			// TODO Auto-generated method stub

		}
	}

因为TextureView里的纹理是可以获取*使用的,所以TextureView其实可以看成一个普通的view操作,这样即使手机熄屏,在后台,都可以进行GB28181的呼叫预览,对讲及录像了.。

     外网4G移动环境下的手机后,安装app后手机切换横屏,点击注册后,注册界面如下:

GB28181设备端的后台采集的实现

通过GB28181平台进行呼叫预览,可以显示出清晰的画面,如下:

GB28181设备端的后台采集的实现

app是免费下载使用的(app下载地址

 

更多信息

e-mail: aaa@qq.com

tel: 13971177602

web:www.founu.com