• AUSBC3.0, 震撼来袭!(UVC Camera)


    在这里插入图片描述

    AUSBC

     Android平台上灵活实用的UVC摄像头引擎,无需任何系统权限即可轻松打开您的uvc摄像头。 您唯一应该做的就是确认您的 Android 设备必须支持 OTG 功能。 所以,欢迎使用AUSBC3.0,欢迎star & fork & issues

    • 效果演示

    特征

    • 支持在Android 4.4~11开启camera1、camera2和uvc camera;

    • 支持预览480p、720p、1080p等;

    • 支持使用 OpenGL ES 2.0 添加效果;

    • 支持抓图(.jpg)、视频(.mp4/.h264/yuv)和音频(pcm/mp3/aac)

    • 支持旋转相机视图;

    • 支持在屏幕外显示相机;

    • 支持录制媒体以及获取 h264/aac 流,您可以将其推送到您的媒体服务器;

    • 支持获取所有分辨率和usb设备等

    使用方式

    AUSBC 3.0 与之前的版本有点不同,到目前为止还不能直接被 gradle 依赖。你唯一应该做的就是关闭项目并将其添加为你自己项目的模块。 当然,以后肯定会支持依赖的方式。 至于如何正确使用这个模块,只要让你的 Fragment 或 Activity 实现 CameraFragmentCameraActivity 即可。

    • 简单使用
    class DemoFragment : CameraFragment() {
        private lateinit var mViewBinding: FragmentDemoBinding
        
        override fun initView() {
            
        }
        
        override fun getCameraView(): IAspectRatio {
            return AspectRatioTextureView(requireContext())
        }
        
        override fun initData() {
            
        }
    
        override fun getCameraViewContainer(): ViewGroup {
            return mViewBinding.cameraViewContainer
        }
    
        override fun getRootView(inflater: LayoutInflater, container: ViewGroup?): View {
            mViewBinding = FragmentDemoBinding.inflate(inflater, container, false)
            return mViewBinding.root
        }
    
        override fun getGravity(): Int = Gravity.TOP
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

     最重要的是你应该重写getRootView()/getCameraViewContainer()/
    getCameraView() 至少表示fragment的根视图、纹理或表面视图以及它的容器。当然和CameraActivity一样,现在你可以看到uvc相机预览。

    • 高级用法

     如果你想要一些自定义配置,你可以这样做:

    class DemoFragment : CameraFragment() {
        ...
        override fun getCameraClient(): CameraClient? {
            return CameraClient.newBuilder(requireContext())
                .setEnableGLES(true)   // use opengl render 
                .setRawImage(true)     // capture raw or filter image
                .setDefaultEffect(EffectBlackWhite(requireContext())) // default effect
                .setCameraStrategy(CameraUvcStrategy(requireContext())) // camera type
                .setCameraRequest(getCameraRequest()) // camera configurations
                .setDefaultRotateType(RotateType.ANGLE_0) // default camera rotate angle
                .openDebug(true) // is debug mode
                .build()
        }
        
        private fun getCameraRequest(): CameraRequest {
            return CameraRequest.CameraRequestBuilder()
                .setFrontCamera(false) // only for camera1/camera2
                .setPreviewWidth(640)  // initial camera preview width
                .setPreviewHeight(480) // initial camera preview height
                .create()
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

     毫无疑问CameraClient是这个库中的核心类,你可以使用默认的CameraClient对象来预览你的相机或自定义它。 通过使用CameraClient,您可以捕获jpg 图像或mp4 视频或mp3 音频文件并更新分辨率或不同的uvc 相机。 您甚至可以获取 H264/AAC/YUV 的流。 例如:

    // capture jpg image
    mCameraClient?.captureImage(callBack, savePath)
    
    // capture mp4 video
    mCameraClient?.captureVideoStart(callBack, path, durationInSec)
    mCameraClient?.captureVideoStop()
    
    // capture mp3 audio
    mCameraClient?.captureAudioStart(callBack, path)
    mCameraClient?.captureAudioStop()
    
    // play mic in real time
    mCameraClient?.startPlayMic(callBack)
    mCameraClient?.stopPlayMic()
    
    // rotate camera
    // base on opening opengl es
    mCameraClient?.setRotateType(type)
    
    // switch different camera
    mCameraClient?.switchCamera(cameraId)
    
    // update resolution
    mCameraClient?.updateResolution(width, height)
    
    // get all preview sizes
    mCameraClient?.getAllPreviewSizes(aspectRatio)
    
    // acquire encode data(h264 or aac)
    mCameraClient?.addEncodeDataCallBack(callBack)
    
    // acquire raw data(yuv)
    mCameraClient?.addPreviewDataCallBack(callBack)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

     对于更高级的功能,您甚至可以为您的相机添加一些滤镜。这个库提供了一些默认滤镜,如 EffectBlackWhiteEffectSoulEffectZoom 等等 将来会添加过滤器。当然,您也可以通过扩展 AbstractEffect 来实现自己的过滤器。 例如:

    // First, extending AbstractEffect
    class EffectBlackWhite(ctx: Context) : AbstractEffect(ctx) {
    
        override fun getId(): Int = ID
    
        override fun getClassifyId(): Int = CameraEffect.CLASSIFY_ID_FILTER
    
        override fun getVertexSourceId(): Int = R.raw.base_vertex
    
        override fun getFragmentSourceId(): Int = R.raw.effect_blackw_fragment
    
        companion object {
            const val ID = 100
        }
    }
    
    // Second, adding or updating or removing filter
    mCameraClient?.addRenderEffect(effect)
    mCameraClient?.removeRenderEffect(effect)
    mCameraClient?.updateRenderEffect(classifyId, effect)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    Demo

    • download by Scanning code

    在这里插入图片描述

    • download by opening url

    JJCamera3.0_3.1.20220629.apk

    Github主页

    https://github.com/jiangdongguo/AndroidUSBCamera

  • 相关阅读:
    结合el-input、el-select实现纯前端过滤树形el-table数据
    分布式.分布式锁
    Redis_08_Redis集群实现主从复制应对高并发
    【Flutter 面试题】解释 Flutter的热重载(Hot Reload)功能
    leetcode做题笔记135. 分发糖果
    【MATLAB-Retinex图像增强算法的去雾技术】
    问卷调查小程序功能清单
    护理管理学复习题及参考答案
    AUTOSAR知识点 之 SWC (一):基于ETAS工具ISOLAR-AB新建一个SWC并实现与其它SWC通信(动态与静态详细步骤介绍)
    【java学习—九】工厂方法FactoryMethod(6)
  • 原文地址:https://blog.csdn.net/AndrExpert/article/details/125554687