AUSBC3.0, 震撼来袭!(UVC Camera,支持开启多路摄像头)

news/2024/11/28 22:34:30/

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

 @ Example showing

Feature

  • 支持开启多路摄像头;
  • 支持在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设备等

Usages

AUSBC 3.0被kotlin重构,使用更简单,功能更丰富。 所以,我强烈建议您使用当前版本,让我们一起构建它。

  • 获取 AUSBC

 首先,将它添加到你的根目录build.gradlesettings.gradle

allprojects {repositories {google()jcenter()maven { url "https://jitpack.io" }}
}

 其次,在你的 app.gradle 中添加依赖,最新版本是 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SiVDEaQ7-1658640679873)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/fafe2e67f10f40a287a32175a4ec87f9~tplv-k3u1fbpfcp-zoom-1.image)]:

dependencies {implementation 'com.github.jiangdongguo.AndroidUSBCamera:libausbc:latest_tag'
}
  • 简单使用

  至于如何正确使用这个库,只要让你的 Fragment 或 Activity 实现 CameraFragmentCameraActivity 即可。

class DemoFragment : CameraFragment() {private lateinit var mViewBinding: FragmentDemoBindingoverride 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
}

 最重要的是你应该重写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()}
}

 毫无疑问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)

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

// First, extending AbstractEffect
class EffectBlackWhite(ctx: Context) : AbstractEffect(ctx) {override fun getId(): Int = IDoverride fun getClassifyId(): Int = CameraEffect.CLASSIFY_ID_FILTERoverride fun getVertexSourceId(): Int = R.raw.base_vertexoverride fun getFragmentSourceId(): Int = R.raw.effect_blackw_fragmentcompanion object {const val ID = 100}
}// Second, adding or updating or removing filter
mCameraClient?.addRenderEffect(effect)
mCameraClient?.removeRenderEffect(effect)
mCameraClient?.updateRenderEffect(classifyId, effect)
  • 开启多路摄像头

 如果你想打开多路摄像头,你可以让你的Fragment或者Activity扩展MultiCameraFragment或者MultiCameraActivity。就这样做吧,更多细节请查阅DemoMultiCameraFragment

class DemoMultiCameraFragment : MultiCameraFragment(), ICameraStateCallBack {override fun onCameraAttached(camera: MultiCameraClient.Camera) {// a camera be attached}override fun onCameraDetached(camera: MultiCameraClient.Camera) {// a camera be detached}override fun onCameraConnected(camera: MultiCameraClient.Camera) {// a camera be connectedcamera.openCamera(textureView, getCameraRequest())camera.setCameraStateCallBack(this)}override fun onCameraDisConnected(camera: MultiCameraClient.Camera) {// a camera be disconnected}override fun onCameraState(self: MultiCameraClient.Camera,code: ICameraStateCallBack.State,msg: String?) {// a camera be opened or closed or error}override fun getRootView(inflater: LayoutInflater, container: ViewGroup?): View {return rootView}
}
  • 在线调试

 如果您想在线调试项目或修改某些内容,您应该执行以下步骤:

首先,修改 Settings.gradle 文件并使其成为模块。

include ':app'// For debug online
include ':libausbc'
include ':libuvc'
include ':libpush'
include ':libnative'
include ':libuvccommon'

其次,让 app.gradle 依赖于 ':libausbc'

dependencies {// For debug onlineimplementation project(':libausbc')// demo//implementation 'com.github.jiangdongguo.AndroidUSBCamera:libausbc:3.1.7'
}

@ 中文文档

Demo

  • download by Scanning code

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P6cSHC5m-1658640679874)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/fdc8e416780b44039eff446f15389d58~tplv-k3u1fbpfcp-watermark.image?)]

  • download by opening url

 AUSBC3.2.0.apk

问答

1.相机预览黑屏?

