app、h5自定义取景框,调用摄像头内嵌到网页或app

最近写的项目中有关于智能识图的功能,那么首先为了方便用户体验和完善app功能,我们需要自定义拍摄页面

为了完成这个功能,需要使用一个web的API开发接口:MediaDevices.getUserMedia()

这个API 会返回一个MediaStream,里面包含了请求的媒体类型的轨道。

首先先写一个简单的视频载体

 <video id={'videoTest'}
        playsInline={true}
        style={{width: SCREEN_WIDTH, height:SCREEN_WIDTH,}}/>

然后在进入页面的时候把返回的流媒体赋在这个viedo上

 //获取video,之后作为stream数据的载体
        let video = document.getElementById('videoTest')
        navigator.mediaDevices.getUserMedia({
            video: {
                facingMode: 'environment',//在app上使用后置  后置:’environment‘,前置:’user‘
                width: {ideal:1000},//1000的摄像头分辨率宽
                height:{ideal:1000},//1000的摄像头分辨率高
            },
            audio: false //关闭录音
        }).then((stream)=>{
            video.srcObject = stream
            this.mediaStream = stream
            video.play();
        }).catch((error)=>{
            console.log(error);
        })

到这里为止我们调用电脑的摄像头就已经成功了
请添加图片描述
但是众所周知app的开发如果需要调用设备的一些权限的,那么我们在打包完成之后还需要在Android Studio原生上添加一下权限

添加位置:app=>src=>AndroidManifest.xml

 <uses-permission android:name="android.permission.CAMERA" />

然后再MainActivity中检查app是否有该权限,如果没有就申请权限

在源码中添加以下代码

  private static final int REQUEST_PERMISSIONS_CODE = 1;
    private static final String[] REQUIRED_PERMISSIONS = {Manifest.permission.CAMERA};
    @Override
    protected void onResume() {
        super.onResume();
        // 动态权限检查
        if (!isRequiredPermissionsGranted() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            requestPermissions(REQUIRED_PERMISSIONS, REQUEST_PERMISSIONS_CODE);
        }
    }
    /**
     * 判断我们需要的权限是否被授予,只要有一个没有授权,我们都会返回 false。
     *
     * @return true 权限都被授权
     */
    private boolean isRequiredPermissionsGranted() {
        for (String permission : REQUIRED_PERMISSIONS) {
            if (ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_DENIED) {
                return false;
            }
        }
        return true;
    }

这时候我们打开app就会有这个提示
在这里插入图片描述
要注意navigator.mediaDevices.getUserMedia要在获取权限之后使用

这样我们就可以在我们的拍照需求基础上设计拍摄页面了,拍照功能也只要将某一瞬间的video 画在一个画布上就可以了。如果写的有什么问题欢迎赐教

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值