【数字图传第四步】Android App查看图传视频
接上回前面三个章节完成之后我们就有了一个图传的发送端可以是esp32cam也可以是esp32s3cam一个是图传接收端usb 摄像头 串口。图传的发送端淘宝上到处都是。接收端必须是esp32s3cam因为我们要用它的usb理论上只要支持usb的都可以。如果我们用这套系统来搓一个fpv小车fpv穿越机理论上都是一样的。下面来开发一个Android 手机上的app来展示USB UVC其实非常简单构造UVCCamera即可。处理下USB的相关事件。需要源码可以咸鱼沟通https://www.goofish.com/item?spma21ybx.personal.feeds.1.42306ac2teNyzpid1050940719393categoryId50023914配置dependencyResolutionManagement{repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)repositories{google()mavenCentral()maven{url https://maven.aliyun.com/repository/public}maven{url https://maven.aliyun.com/repository/google}maven{url https://maven.aliyun.com/repository/gradle-plugin}maven{url https://jitpack.io}maven{url https://raw.githubusercontent.com/saki4510t/libcommon/master/repository/}}}添加Ali的maven因为用的比较新的android studio用的是libs.version.toml[versions]agp 8.10.1junit 4.13.2junitVersion 1.3.0espressoCore 3.7.0appcompat 1.7.1material 1.14.0activity 1.13.0constraintlayout 2.2.1usbcamera 2.3.4添加usbcamera[libraries]junit { group junit, name junit, version.ref junit }ext-junit { group androidx.test.ext, name junit, version.ref junitVersion }espresso-core { group androidx.test.espresso, name espresso-core, version.ref espressoCore }appcompat { group androidx.appcompat, name appcompat, version.ref appcompat }material { group com.google.android.material, name material, version.ref material }activity { group androidx.activity, name activity, version.ref activity }constraintlayout { group androidx.constraintlayout, name constraintlayout, version.ref constraintlayout }android-usbcamera { group com.github.jiangdongguo, name AndroidUSBCamera, version.ref usbcamera }这样如果一切正常的话就能更新下来需要的库。权限配置uses-permission android:nameandroid.permission.USB_PERMISSION /uses-feature android:nameandroid.hardware.usb.host /uses-permission android:nameandroid.permission.WRITE_EXTERNAL_STORAGE /uses-permission android:nameandroid.permission.READ_EXTERNAL_STORAGE /uses-permission android:nameandroid.permission.RECORD_AUDIO /layout?xml version1.0 encodingutf-8?FrameLayoutxmlns:androidhttp://schemas.android.com/apk/res/androidandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:background#000000com.serenegiant.usb.widget.UVCCameraTextureViewandroid:idid/camera_viewandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:layout_gravitycenter//FrameLayoutActivity主要就是对usb的monitor以及uvcCamera的使用mCameraView findViewById(R.id.camera_view);mCameraView.setAspectRatio(640.0 / 480.0);监听到usb uvc插入mUSBMonitor new USBMonitor(this, new USBMonitor.OnDeviceConnectListener() {Overridepublic void onAttach(UsbDevice device) {mUSBMonitor.requestPermission(device);}Overridepublic void onConnect(UsbDevice device, USBMonitor.UsbControlBlock ctrlBlock, boolean createNew) {try {mUVCCamera new UVCCamera();mUVCCamera.open(ctrlBlock);mUVCCamera.setPreviewSize(640, 480, UVCCamera.FRAME_FORMAT_MJPEG);if (mCameraView.getSurfaceTexture() ! null) {mUVCCamera.setPreviewDisplay(new android.view.Surface(mCameraView.getSurfaceTexture()));}mCameraView.post(() - setTextureViewFull(640, 480));mUVCCamera.startPreview();} catch (Exception e) {e.printStackTrace();}}Overridepublic void onDisconnect(UsbDevice device, USBMonitor.UsbControlBlock ctrlBlock) {closeCamera();}Override public void onDettach(UsbDevice device) { }Override public void onCancel(UsbDevice device) { }});主要在onConnect里面构建UVCCamera然后初始化等操作。然后插上设备授权。搞定。终章