日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

利用Android Camera2 的照相机api 实现 实时的图像采集与预览

發(fā)布時間:2024/4/14 Android 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用Android Camera2 的照相机api 实现 实时的图像采集与预览 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

? ?最近想要做一個客戶端往服務(wù)器推送實時畫面的功能,首先可以考慮到兩種思路,一種是在客戶端進行視頻流的推送,主要利用RTSP等流媒體協(xié)議進行傳輸,而另外一種是通過攝像頭獲取當(dāng)前畫面,將每一幀作為對象單獨傳輸。

? ?項目想要實現(xiàn)的功能最終目的是對實時畫面的每一幀進行處理,可以考慮客戶端推流到服務(wù)器,再在服務(wù)器進行幀解析的操作,但由于目前很多的流媒體推送框架在推流端或者服務(wù)端都或多或少存在限制,很少有完全開源的項目,再加上傳送畫面的同時需要附帶部分的數(shù)據(jù),仍然需要另外建立連接進行傳輸,所以暫時擱置這一方案。選擇第二種思路,獲取每一幀的畫面,單獨傳輸。

? ?要想獲取實時畫面,我們必須通過對安卓設(shè)備上的攝像頭進行調(diào)用。

? ?從API21開始,安卓引入了android.hardware.camera2這個包,來替代原有的camera類,原有的camera類已經(jīng)不再建議使用了。camera2中最重要的變化是,攝像頭的調(diào)用不再是簡單地進行實例化,而是用一種類似服務(wù)申請的方式來進行調(diào)用。通過CameraManager來管理攝像服務(wù),需要通過建立CameraCaptureSession來建立一個調(diào)用攝像設(shè)備CameraDevices的會話,來實現(xiàn)對攝像頭的調(diào)用。而CaptureRequest.Builder類用于建立實際的調(diào)用請求,具體的參數(shù)設(shè)置也可以通過這個類來實現(xiàn)(而不是對camera設(shè)備進行直接設(shè)置),這樣做的目的是把對攝像頭的控制與攝像頭本身分離開來,用戶可以通過不同的session根據(jù)不同的配置來使用攝像頭。

? ?我們可以結(jié)合具體的代碼來分析新api中攝像頭調(diào)用的過程。

? ?首先我們想要對攝像設(shè)備進行操作,需要獲得CameraManager的實例

????CameraManager?cameraManager;cameraManager?=?(CameraManager)?getSystemService(Context.CAMERA_SERVICE);

? ?我們可以調(diào)用openCamera函數(shù)打開攝像頭設(shè)備

????cameraManager.openCamera(cameraId,?cameraCallback,?mainHandler);

? ?這里需要傳入三個參數(shù),cameraId是設(shè)備編號,cameraCallback控制攝像服務(wù)的回調(diào),最后一個參數(shù)指定HandlerThread對象?

?????cameraId?=?Integer.toString(CameraCharacteristics.LENS_FACING_FRONT);private?CameraDevice.StateCallback?cameraCallback?=?new?CameraDevice.StateCallback()?{@Overridepublic?void?onOpened(CameraDevice?camera)?{Log.d("CameraCallback",?"Camera?Opened");cameraDevice?=?camera;takePreview();}@Overridepublic?void?onDisconnected(CameraDevice?cameraDevice)?{Log.d("CameraCallback",?"Camera?Disconnected");closeCameraDevice();}@Overridepublic?void?onError(CameraDevice?cameraDevice,?int?i)?{Log.d("CameraCallback",?"Camera?Error");Toast.makeText(PusherSurface.this,?"攝像頭開啟失敗",?Toast.LENGTH_SHORT).show();}};

?回調(diào)函數(shù)用于指定連接攝像頭設(shè)備時不同狀態(tài)的操作。在這里,我們在攝像頭成功連接的時候調(diào)用 ?takePreview()函數(shù)開啟攝像頭畫面的預(yù)覽。

private?void?takePreview()?{try?{final?CaptureRequest.Builder?previewRequestBuilder=?cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);previewRequestBuilder.addTarget(surfaceHolder.getSurface());previewRequestBuilder.addTarget(previewReader.getSurface());cameraDevice.createCaptureSession(Arrays.asList(surfaceHolder.getSurface(),previewReader.getSurface(),p_w_picpathReader.getSurface()),?new?CameraCaptureSession.StateCallback()?{@Overridepublic?void?onConfigured(CameraCaptureSession?cameraCaptureSession)?{if?(cameraDevice?==?null)?return;mCameraCaptureSession?=?cameraCaptureSession;try?{previewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE,CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);previewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE,CaptureRequest.CONTROL_AE_MODE_OFF);CaptureRequest?previewRequest?=?previewRequestBuilder.build();mCameraCaptureSession.setRepeatingRequest(previewRequest,?null,?childHandler);}?catch?(CameraAccessException?e)?{e.printStackTrace();}}@Overridepublic?void?onConfigureFailed(CameraCaptureSession?cameraCaptureSession)?{Toast.makeText(PusherSurface.this,?"配置失敗",?Toast.LENGTH_SHORT).show();}},?childHandler);}?catch?(CameraAccessException?e)?{e.printStackTrace();} }

要從攝像設(shè)備中獲取圖像,我們首先需要建立一個camera capture session。函數(shù)

createCaptureSession(List, CameraCaptureSession.StateCallback, Handler)的第一個參數(shù)傳入了我們想要繪制的視圖列表,第二個參數(shù)傳入的是建立攝像會話的狀態(tài)回調(diào)函數(shù),第三個參數(shù)傳入相應(yīng)的handler處理器。然后,我們需要利用capturerequest來定義攝像頭捕獲圖像時候的具體參數(shù),比如是否開啟攝像頭,是否自動對焦等。最后通過CamraCaptureSession.setRepeatingRequest來開啟請求。這樣我們就可以從capturesession傳入的list中的surface列表獲得連續(xù)的圖像。留意到

