当前位置: 首页 > news >正文

求推荐专业的网站建设开发wordpress七牛视频播放

求推荐专业的网站建设开发,wordpress七牛视频播放,成都网站建设有名的,高端品牌网站建设有哪些最近在搞CameraAPP需要将Camera2弄成一个后台服务#xff0c;发现跟预览的Activity没多大变动只是加了Service#xff0c;和一些简单的修改。之前的公司也用到Camera2#xff0c;发现用到的时候还是蛮多的所以记录一下#xff0c;代码在文章末尾 camera2的结构如下#x…最近在搞CameraAPP需要将Camera2弄成一个后台服务发现跟预览的Activity没多大变动只是加了Service和一些简单的修改。之前的公司也用到Camera2发现用到的时候还是蛮多的所以记录一下代码在文章末尾 camera2的结构如下主要是通过相机管理器CameraManager获得相机设备CameraDevice然后再开启一个控制相机的会话最后发送 拍照、预览、录像等请求。 Camera流程大概如下 1.获取Camera2服务管理器遍历摄像头打开每一个摄像头 public void onCreate() {super.onCreate();mActivity this;//获取Camera管理器CameraManager manager (CameraManager) this.getSystemService(camera);try {String[] ids manager.getCameraIdList();mCameraNum ids.length ;mCameraIds ids;} catch (CameraAccessException e) {e.printStackTrace();}mBackgroundThread new HandlerThread[mCameraNum];mBackgroundHandler new Handler[mCameraNum];mCameraOpenCloseLock new Semaphore[mCameraNum];mPreviewBuilder new CaptureRequest.Builder[mCameraNum];mPreviewSession new CameraCaptureSession[mCameraNum];mCameraDevice new CameraDevice[mCameraNum];mStateCallback new StateCallback[mCameraNum];mVideoSize new Size[mCameraNum];mPreviewSize new Size[mCameraNum];mImageReader new RefCountedAutoCloseable[mCameraNum];mFrameListener new FrameListener[mCameraNum];for (int i 0; i mCameraNum; i) {mCameraOpenCloseLock[i] new Semaphore(1);mStateCallback[i] new StateCallback(i);}int width 1920;int height 1080;mOpenCameraList.clear();//遍历摄像头分别打开for (int i 0; i mCameraNum; i) {int CameraId Integer.valueOf(mCameraIds[i]);mFrameListener[i] new FrameListener(CameraId,this);if(CameraId 100 ){Log.e(TAG,只打开USB摄像头 skipmCameraIds[i]);continue;}mOpenCameraList.add(CameraId);startBackgroundThread(i);打开摄像头openCamera(i,width, height);}//设置前台服务bindNotification(Launcher 进程);} 1.获取摄像头参数设置图像回调打开摄像头 private void openCamera(int cameraNum, int width, int height) {if (!hasPermissionsGranted(VIDEO_PERMISSIONS)) {requestVideoPermissions();return;}CameraManager manager (CameraManager) this.getSystemService(this.CAMERA_SERVICE);try {if (!mCameraOpenCloseLock[cameraNum].tryAcquire(2500, TimeUnit.MILLISECONDS)) {throw new RuntimeException(Time out waiting to lock camera opening.);}Log.e(TAG, String.valueOf(manager.getCameraIdList().length));String cameraId manager.getCameraIdList()[cameraNum];mCameraIds[cameraNum] cameraId;// Choose the sizes for camera preview and video recording获取摄像头的参数CameraCharacteristics characteristics manager.getCameraCharacteristics(cameraId);StreamConfigurationMap map characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);if (map null) {throw new RuntimeException(Cannot get available preview/video sizes);}mVideoSize[cameraNum] new Size(4096,2160);mPreviewSize[cameraNum] new Size(4096,2160);int orientation getResources().getConfiguration().orientation;configureTransform(cameraNum,width, height);if (mImageReader[cameraNum] null || mImageReader[cameraNum].getAndRetain() null) {//设置摄像头的图像回调mImageReader[cameraNum] new RefCountedAutoCloseable(ImageReader.newInstance(mPreviewSize[cameraNum].getWidth(),mPreviewSize[cameraNum].getHeight(), ImageFormat.YUV_420_888, /*maxImages*/5));}if (mImageReader[cameraNum] !null){mImageReader[cameraNum].get().setOnImageAvailableListener(mFrameListener[cameraNum], mBackgroundHandler[cameraNum]);}Log.d(TAG,openCamera:cameraId);//打开摄像头打开成功会调用到 mStateCallback.onOpenedmanager.openCamera(cameraId, mStateCallback[cameraNum], null);} catch (CameraAccessException e) {} catch (NullPointerException e) {} catch (InterruptedException e) {throw new RuntimeException(Interrupted while trying to lock camera opening.);} } class StateCallback extends CameraDevice.StateCallback {int cameraNum;public StateCallback(int cameraNum) {super();this.cameraNum cameraNum;}//打开成功会调用到这里Overridepublic void onOpened(NonNull CameraDevice cameraDevice) {mCameraDevice[cameraNum] cameraDevice;startPreview(cameraNum);mCameraOpenCloseLock[cameraNum].release();}Overridepublic void onDisconnected(NonNull CameraDevice cameraDevice) {mCameraOpenCloseLock[cameraNum].release();cameraDevice.close();mCameraDevice[cameraNum] null;}Overridepublic void onError(NonNull CameraDevice cameraDevice, int error) {mCameraOpenCloseLock[cameraNum].release();cameraDevice.close();mCameraDevice[cameraNum] null;}}; 1.打开成功开始重定向输出对象到ImageReader private void startPreview(final int cameraNum) {if (null mCameraDevice[cameraNum] || null mPreviewSize[cameraNum]) {return;}try {closePreviewSession(cameraNum);//设置Camera为预览输出mPreviewBuilder[cameraNum] mCameraDevice[cameraNum].createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);ListSurface surfaces;//获取mImageReader的SureFace 就能通过ImageReader的图像回调获取数据mPreviewBuilder[cameraNum].addTarget(mImageReader[cameraNum].get().getSurface());surfaces Arrays.asList(mImageReader[cameraNum].get().getSurface());mCameraDevice[cameraNum].createCaptureSession(surfaces,new CameraCaptureSession.StateCallback() {Overridepublic void onConfigured(NonNull CameraCaptureSession session) {mPreviewSession[cameraNum] session;updatePreview(cameraNum);}Overridepublic void onConfigureFailed(NonNull CameraCaptureSession session) {}}, mBackgroundHandler[cameraNum]);} catch (CameraAccessException e) {e.printStackTrace();}} 图像数据回调 class FrameListener implements ImageReader.OnImageAvailableListener{int cameraNum;Context context;public FrameListener(int cameraNum, Context context) {this.cameraNum cameraNum;this.context context;}long frameID 0;Overridepublic void onImageAvailable(ImageReader reader) {Image image reader.acquireNextImage();if (image !null) {frameID;int width image.getWidth();//1920int height image.getHeight();//1080//摄像头1920*1080 y长度2073600uv1036800//获取y数据地址ByteBuffer ybuffer image.getPlanes()[0].getBuffer();//u数据地址一般uv数据都是交替存放所以这里包含有uv的数据ByteBuffer ubuffer image.getPlanes()[1].getBuffer();//ByteBuffer vbuffer image.getPlanes()[2].getBuffer();int yLen ybuffer.remaining();int uLen ubuffer.remaining();int vLen vbuffer.remaining();byte[] yBytes new byte[yLen];byte[] uBytes new byte[uLen];//byte[] vBytes new byte[vLen];byte[] yuvBytes new byte[3110400];ybuffer.get(yBytes);ubuffer.get(uBytes);//vbuffer.get(vBytes);System.arraycopy(yBytes,0,yuvBytes,0,2073600);System.arraycopy(uBytes,0,yuvBytes,2073600,1036800);nativeReadImageBuf(width,height,image.getFormat(),yuvBytes, 3110400, mOpenCameraList.size(), mOpenCameraList.indexOf(cameraNum));image.close();}}} 当服务起来后会直接打开摄像头获取回调数据 运行一段时间后服务自动停止原因是没有和APP活动在同一个生命周期 使用 /*** 设置为前台服务* param title*/ protected void bindNotification(String title){String CHANNEL_ONE_ID com.example.android.camera2videopushnew;String CHANNEL_ONE_NAME com.example.android.camera2videopushnew.name;Notification notification null;NotificationChannel notificationChannel new NotificationChannel(CHANNEL_ONE_ID,CHANNEL_ONE_NAME, NotificationManager.IMPORTANCE_LOW);notificationChannel.enableLights(false);notificationChannel.setLightColor(Color.RED);notificationChannel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);NotificationManager manager (NotificationManager) getSystemService(NOTIFICATION_SERVICE);manager.createNotificationChannel(notificationChannel);notification new Notification.Builder(this,CHANNEL_ONE_ID).setContentTitle(title).setContentText(title).build();notification.flags | Notification.FLAG_NO_CLEAR;startForeground(1, notification);} 结束 APP代码链接【免费】AndroidCamera2后台服务APP资源-CSDN文库
http://www.zqtcl.cn/news/864123/

