赞
踩
Android灵活实用的Android平台UVC摄像头引擎,无需任何系统权限即可轻松打开您的uvc摄像头(支持多路摄像头)。 您唯一应该做的就是确认您的 Android 设备必须支持 OTG 功能。 欢迎使用AUSBC3.0,欢迎star & fork & issues!
.jpg
)、视频(.mp4
/.h264
/yuv
)和音频(pcm
/mp3
/aac
)AUSBC 3.0
被kotlin重构,使用更简单,功能更丰富。 所以,我强烈建议您使用当前版本,让我们一起构建它。
首先,将它添加到你的根目录build.gradle 或settings.gradle:
groovy
复制代码
allprojects {
repositories {
google()
jcenter()
maven { url "https://jitpack.io" }
}
}
groovy
复制代码
dependencies {
implementation 'com.github.jiangdongguo.AndroidUSBCamera:libausbc:latest_tag'
}
至于如何正确使用这个库,只要让你的 Fragment 或 Activity 实现 CameraFragment 或 CameraActivity 即可。
kotlin 复制代码 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 }
最重要的是你应该重写getRootView()
/getCameraViewContainer()
/ getCameraView()
至少表示fragment的根视图、纹理或表面视图以及它的容器。当然和CameraActivity一样,现在你可以看到uvc相机预览。
如果你想要一些自定义配置,你可以这样做:
kotlin 复制代码 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 的流。 例如:
kotlin 复制代码 // 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 来实现自己的过滤器。 例如:
kotlin 复制代码 // 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)
如果你想打开多路摄像头,你可以让你的Fragment或者Activity扩展MultiCameraFragment或者MultiCameraActivity。就这样做吧,更多细节请查阅DemoMultiCameraFragment:
kotlin 复制代码 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 connected camera.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 文件并使其成为模块。
groovy
复制代码
include ':app'
// For debug online
include ':libausbc'
include ':libuvc'
include ':libpush'
include ':libnative'
include ':libuvccommon'
其次,让 app.gradle 依赖于 ':libausbc'
。
groovy
复制代码
dependencies {
// For debug online
implementation project(':libausbc')
// demo
//implementation 'com.github.jiangdongguo.AndroidUSBCamera:libausbc:3.1.7'
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。