适用于 Android TV 9.0 (API 28) 及以上 智能电视、电视盒子、投影仪等大屏设备的相机应用。支持 USB 摄像头拍照、录像、实时画质优化,纯遥控器操作。
- 基于 Camera2 API,自动适配摄像头输出的 YUV_420_888 或 JPEG 格式
- 精确的 YUV→NV21 转换(正确处理 rowStride / pixelStride)
- 拍照画面清晰无花屏、无分裂
- MP4 封装,H.264 视频编码
- 音频自动降级:优先 USB 麦克风 → 手机麦克风 → 静音录像
- 录像中预览继续,按钮状态实时反馈(红点闪烁 + 计时)
- 自动白平衡:灰度世界算法,校正偏色
- 对比度增强 (CLAHE):提升暗部细节,避免过曝
- 亮度补偿:线性亮度调整
- 降噪(低/中/高三档):双边滤波,改善低光照画质
- 锐化(低/中/高三档):增强边缘清晰度
- 720p 以上自动跳过降噪和锐化,保证流畅度(≥25 FPS)
- 所有优化支持独立开关,设置自动保存
- 照片/视频混合网格浏览
- 视频缩略图显示时长和播放标识
- 全屏查看照片(左右切换)
- 完全脱离系统图库,兼容 Android 10+ 分区存储
- 方向键导航焦点
- 确认键拍照 / 录像
- 返回键退出 / 停止录像
- 菜单键切换摄像头 / 进入图库
- 控制栏 3 秒无操作自动隐藏,方向键唤出
- 单摄像头:自动进入预览
- 多摄像头:记住上次选择,下次直接进入
- 预览界面可通过菜单键随时切换摄像头
- 自动枚举所有可用摄像头(含外接 USB)
- 自动选择最佳分辨率(优先 1080p → 720p → 480p)
- 支持 YUV_420_888 和 JPEG 双格式降级
| 类别 | 技术 |
|---|---|
| 语言 | Java |
| 最低 API | 28 (Android 9.0) |
| 目标 API | 33 (Android 13) |
| 编译 API | 33 |
| 相机框架 | Camera2 API |
| 图像处理 | OpenCV 4.5.3 (白平衡 / CLAHE / 降噪 / 锐化) |
| 录像编码 | MediaRecorder (H.264 / AAC) |
| 预览 | TextureView (GPU 渲染) |
| 拍照 | ImageReader + 单次捕获 (YUV→JPEG 或 JPEG 直出) |
| 存储 | Android 9: 文件系统 / Android 10+: MediaStore |
| 图库 | RecyclerView 网格 + ViewFlipper 全屏 |
| 依赖 | AndroidX, OpenCV, Material Design |
TVCamera/
├── build.gradle # 项目级构建
├── settings.gradle
├── gradle.properties
├── gradlew / gradle/
├── build.sh # 一键编译脚本
└── app/
├── build.gradle # 模块构建(含 OpenCV 依赖)
└── src/main/
├── AndroidManifest.xml
├── java/com/tvcamera/app/
│ ├── MainActivity.java # 摄像头选择 + 记忆
│ ├── CameraActivity.java # 预览 + 拍照 + 录像 + 画质
│ ├── GalleryActivity.java # 图库(照片/视频)
│ ├── CameraHelper.java # 摄像头枚举
│ ├── CameraPreferences.java # 摄像头记忆
│ ├── QualityPreferences.java # 画质设置持久化
│ ├── ImageProcessor.java # OpenCV 画质优化引擎
│ ├── VideoRecorderHelper.java # 录像辅助(含音频降级)
│ └── YuvToNv21Converter.java # YUV→NV21 转换
├── res/
│ ├── layout/ # 布局文件
│ ├── drawable/ # 背景/按钮/卡片样式
│ └── anim/ # 淡入淡出动画
└── ...
- Android Studio Hedgehog (2023.1.1) 或更高版本
- JDK 17
- Android SDK Platform 33 及 Build-Tools
- 已配置
ANDROID_HOME和JAVA_HOME环境变量
# 在项目根目录执行:
./gradlew assembleDebug生成的 APK 位于 app/build/outputs/apk/debug/app-debug.apk。
也可直接使用 Android Studio 打开项目,点击 Run。
将 APK 通过 U 盘、adb 或网络传输到电视并安装:
adb install app-debug.apk确保电视已开启“开发者选项”和“USB 调试”,或允许安装未知来源应用。
- 单摄像头:自动进入预览,无需选择
- 多摄像头:显示卡片列表,上下选择,确认进入
- 再次打开:自动恢复上次使用的摄像头
| 操作 | 功能 |
|---|---|
| 确认键 | 拍照 |
| 菜单键 | 弹出摄像头切换列表 |
| 返回键 | 停止录像(录像中)/ 退出(非录像中) |
| 方向键 | 唤出控制栏(3秒无操作自动隐藏) |
底部控制栏(从左到右):
- 📷 拍照:拍照并保存到
DCIM/TVCamera - 🎥 录像:点击开始录像(红点闪烁 + 计时),再次点击停止
- ⚙ 画质:打开画质优化设置面板(右侧滑出)
- 🖼 图库:进入内置图库
画质设置面板(遥控器方向键 + 确认键操作):
- 画质优化总开关
- 自动白平衡 / CLAHE / 亮度补偿
- 降噪(关/低/中/高)
- 锐化(关/低/中/高)
- 保存优化后图片(默认关闭)
- 录像时启用优化(默认开启)
- 显示帧率 FPS(调试用)
- 网格浏览:照片和视频混排,视频显示 ▶ 图标和时长
- 确认键:全屏查看照片(视频暂不支持播放)
- 方向键:左右切换照片
- 返回键:退出全屏 / 退出图库
- 菜单键:退出图库返回预览
| 权限 | 用途 | 申请时机 |
|---|---|---|
| CAMERA | 打开摄像头 | 进入预览时 |
| WRITE_EXTERNAL_STORAGE | Android 9 保存照片/视频 | 首次拍照/录像时 |
| READ_EXTERNAL_STORAGE | Android 9 读取图库 | 进入图库时 |
- Android 10+:无需存储权限,通过 MediaStore 读写,符合分区存储规范
- 照片/视频统一保存在
DCIM/TVCamera目录
- 摄像头热插拔:预览中拔掉摄像头,3 秒后自动返回主界面;重新插入后主界面自动刷新列表。
- 格式降级:若摄像头不支持 YUV_420_888,自动降级为 JPEG 模式(预览仍正常,拍照直接保存 JPEG,免去压缩步骤)。
- 画质优化性能:降噪和锐化仅在 720p 及以下分辨率启用,1080p 仅开启白平衡/CLAHE/亮度,确保 ≥25 FPS。
- 录像音频:优先使用摄像头麦克风,不可用时自动降级为静音录像,不会崩溃。
- 设备兼容性:若特定电视对 Camera2 支持不完整,可能导致无法打开摄像头,请先用其他相机应用检测 USB 摄像头是否被系统识别。
- OpenCV 初始化失败:若电视不支持 OpenCV,画质优化功能自动禁用,拍照/录像/图库功能不受影响。
本项目仅供个人学习与设备适配使用,不包含任何商业授权。使用本软件造成的数据丢失或设备问题请自行承担风险。
祝您的大屏拍摄体验愉快! 📸