相关文章:

  • 河北省建设执业资格注册中心网站东莞微网站建设多少钱
  • 企业网站建设功能模块discover wordpress
  • 网站建设结课做诱导网站
  • 网站开发与设计难嘛青州网站建设推广
  • 网站开发程序员工资谷歌推广网站建设
  • 江门网页建站模板金富通青岛建设工程有限公司网站
  • 网站后台账户如何做会计分录做传奇开服一条龙网站哪个好
  • 天门市网站建设seo平台建设网站公司
  • php网站怎么做302织梦网站有会员系统怎么做
  • 清远建设局网站安阳吧百度贴吧
  • 做什么软件做网站效率最好网站公司建设都招聘那些职位
  • 缙云建设局网站深圳营销型网站设计
  • 企业网站制作价格成都高端网站建设公司哪家好
  • wordpress+做仿站网站建设费用属于业务宣传费吗
  • 昆明企业网站制作wordpress移动端插件menu
  • 长沙网站设计培训学校南宁建设网站哪里好
  • 提高基层治理效能全国seo搜索排名优化公司
  • 如何建设网站简介WordPress集成tipask
  • 青海网站开发公司建筑公司的愿景怎么写
  • 建设银行集团网站首页优化科技
  • dede 汽车网站网站上的彩票走势图是怎么做的
  • 网站内容营销呼市推广网站
  • 南宁网站建设价格医院有关页面设计模板
  • 城乡住房和城乡建设厅网站湖州公司网站建设
  • h5响应式的网站建站空间哪个好
  • 徐州网站建设与推广公众号开发技术风险
  • 男女做差差事的视频网站自己做一个小程序要多少钱
  • 临沂网站建设哪家好重庆建设招标造价信息网站
  • 筑巢网络官方网站深圳网站开发设计公司排名
  • 镇江市网站制作网页的代码实例