我正在使用相机的 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)
我有视频,但有两个问题:
这是一个示例视频
http://www.youtube.com/watch?v=I1Eg2bvrHLM&feature=youtu.be
有谁知道这两个问题的原因是什么吗?可能会告诉我一些解决这个问题的方法,因为我现在完全迷失/困惑了。感谢您的阅读,并感谢任何评论和意见。
我需要加速捕获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 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
我尝试使用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) 应用启动后,我获得了用户使用相机的许可。但是在打开摄像头之前,如果我检查用户是否已授予摄像头许可,即使允许,我也会得到响应为“ 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
我希望高质量的图像显示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) 我正在尝试直接使用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) 我的片段正在尝试启动相机活动,但似乎存在一些相机权限问题,
在调试时,它只持续到代码行以下
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
我已经尝试过这个并且也测试了这个代码。如果我需要从文件浏览器上传,两者都可以正常工作,但我需要可以在文件浏览器或相机之间进行选择。
我可以找到很多 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) 我正在使用"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
android ×10
android-camera ×10
java ×2
react-native ×2
imageview ×1
kotlin ×1
webview ×1
yuv ×1