首先,检查 targetSdk 版本。 如果 targetSdk>=28,您应该授予应用 android.permission.CAMERA 权限,此解决方案将照常解决。 但是,如果它不起作用,则必须将 targetSdk 设置为低于 28,因为这是自定义系统问题。 否则,如果您已经获得了 uvc 摄像头权限授予对话框,请向我发送一封电子邮件,其中包含您在位置 Android/data/com.jiangdg.ausbc/files 的日志。

主页和帮助

1。 JUEJIN

2. CSDN(更新停止)

 如果您有任何问题或有趣的想法,请发给我。
 当然,你也可以发邮件给我[765067602@qq.com]。

 所以,别忘了从位置Android/data/com.jiangdg.ausbc/files发送日志,并通过执行收集logcat信息command adb shell logcat -v threadtime > usbcamera.log

Github主页

https://github.com/jiangdongguo/AndroidUSBCamera


http://www.ppmy.cn/news/872903.html

相关文章

mac虚拟摄像头插件_【OBS虚拟摄像头插件下载】OBS VirtualCam(OBS虚拟摄像头插件) v2.0.5 官方最新版-开心电玩...

软件介绍 OBS虚拟摄像头插件是一款由OBS官方推出的摄像头插件,它的主要功能是帮助用户创建一个虚拟的摄像头,用户在这里添加各种照片和视频,非常适合用于直播或视频对话场景。OBS虚拟摄像头插件使用起来很方便,而且功能也是完全免…

obs摄像头模糊_【OBS虚拟摄像头插件】OBS虚拟摄像头下载OBS VirtualCam v2020 官方版-趣致软件园...

OBS虚拟摄像头插件是一款非常优秀的虚拟摄像头软件,OBS虚拟摄像头插件操作简单,功能强大全面,主要功能是帮助用户创建一个虚拟的摄像头,用户在这里添加各种照片和视频,非常适合用于直播或视频对话场景,可以很好的防止用户信息泄露的问题。 OBS虚拟摄像头插件使用起来很方…

电脑虚拟摄像头 -obs及obs虚拟摄像头插件(免费)

插件: 链接:https://pan.baidu.com/s/1AdAyc41LOHoSNesefcNOcA 提取码:pjneobs安装包: 链接:https://pan.baidu.com/s/1so1f1-uBm1RicVnTD_Rwug 提取码:1hq8插件obs: 链接:https://pan.bai…

前端-基于客户端DOM的XSS代码注入

分为两种情况 postmessage引起的: 这种安全漏洞一般是因为在使用postmessage发送接收消息的时候没有判断origin引起的,当然如果判断了origin还爆出这种问题,可以尝试对消息体进行转码进行规避。 首先可以进行oring的判断,有些情…

小程序:调用手机的相册

1、需求 点击按钮,调用手机相册选择图片上传 2、解决方案 Button 上加 openType"chooseAvatar";onChooseAvatar 写方法,必须用button 按钮,更改下样式看不出来就行。 3、代码 //解决方案 // 1、Button 上加 openTy…

数据库简史

数据库简史 ● 一、RDBMS(关系数据库,Relational DBMS) ● 数据库 早期史 1961年,GE(通用电气公司,General Electric Company)的Charles Bachman ,开发了IDS(集成数据存储,Integrated Data Store),这是世界上第一个NDBMS(网状数据库管理系统,Network Database M…

Linux 必掌握的 SQL 命令

数据库和 SQL 在本系列教程中,目前我们使用平面文本文件来存储数据。平面文本文件可能适合相对较少的数据,但它们对存储大量数据或查询该数据没有多大帮助。多年来,为该目的开发了多种数据库,包括分层和网络数据库,但现…

Groovy探索之Gstring

Groovy探索之Gstring Groovy语言里有很多看起来不起眼的小玩意,但使用以后,我们却常常会惊异于它的巨大能量,Gstring就是其中之一。 Java的String对象是我们最最常用的对象,却也是诟病最多的对象。一句话来说,String使…