# USB摄像头 **Repository Path**: BxDemo/usb-camera ## Basic Information - **Project Name**: USB摄像头 - **Description**: 优化开源USBCamera预览延时等问题 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 7 - **Created**: 2025-01-22 - **Last Updated**: 2025-01-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 简介 该项目是基于[UVCCamera](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Fsaki4510t%2FUVCCamera)优化过来的版本,主要优化一些常见的BUG并减少预览编码队列以达到低延时预览效果。 去掉不必要的代码仅留核心功能部分,将其打包成aar方便于二次开发。 # 使用方法 ## 添加依赖 1.在你的 Android 项目中的 build.gradle 文件中添加 jitpack.io Maven 仓库,确保可以从 jitpack.io 获取到该库的依赖项。示例代码如下: ``` allprojects { repositories { mavenCentral() maven { url 'https://jitpack.io' } } } ``` 2.在你的项目中的 build.gradle 文件中添加该库的依赖项,你需要像下面这样添加依赖项: ``` dependencies { implementation "com.gitee.yunianvh:usb-camera:libusbcamera-1.2.3" } ``` ## 常用方法 ``` package com.yunianvh.usbcamera; import android.graphics.Bitmap; import android.os.Bundle; import android.text.TextUtils; import android.util.Base64; import android.util.Log; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import com.pedro.rtmp.utils.ConnectCheckerRtmp; import com.pedro.rtplibrary.view.OpenGlView; import com.yunianvh.demo.R; import com.yunianvh.libusbcamera.USBCameraHelper; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.text.SimpleDateFormat; import java.util.Date; public class MainActivity extends AppCompatActivity { private TextView textView, textView2; private OpenGlView openGlView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏 this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);//去掉信息栏 setContentView(R.layout.activity_main); textView = findViewById(R.id.camera_tv); textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //修改分辨率可参照这个方法 // USBCameraHelper.getInstance().setPreviewSize(1920, 1080, 1024 * 1024 * 5, 0); // USBCameraHelper.getInstance().stopPreview(); // USBCameraHelper.getInstance().startPreview(); if (USBCameraHelper.getInstance().isRecording()) { USBCameraHelper.getInstance().stopRecord(); textView.setText("开始录制"); } else { String recoderPath = getExternalFilesDir(null).getAbsolutePath() + "/" + new SimpleDateFormat("dd HH:mm:ss").format(new Date()) + ".mp4"; USBCameraHelper.getInstance().startRecord(recoderPath); textView.setText("关闭录制"); } } }); EditText editText = findViewById(R.id.camera_et); textView2 = findViewById(R.id.camera_tv2); textView2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (USBCameraHelper.getInstance().isStreaming()) { USBCameraHelper.getInstance().stopStream(); textView2.setText("开始推流"); } else { String url = editText.getText().toString(); if (TextUtils.isEmpty(url)) { Toast.makeText(MainActivity.this, "请输入推流地址", Toast.LENGTH_SHORT).show(); return; } USBCameraHelper.getInstance().startStream(url); textView2.setText("关闭推流"); } } }); ImageView imageView = findViewById(R.id.camera_iv); findViewById(R.id.camera_iv_tv).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { USBCameraHelper.getInstance().takePicture(new USBCameraHelper.PictureBack() { @Override public void onPictureBitMap(Bitmap bmp) { imageView.setImageBitmap(bmp); } }); } }); openGlView = (OpenGlView) findViewById(R.id.camera_opengl_view); init(); } public void init() { USBCameraHelper.getInstance().init(this, openGlView, new ConnectCheckerRtmp() { @Override public void onConnectionStartedRtmp(@NonNull String s) { } @Override public void onConnectionSuccessRtmp() { } @Override public void onConnectionFailedRtmp(@NonNull String s) { } @Override public void onNewBitrateRtmp(long l) { } @Override public void onDisconnectRtmp() { } @Override public void onAuthErrorRtmp() { } @Override public void onAuthSuccessRtmp() { } }); } @Override protected void onDestroy() { if (USBCameraHelper.getInstance() != null) { USBCameraHelper.getInstance().destory(); } super.onDestroy(); } @Override protected void onStart() { if (USBCameraHelper.getInstance() != null) { USBCameraHelper.getInstance().start(); } super.onStart(); } @Override protected void onStop() { if (USBCameraHelper.getInstance() != null) { USBCameraHelper.getInstance().stop(); } super.onStop(); } } ``` ## 复制不易,欢迎打赏 感谢项目关联的所有开源的大佬们,后面有时间再去一一列出来,复制粘贴完就随手关掉网页都忘记有哪些大佬了。 该库仅提供预览相关功能,如需录制、水印、推流、接入GB28181平台等可联系本人,小的在这里等待各位老板的光临。 再次感谢各位开源的大佬以及给小的赏饭的老板们,祝大家身体健康,财源滚进。 ![contact_me](contact_me.jpg)