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.gradle 或settings.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 实现 CameraFragment 或 CameraActivity 即可。
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)
对于更高级的功能,您甚至可以为您的相机添加一些滤镜。这个库提供了一些默认滤镜,如 EffectBlackWhite、EffectSoul 和 EffectZoom 等 将来会添加过滤器。当然,您也可以通过扩展 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