Skip to content

elysia-ren/TV-Camera

Repository files navigation

TV简单相机

适用于 Android TV 9.0 (API 28) 及以上 智能电视、电视盒子、投影仪等大屏设备的相机应用。支持 USB 摄像头拍照、录像、实时画质优化,纯遥控器操作。


核心特性

📷 拍照

  • 基于 Camera2 API,自动适配摄像头输出的 YUV_420_888 或 JPEG 格式
  • 精确的 YUV→NV21 转换(正确处理 rowStride / pixelStride)
  • 拍照画面清晰无花屏、无分裂

🎥 录像

  • MP4 封装,H.264 视频编码
  • 音频自动降级:优先 USB 麦克风 → 手机麦克风 → 静音录像
  • 录像中预览继续,按钮状态实时反馈(红点闪烁 + 计时)

⚙ 实时画质优化(OpenCV)

  • 自动白平衡:灰度世界算法,校正偏色
  • 对比度增强 (CLAHE):提升暗部细节,避免过曝
  • 亮度补偿:线性亮度调整
  • 降噪(低/中/高三档):双边滤波,改善低光照画质
  • 锐化(低/中/高三档):增强边缘清晰度
  • 720p 以上自动跳过降噪和锐化,保证流畅度(≥25 FPS)
  • 所有优化支持独立开关,设置自动保存

🖼 内置图库

  • 照片/视频混合网格浏览
  • 视频缩略图显示时长和播放标识
  • 全屏查看照片(左右切换)
  • 完全脱离系统图库,兼容 Android 10+ 分区存储

🎮 纯遥控器操作

  • 方向键导航焦点
  • 确认键拍照 / 录像
  • 返回键退出 / 停止录像
  • 菜单键切换摄像头 / 进入图库
  • 控制栏 3 秒无操作自动隐藏,方向键唤出

💾 智能摄像头记忆

  • 单摄像头:自动进入预览
  • 多摄像头:记住上次选择,下次直接进入
  • 预览界面可通过菜单键随时切换摄像头

🔌 USB 摄像头稳定识别

  • 自动枚举所有可用摄像头(含外接 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_HOMEJAVA_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,画质优化功能自动禁用,拍照/录像/图库功能不受影响。

许可

本项目仅供个人学习与设备适配使用,不包含任何商业授权。使用本软件造成的数据丢失或设备问题请自行承担风险。


祝您的大屏拍摄体验愉快! 📸

About

一个简单的电视拍照App

Resources

Stars

1 star

Watchers

0 watching

Forks

Packages

 
 
 

Contributors