标签: android-camera

Android MediaCodec 视频颜色错误且播放速度太快

我正在使用相机的 setPreviewCallback 使用 MediaCodec 编码视频。(我按照这个示例使用 Android MediaCodec 从相机编码 H.264)。我对 MediaCodec 使用以下设置:

mediaCodec = MediaCodec.createEncoderByType("video/avc");
MediaFormat mediaFormat = MediaFormat.createVideoFormat("video/avc", 1280, 720);
mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, 8000000);
mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 30);
mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420SemiPlanar);
mediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 5);
mediaCodec.configure(mediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
mediaCodec.start();
Run Code Online (Sandbox Code Playgroud)

我的相机设置是:

Camera.Parameters parameters = mCamera.getParameters();
parameters.setPreviewFormat(ImageFormat.NV21);
parameters.setPictureSize(previewWidth, 1280);
parameters.setPreviewSize(previewWidth, 720);
parameters.setPreviewFrameRate(30);
parameters.setPreviewFpsRange(5000,30000);
mCamera.setParameters(parameters);
Run Code Online (Sandbox Code Playgroud)

我有视频,但有两个问题:

  1. 它的颜色是错误的。
  2. 播放速度太快了。

这是一个示例视频

http://www.youtube.com/watch?v=I1Eg2bvrHLM&feature=youtu.be

有谁知道这两个问题的原因是什么吗?可能会告诉我一些解决这个问题的方法,因为我现在完全迷失/困惑了。感谢您的阅读,并感谢任何评论和意见。

android yuv android-camera android-mediacodec

1
推荐指数
1
解决办法
3012
查看次数

Android camera2加速

我需要加速捕获camera2 API.我试图从谷歌样本构建"android-Camera2Basic"项目.对于来自示例的默认捕获请求:

 if (null == activity || null == mCameraDevice) {
            return;
        }
        // This is the CaptureRequest.Builder that we use to take a picture.
        final CaptureRequest.Builder captureBuilder =
                mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
        captureBuilder.addTarget(mImageReader.getSurface());

        // Use the same AE and AF modes as the preview.
        captureBuilder.set(CaptureRequest.CONTROL_AF_MODE,
                CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
        captureBuilder.set(CaptureRequest.CONTROL_AE_MODE,
                CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);

        // Orientation
        int rotation = activity.getWindowManager().getDefaultDisplay().getRotation();
        captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, ORIENTATIONS.get(rotation));

        CameraCaptureSession.CaptureCallback CaptureCallback
                = new CameraCaptureSession.CaptureCallback() {

            @Override
            public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request,
                                           TotalCaptureResult result) {
                showToast("Saved: " + mFile);
                unlockFocus();
            }
        };

        mCaptureSession.stopRepeating();
        mCaptureSession.capture(captureBuilder.build(), CaptureCallback, …
Run Code Online (Sandbox Code Playgroud)

android android-camera

1
推荐指数
1
解决办法
5044
查看次数

Android camera2镜头内在校准

我下载了一个Android camera2 演示版,运行良好.

现在我想通过查询CameraCharacteristics来获取相机的内在矩阵.

我的代码是

private void setUpCameraOutputs(int width, int height) {
    Activity activity = getActivity();
    CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE);
    try {
        for (String cameraId : manager.getCameraIdList()) {
            CameraCharacteristics characteristics
                    = manager.getCameraCharacteristics(cameraId);
            float[] intrinsic = new float[5];
            intrinsic = characteristics.get(CameraCharacteristics.LENS_INTRINSIC_CALIBRATION);
    //...... leave out the following part
        }
    }
Run Code Online (Sandbox Code Playgroud)

内部函数应该是一个5元素数组,但intrinsic = characteristics.get(CameraCharacteristics.LENS_INTRINSIC_CALIBRATION)返回null.

java android android-hardware android-camera android-camera2

1
推荐指数
1
解决办法
1210
查看次数

拍照总是在onActivityResult(..)中返回RESULT_CANCELED(0)

我尝试使用firebase存储示例应用程序构建存储应用程序,当我拍照时,我总是在onActivityResult(..)中得到RESUL_CANCELED.这是代码:

@AfterPermissionGranted(RC_STORAGE_PERMS)
private void launchCamera() {
    Log.d(LOG_TAG, "launchCamera");

    // Check that we have permission to read images from external storage.
    String perm = Manifest.permission.WRITE_EXTERNAL_STORAGE;
    if (!EasyPermissions.hasPermissions(this, perm)) {
        EasyPermissions.requestPermissions(this, getString(R.string.rationale_storage),
                RC_STORAGE_PERMS, perm);
        return;
    }

    // Choose file storage location, must be listed in res/xml/file_paths.xml
    File externalDir = Environment.getExternalStorageDirectory();
    File file = new File(externalDir, "photos/" + UUID.randomUUID().toString() + ".jpg");

    // Create content:// URI for file, required since Android N
    // See: https://developer.android.com/reference/android/support/v4/content/FileProvider.html
    mFileUri = FileProvider.getUriForFile(this,
           "com.google.firebase.quickstart.firebasestorage.fileprovider", file);

    // Create …
Run Code Online (Sandbox Code Playgroud)

android android-camera firebase-storage

1
推荐指数
1
解决办法
1399
查看次数

如何检查用户是否已在React Native Android中授予相机权限?

应用启动后,我获得了用户使用相机的许可。但是在打开摄像头之前,如果我检查用户是否已授予摄像头许可,即使允许,我也会得到响应为“ false”。

这是我的代码:

PermissionsAndroid.check('camera').then(response => {
            if (response === true){
                //Open scanner
            }
            else if (response === false){
                Alert("Please enable camera permission in device settings.")
            }
        })
Run Code Online (Sandbox Code Playgroud)

android android-camera react-native react-native-camera react-native-android

1
推荐指数
1
解决办法
2265
查看次数

ACTION_IMAGE_CAPTURE 返回图像质量较差的位图,我在哪里可以获得高分辨率图像?

我希望高质量的图像显示ImageView并上传到服务器。我已经在 Internet、StackOverflow 和 GitHub 上搜索过,但找不到答案,也许有人知道如何解决?

protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { //work android
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
    imageReturnedIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);//try

    if (resultCode == RESULT_OK ) {// work every android than need click OK
      //working
        Uri selectedImage = imageReturnedIntent.getData();//convert to for bitmap that can send
        Bundle extras = imageReturnedIntent.getExtras();//finish converting and copy the image
        bitmap = extras.getParcelable("data");//receive image to bitmap
        imageView.setImageBitmap(bitmap);
Run Code Online (Sandbox Code Playgroud)

onCreate

btnCamera.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            //intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); …
Run Code Online (Sandbox Code Playgroud)

android imageview android-camera android-camera-intent

1
推荐指数
1
解决办法
5093
查看次数

有意启动前置摄像头

我正在尝试直接使用Intent. 下面是我的代码——

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
            intent.putExtra("android.intent.extras.CAMERA_FACING", android.hardware.Camera.CameraInfo.CAMERA_FACING_FRONT);

            intent.putExtra("android.intent.extras.LENS_FACING_FRONT", 1);
            intent.putExtra("android.intent.extra.USE_FRONT_CAMERA", true);
        }
Run Code Online (Sandbox Code Playgroud)

我的清单文件:--

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="some.package">
    <uses-permission android:name="android.permission.INTERNET" />
    <!--
         The ACCESS_COARSE/FINE_LOCATION permissions are not required to use
         Google Maps Android API v2, but you must specify either coarse or fine
         location permissions for the 'MyLocation' functionality. 
    -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-feature android:name="android.hardware.camera" android:required="false" />
    <uses-feature android:name="android.hardware.camera.front" android:required="false" /> …
Run Code Online (Sandbox Code Playgroud)

java android android-camera samsung-mobile android-camera2

1
推荐指数
1
解决办法
305
查看次数

调用相机应用程序(权限拒绝:启动 Intent)

我的片段正在尝试启动相机活动,但似乎存在一些相机权限问题,

在调试时,它只持续到代码行以下

startActivityForResult(callCameraApplicationIntent, CAMERA_PIC_REQUEST);

Run Code Online (Sandbox Code Playgroud)

下面是 logcat 结果

java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE flg=0x3 cmp=android/com.android.internal.app.ResolverActivity clip={text/uri-list U:content://com.example.tc.provider/external_files/Pictures/photo_saving_app/IMAGE_20191205_070208.jpg} (has extras) } from ProcessRecord{8920903 18662:com.example.tc/u0a343} (pid=18662, uid=10343) with revoked permission android.permission.CAMERA
        at android.os.Parcel.readException(Parcel.java:2016)
        at android.os.Parcel.readException(Parcel.java:1962)
        at android.app.IActivityManager$Stub$Proxy.startActivity(IActivityManager.java:4452)
        at android.app.Instrumentation.execStartActivity(Instrumentation.java:1617)
        at android.app.Activity.startActivityForResult(Activity.java:4551)
        at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:767)
Run Code Online (Sandbox Code Playgroud)

以下是似乎需要的代码部分。


        if (Build.VERSION.SDK_INT > 21) { //use this if Lollipop_Mr1 (API 22) or above
            Intent callCameraApplicationIntent = new Intent();
            callCameraApplicationIntent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);

            // We give some instruction to the intent to save the image
            File photoFile = null;

            try { …
Run Code Online (Sandbox Code Playgroud)

android android-manifest android-camera android-camera-intent android-permissions

1
推荐指数
1
解决办法
2351
查看次数

Android Webview 文件和相机上传 - Kotlin

我已经尝试过这个并且也测试了这个代码。如果我需要从文件浏览器上传,两者都可以正常工作,但我需要可以在文件浏览器或相机之间进行选择。

我可以找到很多 Java 示例来执行此操作,但我找不到使用 Kotlin 完成的工作版本。下面是我当前的webview 文件上传器代码:

活动结果:

        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
        {
            if(requestCode == REQUEST_SELECT_FILE){
                if(uploadMessage != null){
                    uploadMessage?.onReceiveValue(WebChromeClient.FileChooserParams.parseResult(resultCode,data))
                    uploadMessage = null
                }
            }
        }else if(requestCode == FILECHOOSER_RESULTCODE){
            if(mUploadMessage!=null){
                var result = data?.data
                mUploadMessage?.onReceiveValue(result)
                mUploadMessage = null
            }
        }else{
            Toast.makeText(this,"Failed to open file uploader, please check app permissions.",Toast.LENGTH_LONG).show()
            super.onActivityResult(requestCode, resultCode, data)
        }
Run Code Online (Sandbox Code Playgroud)

设置WebChrome客户端:

 // For 3.0+ Devices (Start)
            // onActivityResult attached before constructor
            fun openFileChooser(uploadMsg : ValueCallback<Uri>, acceptType:String) {
                mUploadMessage = uploadMsg
                val i …
Run Code Online (Sandbox Code Playgroud)

android webview android-camera android-camera-intent kotlin

1
推荐指数
1
解决办法
6136
查看次数

react-native-image-picker launchCamera 在 android 中不起作用

我正在使用"react-native-image-picker": "^3.0.1"本机来捕获图像。但我在 android 9 中打开相机时出错。

我有错误:

{"errorCode": "others", "errorMessage": "This library does not require Manifest.permission.CAMERA, if you add this permission in manifest then you have to obtain the same."}
Run Code Online (Sandbox Code Playgroud)

这是我的代码

{"errorCode": "others", "errorMessage": "This library does not require Manifest.permission.CAMERA, if you add this permission in manifest then you have to obtain the same."}
Run Code Online (Sandbox Code Playgroud)

android android-camera react-native react-native-image-picker

1
推荐指数
1
解决办法
3187
查看次数