previewRequestBuilder.addTarget(surfaceHolder.getSurface()); previewRequestBuilder.addTarget(previewReader.getSurface());

這里除了傳入xml界面布局中的surfaceHolder的surface外,還傳入了一個previewReader的surface。

previewReader是一個自定義的ImageReader對象。

previewReader?=?ImageReader.newInstance(1080,?1920,?ImageFormat.YUV_420_888,?2);previewReader.setOnImageAvailableListener(new?ImageReader.OnImageAvailableListener()?{@Overridepublic?void?onImageAvailable(ImageReader?p_w_picpathReader)?{Image?p_w_picpath?=?null;try?{p_w_picpath?=?p_w_picpathReader.acquireLatestImage();Log.d("PreviewListener",?"GetPreviewImage");if?(p_w_picpath?==?null)?{return;}byte[]?bytes?=?ImageUtil.p_w_picpathToByteArray(p_w_picpath);if?(pushFlag?==?false)uploadImg(bytes);}?finally?{if?(p_w_picpath?!=?null)?{p_w_picpath.close();}}}},?mainHandler);

ImageReader是一個可以讓我們對繪制到surface的圖像進行直接操作的類。在這里我們從攝像設(shè)備中傳入了連續(xù)的預(yù)覽圖片,也就是我們在屏幕上看到的畫面,它們的格式都是未經(jīng)壓縮的YUV_420_888類型的(同樣的如果要操作拍攝后的圖片,就要設(shè)置成jpeg格式)。我們調(diào)用p_w_picpathReader.acquireLatestImage或者acquireNextImage來獲取圖像隊列中的圖片。并進行操作。在這里我利用一個函數(shù)將圖像壓縮后轉(zhuǎn)化成byte[]格式,并調(diào)用uploadImg函數(shù)上傳至服務(wù)器。這樣,整個攝像頭的調(diào)用到預(yù)覽圖像的處理也就完成了。想要實現(xiàn)拍照功能也是大同小異,在這里我就不一一貼出了。

??歡迎更多安卓開發(fā)者一同交流。

轉(zhuǎn)載于:https://blog.51cto.com/davidwillo/1908166

總結(jié)

以上是生活随笔為你收集整理的利用Android Camera2 的照相机api 实现 实时的图像采集与预览的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 色综合a| 丁香六月婷婷综合 | 国产成人精品一区二区三区免费 | 私密spa按摩按到高潮 | 看全色黄大色黄大片女一次牛 | 天天操狠狠操夜夜操 | 毛片一区二区三区 | 男女国产视频 | 超碰爱爱 | 欧美日韩精品一区二区在线播放 | 人妻熟女一区二区aⅴ水 | 一区二区视频在线播放 | 毛片基地免费 | 中文字幕一区二区三区乱码不卡 | 久久天天综合 | 天堂在线资源库 | 狂野少女电影在线观看国语版免费 | 亚洲中文一区二区 | 久久亚洲a v | 九九资源网 | 日本视频h| 中文字幕亚洲激情 | 国产精品4区 | 黄色一级在线视频 | 欧美日韩一二三四区 | 免费特级黄色片 | 国产性生活网站 | 精品色| 午夜免费福利视频 | 国产a级片免费看 | 久久22| 黄色av三级 | 丝袜一区二区三区四区 | 国产精品色在线 | 爱搞国产| julia中文字幕在线 | 操欧美女 | 香蕉视频在线免费看 | 少妇又紧又爽视频 | 日本色综合网 | 午夜一级大片 | 91精品久久香蕉国产线看观看 | 中国黄色免费 | 亚洲午夜一区二区三区 | 日本成人免费观看 | 国产一区二区三区免费播放 | 午夜痒痒网 | 国产成人自拍偷拍 | 日本三级aaa| 一级黄毛片 | 国产午夜在线观看 | 成人免费在线播放 | 久久99久久99精品 | 91综合网 | 欧美成人一区二免费视频软件 | 高清一区在线观看 | 亚洲xx站| 日韩美一区二区三区 | 欧美激情久久久久久 | 色香影视| 玩弄丰满少妇xxxxx性多毛 | 91视频看 | 在线看片中文字幕 | 黄色网页免费在线观看 | 性xxxfllreexxx少妇 | 欧美区日韩区 | 成人在线观看免费网站 | 欧美抠逼视频 | 欧美日韩免费观看一区=区三区 | 麻豆成人精品国产免费 | 在线观看高清av | 红桃视频隐藏入口 | 国产又粗又长又黄 | 国产一区二区三区四区在线观看 | 可以免费观看的毛片 | 欧美激情精品久久久久久变态 | 日韩黄色av网站 | 激情午夜视频 | 性感美女在线 | 中文字幕天堂 | 亚洲伦理在线视频 | 精品视频一区在线观看 | 99国产精品久久久久 | 亚洲午夜在线观看 | 美女诱惑一区 | 国产激情成人 | 美女视频三区 | 国产精选91 | 亚洲精品国产精品乱码视色 | 免费av在线播放 | 性xxxxbbbb| 免费做a爰片77777 | 亚洲精品久久夜色撩人男男小说 | 亚洲一区二区不卡在线观看 | 中文在线观看免费视频 | 免费av国产 | 在线午夜 | 国产艳妇疯狂做爰视频 | 少妇激情一区二区三区 |