ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

react-native-vision-camera 性能调优:帧率稳定 60fps、暗光照片更干净

react-native-vision-camera 性能调优:帧率稳定 60fps、暗光照片更干净 react-native-vision-camera 性能调优帧率稳定 60fps、暗光照片更干净【免费下载链接】react-native-vision-camera A powerful, high-performance React Native Camera library.项目地址: https://gitcode.com/GitHub_Trending/re/react-native-vision-camera打开相机页 3 秒还在转圈预览只有 24fps 左右暗光照片噪点糊成一片——在 react-native-vision-camera v5 里这些问题大多不是设备不够强而是约束没写对。先把概念对上v5 换了架构不再有device.formats列表让你手动挑格式而是由CameraSession根据你的意图自动协商出一套能跑通的配置。性能调优的重点从选对格式变成了把约束写对。对象职责依赖关系CameraDevice逻辑摄像头设备由getCameraDevice(...)从设备列表选出CameraSession协商并管理整条管线输入 device outputs constraintsCameraOutput一条数据流预览/照片/视频/帧挂到 session 上各占一路管线Constraint表达协商意图如{ fps: 60 }由 session 解析为具体配置CameraSessionConfig协商结果实际 fps、像素格式等通过onSessionConfigSelected回调返回相机页打开慢先让设备简单起来限制 physicalDevices 到单镜头三摄逻辑设备要同时初始化多颗物理镜头isActive{true}后等第一帧的时间明显变长。只选广角时启动路径最短import { useCameraDevices, getCameraDevice } from react-native-vision-camera export function useBackCamera() { const devices useCameraDevices() return getCameraDevice(devices, back, { physicalDevices: [wide-angle], }) }代价失去超广角/长焦镜头之间的平滑变焦切换。只拍 1x 的场景完全无感需要 0.5x~2x 变焦的才需要放开多镜头。预览帧率怎么调用约束表达意图固定 fps但想清楚分辨率代价{ fps: 60 }会让协商器去找支持 60fps 的格式同一颗镜头的 1200 万像素档通常只给 30fps所以请求 60fps 可能被悄悄降级到 1080pCamera device{device} outputs{[previewOutput, photoOutput]} constraints{[ { fps: 30 }, ]} isActive /30fps 高分辨率是更稳的组合只有确认当前分辨率档支持 60fps 时才写 60否则约束会被回退。预览与录像分开约束同一个 session 里预览和录像流可以各自约束const constraints [ { fps: 60 }, { videoStabilizationMode: standard }, ] satisfies Constraint[]预览要的是跟手录像要的是稳定如果预览发闷把稳定档位从cinematic换成low-latency代价是防抖强度下降。用 onSessionConfigSelected 确认实际配置约束是意图不是硬性要求协商不满足时会选最接近的、不会报错所以必须回看结果Camera device{device} outputs{[previewOutput]} constraints{[{ fps: 60 }]} onSessionConfigSelected{(config) { console.log(resolved fps:, config.selectedFPS, binned:, config.isBinned) }} isActive /config.selectedFPS才是实际协商出的帧率和请求值对不上时说明当前分辨率下这颗镜头根本给不到 60fps。暗光照片发糊binned 与 HDR 各管一件事binned进光量换细节暗光糊往往因为用的是全分辨率 unbinned 读取。让协商器选合并像素的格式const constraints [ { binned: true }, ] satisfies Constraint[]binning 把相邻像素合成一个单像素进光量翻倍噪声明显下降代价是空间细节不如全分辨率白天拍特写时不要开。photoHDR只在大光比场景开有强逆光或明暗反差大的场景让照片输出开 HDRconst constraints [ { photoHDR: true }, ] satisfies Constraint[]代价拍摄耗时更长多帧合成出片等待会变明显适合作为可选开关而不是默认常开。多路输出时内存与掉帧只接当前页面真正用的 output每个 output 都是独立管线带宽、内存和功耗各占一份。只做拍照就只挂照片输出const photoOutput usePhotoOutput() const previewOutput usePreviewOutput() Camera device{device} outputs{[previewOutput, photoOutput]} isActive /页面里没有录像需求时别接CameraVideoOutput哪怕以后会用。isActive 是停会话不是拆管线isActive{false}只停CameraSession设备与 output 连接保留回前台再 start 比整体重建快得多const [isActive, setIsActive] useState(false) useEffect(() { const sub AppState.addEventListener(change, (s) setIsActive(s active)) return () sub.remove() }, [])适用App 频繁切后台的场景注意 stop 后预览会黑屏回前台需等第一帧。配置速查表场景关键配置预期收益注意事项预览流畅度{ fps: 30 } 1080p 目标帧率稳定60fps 可能被协商回退先确认分辨率档暗光画质{ binned: true }进光量翻倍、噪声下降损失细节白天特写别开逆光大光比{ photoHDR: true }高光阴影都保住拍摄耗时增加出片变慢录像防抖{ videoStabilizationMode: standard }画面稳定裁切视场、有缓冲延迟预览防抖{ previewStabilizationMode: low-latency }预览不糊稳定强度弱于 cinematic 档启动速度physicalDevices: [wide-angle]出第一帧更快失去多镜头平滑变焦多路 output 竞争{ resolutionBias: photoOutput }在前照片分辨率优先顺序即优先级视频会被压低踩过的坑问请求 60fps实测只有 30fps答协商失败不报错选最接近的即可。看onSessionConfigSelected里的selectedFPS多半是分辨率太高降一档或接受 30。问resolutionBias和photoHDR同时写冲突了答约束是意图协商器挑最接近不是全部满足。顺序表达优先级把更重要的约束写在前面。问切后台回来重开相机比重建慢答约束和连接都还在stop 只是暂停会话。直接isActive切回 true别销毁重建 output。【免费下载链接】react-native-vision-camera A powerful, high-performance React Native Camera library.项目地址: https://gitcode.com/GitHub_Trending/re/react-native-vision-camera创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表