Git Product home page Git Product logo

cameraview's Introduction

JCameraView(1.1.9)  

使用方法

  • Gradle依赖: compile 'cjt.library.wheel:camera :1.1.9'
  • 引用源码 :  clone源码后 引入lib -> camera
  • 尝试运行 :  导入源码 运行cameraapplication这个model(!!!)
  • 扫描二维码:  apk比较旧

Download API 14+

这是一个模仿微信拍照的Android开源控件

  • 点击拍照

  • 10s的视频大概1.9M左右

  • 长按录视频(视频长度可设置)

  • 长按录视频的时候,手指上滑可以放大视频

  • 录制完视频可以浏览并且重复播放

  • 前后摄像头的切换

  • 可以设置小视频保存路径

示例截图

image image image

GIF图

image

使用步骤(Android Studio)

添加下列代码到 module gradle

最新版本(1.1.9)更新内容:

compile 'cjt.library.wheel:camera:1.1.9'
//添加闪关灯,自定义左右按钮图标资源

如果获取依赖失败则添加下列代码到 project gradle

allprojects {
    repositories {
        jcenter()
        maven {
            url 'https://dl.bintray.com/cjt/maven'
        }
    }
}

旧版本

compile 'cjt.library.wheel:camera:1.1.6'
//修复BUG
compile 'cjt.library.wheel:camera:1.1.3'
//fix bug
compile 'cjt.library.wheel:camera:1.1.1'
//fix bug

compile 'cjt.library.wheel:camera:1.0.9'
//fix bug

compile 'cjt.library.wheel:camera:1.0.5'
//浏览界面能使用两根手指进行缩放
//切换摄像头的按钮会根据手持手机方向进行旋转
//修复内存泄露

compile 'cjt.library.wheel:camera:1.0.4'
//换回VideoView
//摄像上滑放大

compile 'cjt.library.wheel:camera:1.0.2'
//TextureView替换VideoView
//根据手机拍照方向旋转图片(仅后置摄像头)

compile 'cjt.library.wheel:camera:1.0.0'
//代码重构
//修复频繁切换摄像头崩溃的问题
//修复获取不到supportedVideoSizes的问题
//可以设置最长录像时间
//修复按钮错乱BUG

compile 'cjt.library.wheel:camera:0.1.9' //修复BUG

compile 'cjt.library.wheel:camera:0.1.7' //修复无法获取最佳分辨率导致的StackOverFlowError

compile 'cjt.library.wheel:camera:0.1.6' //修复部分机型切换前置摄像头崩溃问题和添加动态权限申请

compile 'cjt.library.wheel:camera:0.1.2' //修复部分机型不支持缩放导致崩溃

compile 'cjt.library.wheel:camera:0.1.1' //修复切换前置摄像头崩溃BUG

compile 'cjt.library.wheel:camera:0.1.0' //修复BUG

compile 'cjt.library.wheel:camera:0.0.9' //添加保持屏幕常亮唤醒状态
<uses-permission android:name="android.permission.WAKE_LOCK"/> //需新增权限

compile 'cjt.library.wheel:camera:0.0.8' //添加手动对焦,对焦提示器,修复切换到前置摄像头崩溃的BUG

compile 'cjt.library.wheel:camera:0.0.7' //修复了长按录视频崩溃的BUG和兼容到Android4.0

compile 'cjt.library.wheel:camera:0.0.3' 

布局文件中添加

//1.0.0+
<com.cjt2325.cameralibrary.JCameraView
    android:id="@+id/jcameraview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:duration_max="10000"
    app:iconMargin="20dp"
    app:iconSize="30dp"
    app:iconSrc="@drawable/ic_camera_enhance_black_24dp"/>

(1.0.0+)

属性 属性说明
iconSize 右上角切换摄像头按钮的大小
iconMargin 右上角切换摄像头按钮到上、右边距
iconSrc 右上角切换摄像头按钮图片
iconLeft 左边按钮图片资源(1.1.9+)
iconRight 右边按钮图片资源(1.1.9+)
duration_max 设置最长录像时间(毫秒)

AndroidManifest.xml中添加权限

<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />

Activity全屏设置

if (Build.VERSION.SDK_INT >= 19) {
    View decorView = getWindow().getDecorView();
    decorView.setSystemUiVisibility(
        View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_FULLSCREEN
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
} else {
    View decorView = getWindow().getDecorView();
    int option = View.SYSTEM_UI_FLAG_FULLSCREEN;
    decorView.setSystemUiVisibility(option);
}

初始化JCameraView控件

//1.1.1
jCameraView = (JCameraView) findViewById(R.id.jcameraview);

//设置视频保存路径
jCameraView.setSaveVideoPath(Environment.getExternalStorageDirectory().getPath() + File.separator + "JCamera");

//设置只能录像或只能拍照或两种都可以(默认两种都可以)
jCameraView.setFeatures(JCameraView.BUTTON_STATE_BOTH);

//设置视频质量
jCameraView.setMediaQuality(JCameraView.MEDIA_QUALITY_MIDDLE);

//JCameraView监听
jCameraView.setErrorLisenter(new ErrorLisenter() {
     @Override
     public void onError() {
          //打开Camera失败回调
          Log.i("CJT", "open camera error");
     }
     @Override
     public void AudioPermissionError() {
          //没有录取权限回调
          Log.i("CJT", "AudioPermissionError");
     }
});

jCameraView.setJCameraLisenter(new JCameraLisenter() {
    @Override
    public void captureSuccess(Bitmap bitmap) {
        //获取图片bitmap
        Log.i("JCameraView", "bitmap = " + bitmap.getWidth());
    }
    @Override
    public void recordSuccess(String url,Bitmap firstFrame) {
        //获取视频路径
        Log.i("CJT", "url = " + url);
     }
    //@Override
    //public void quit() {
    //    (1.1.9+后用左边按钮的点击事件替换)
    //}
});
//左边按钮点击事件
jCameraView.setLeftClickListener(new ClickListener() {
    @Override
    public void onClick() {
        CameraActivity.this.finish();
    }
});
//右边按钮点击事件
jCameraView.setRightClickListener(new ClickListener() {
    @Override
        Toast.makeText(CameraActivity.this,"Right",Toast.LENGTH_SHORT).show();
    }
});

JCameraView生命周期

@Override
protected void onResume() {
    super.onResume();
    mJCameraView.onResume();
}
@Override
protected void onPause() {
    super.onPause();
    mJCameraView.onPause();
}

APK Demo

扫码下载

image

二维码显示不出请点击 下载Demo

LICENSE

Copyright 2017 CJT2325

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

cameraview's People

Contributors

cjt2325 avatar vellrya avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cameraview's Issues

三星前置镜头预览异常,拍照奔溃

三星的部分手机,比如去年的A系列SM-A7108,切换为前置摄像头的会导致预览之后大概一半。
然后这时候拍照,会奔溃。报 “y + height must be <= bitmap.height()”

具体位置为 com/yue/customcamera/activity/CameraActivity.java:440
也就是 saveBitmap = Bitmap.createBitmap(saveBitmap, 0, 0, screenWidth, screenWidth * 4/3);这行代码
应该就是首先预览比例和实际比例不符导致的

触摸对焦代码

private static Rect calculateTapArea(float x, float y, float coefficient, Camera.Size previewSize) {
        float focusAreaSize = 300;
        int areaSize = Float.valueOf(focusAreaSize * coefficient).intValue();
        int centerX = (int) (x / previewSize.width - 1000);
        int centerY = (int) (y / previewSize.height - 1000);

        int left = clamp(centerX - areaSize / 2, -1000, 1000);
        int top = clamp(centerY - areaSize / 2, -1000, 1000);

        RectF rectF = new RectF(left, top, left + areaSize, top + areaSize);

        return new Rect(Math.round(rectF.left), Math.round(rectF.top), Math.round(rectF.right), Math.round(rectF
                .bottom));
    }

你好,这一部分代码 int centerX = (int) (x / previewSize.width - 1000);不需要加*2000么?即 int centerX = (int) (x / previewSize.width *2000 - 1000);

打开黑屏

手机:oppo R9 5.1
把你的权限判断都注释掉了,开始进入还是会黑屏,切换摄像头会变好

长按摄像,弹出录音权限提示!!!动画会自动执行完成

在真机ViVo Y66 android6.0上,首次运行,长按摄像的时候,会弹出录音权限提示框,这时候提示框会覆盖界面的最上层啊,然后点击授权,松开了手指,动画也会执行完duration。
当我去选择权限时,控件无法捕获ACTION_DOWN、ACTION_MOVE、ACTION_UP和ACTION_CANCEL事件,不能及时消除动画效果。
请问大神,这个有没有办法去解决啊。。。

android 7.0 手机 第一次运行的时候闪退 第二次运行就正常

android 7.0 手机 第一次运行的时候闪退 第二次运行就正常
targetSdkVersion 25的情况下
前置摄像头点了没反映
测试版本 1.0.9

E/AndroidRuntime: FATAL EXCEPTION: Thread-19
java.lang.RuntimeException: Fail to connect to camera service
at android.hardware.Camera.(Camera.java:571)
at android.hardware.Camera.open(Camera.java:415)
at com.cjt2325.cameralibrary.CameraInterface.openCamera(CameraInterface.java:253)
at com.cjt2325.cameralibrary.CameraInterface.doOpenCamera(CameraInterface.java:247)
at com.cjt2325.cameralibrary.JCameraView$6.run(JCameraView.java:572)

相机界面的关闭按钮可以换图标吗

﹀ 可以替换成 × 吗 。
还有如果我依赖了最新的1.0.5的库,会报下面的错
D:\studiocode\Um\recordtest\build\intermediates\res\merged\debug\values-v24\values-v24.xml
Error:(3) Error retrieving parent for item: No resource found that matches the given name 'android:TextAppearance.Material.Widget.Button.Borderless.Colored'.
Error:(4) Error retrieving parent for item: No resource found that matches the given name 'android:TextAppearance.Material.Widget.Button.Colored'.
Error:Execution failed for task ':recordtest:processDebugResources'.

com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'D:\Android\sdk\build-tools\23.0.3\aapt.exe'' finished with non-zero exit value 1

后边我换了1.0.2的库就没有报这样的错了。是我这边配置的问题吗?

设置最大录制时间

我在camera包中找了半天,感觉就是修改CaptureButton类中的duration,可是不管设置为多少,最后拍下来的视频也就十秒左右,不能再多了,这是不是有点问题?还是说我自己没有找到呢?求解答!!谢谢!!

感觉挺不错的

只是有一些卡顿的问题,比如拍照的时候按钮先变化,然后等一会图片才显示出来

Err when MediaRecorder.start

      java.lang.RuntimeException: start failed.
                  at android.media.MediaRecorder._start(Native Method)
                  at android.media.MediaRecorder.start(MediaRecorder.java:914)
                  at com.cjt2325.cameralibrary.JCameraView.startRecord(JCameraView.java:401)
                  at com.cjt2325.cameralibrary.JCameraView.access$1000(JCameraView.java:31)
                  at com.cjt2325.cameralibrary.JCameraView$1.record(JCameraView.java:132)
                  at com.cjt2325.cameralibrary.CaptureButton$RecordRunnable.run(CaptureButton.java:357)
                  at android.os.Handler.handleCallback(Handler.java:739)
                  at android.os.Handler.dispatchMessage(Handler.java:95)
                  at android.os.Looper.loop(Looper.java:145)
                  at android.app.ActivityThread.main(ActivityThread.java:6918)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at java.lang.reflect.Method.invoke(Method.java:372)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

RuntimeException takePicture failed

1 android.hardware.Camera.native_getParameters(Native Method)
2 android.hardware.Camera.getParameters(Camera.java:1888)
3 com.cjt2325.cameralibrary.JCameraView.setStartPreview(JCameraView.java:293)
4 com.cjt2325.cameralibrary.JCameraView.surfaceCreated(JCameraView.java:412)

设备机型
谷歌 NEXUS 5 真机测试

系统版本
Android 5.1.1,level 22

ROM
google/hammerhead

CPU架构
armeabi-v7a

建议:添加视频压缩

初步测试结果,使用ffmpeg做出和楼主同样的界面,加入视频压缩,视频可缩小一倍以上并画质不变。
但是ffmpeg过大,希望楼主给出一个不需要添加ffmpeg库的视频压缩的方案,

前置摄像头翻转

private int determineDisplayOrientation() {
Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
Camera.getCameraInfo(SELECTED_CAMERA, cameraInfo);

    // Clockwise rotation needed to align the window display to the natural position
    int rotation = ((Activity)getContext()).getWindowManager().getDefaultDisplay().getRotation();
    int degrees = 0;

    switch (rotation) {
        case Surface.ROTATION_0: {
            degrees = 0;
            break;
        }
        case Surface.ROTATION_90: {
            degrees = 90;
            break;
        }
        case Surface.ROTATION_180: {
            degrees = 180;
            break;
        }
        case Surface.ROTATION_270: {
            degrees = 270;
            break;
        }
    }

    int displayOrientation;

    // CameraInfo.Orientation is the angle relative to the natural position of the device
    // in clockwise rotation (angle that is rotated clockwise from the natural position)
    if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
        // Orientation is angle of rotation when facing the camera for
        // the camera image to match the natural orientation of the device
        displayOrientation = (cameraInfo.orientation + degrees) % 360;
        displayOrientation = (360 - displayOrientation) % 360;
    } else {
        displayOrientation = (cameraInfo.orientation - degrees + 360) % 360;
    }

// mCamera.setDisplayOrientation(mImageParameters.mDisplayOrientation);
return displayOrientation;
}

最后调用:
camera.setDisplayOrientation(determineDisplayOrientation());

因为是翻转camera的 生成的bitmap对象要翻转回来。

我是来提问题的。
我的nexus6 系统n; 一打开是黑屏的 点击屏幕就报错:
Exception in MessageQueue callback: handleReceiveCallback (JCameraView.java:643)
要点击翻转前置摄像头才能预览摄像头。

大神我测出来一个bug

在录制视频的时候,频繁的按住松开会提示录制时间过短,几次之后就报如下error,不知道是不是我手机的问题。
Process: com.example.gridviewtest, PID: 3948
java.lang.RuntimeException: stop failed.
at android.media.MediaRecorder.stop(Native Method)
at com.cjt2325.cameralibrary.CameraInterface.stopRecord(CameraInterface.java:311)
at com.cjt2325.cameralibrary.JCameraView$2$2.run(JCameraView.java:245)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5019)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)

发现拍照后的取消按钮显示有问题

我下载库下来使用,发现有时候拍照结束后,左边的取消按钮圆中间的那个黑色的勾,概率性的出现显示问题。 这个是动画太快,没有画笔没用反应过来么?

RuntimeException getParameters failed (empty parameters)

1 android.hardware.Camera.native_getParameters(Native Method)
2 android.hardware.Camera.getParameters(Camera.java:1996)
3 com.cjt2325.cameralibrary.JCameraView.startRecord(JCameraView.java:462)
4 com.cjt2325.cameralibrary.JCameraView.access$900(JCameraView.java:31)
5 com.cjt2325.cameralibrary.JCameraView$1.record(JCameraView.java:143)
6 com.cjt2325.cameralibrary.CaptureButton$RecordRunnable.run(CaptureButton.java:349)

设备机型
三星 SM-A8000 真机测试

系统版本
Android 6.0.1,level 23

ROM
samsung/a8ltezc

CPU架构
armeabi-v7a

java.lang.RuntimeException autoFocus failed

1 android.hardware.Camera.native_autoFocus(Native Method)
2 android.hardware.Camera.autoFocus(Camera.java:1347)
3 com.cjt2325.cameralibrary.JCameraView.onFocusBegin(JCameraView.java:563)
4 com.cjt2325.cameralibrary.JCameraView.onTouchEvent(JCameraView.java:591)

设备机型
三星 SM-A8000 真机测试

系统版本
Android 6.0.1,level 23

ROM
samsung/a8ltezc

CPU架构
armeabi-v7a

拍摄视频按住不放直到录制时间到了要弹到视频播放界面,会挂掉,在播放视频界面长按刚才那个位置也会挂掉

拍摄视频按住不放直到录制时间到了要弹到视频播放界面,会挂掉,在播放视频界面长按刚才那个位置也会挂掉,错误信息如下:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.hardware.Camera.setParameters(android.hardware.Camera$Parameters)' on a null object reference
at com.cjt2325.cameralibrary.JCameraView$1.scale(JCameraView.java:187)
at com.cjt2325.cameralibrary.CaptureButton.onTouchEvent(CaptureButton.java:272)
at android.view.View.dispatchTouchEvent(View.java:8614)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2523)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2175)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2523)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2175)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2523)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2175)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2523)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2175)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2523)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2175)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2523)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2175)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2523)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2175)
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2530)
at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1786)
at android.app.Activity.dispatchTouchEvent(Activity.java:2819)
at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2487)
at android.view.View.dispatchPointerEvent(View.java:8820)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4756)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4613)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4103)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4156)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4122)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4259)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4130)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4316)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4103)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4156)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4122)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4130)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4103)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6565)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6539)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6492)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6745)
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:176)
at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:6683)
at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:6771)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:800)
at android.view.Choreographer.doCallbacks(Choreographer.java:603)
at android.view.Choreographer.doFrame(Choreographer.java:570)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:786)
at android.os.Handler.handleCallback(Handle

录制视频时候,时间过短,会崩。请问怎么解决

java.lang.RuntimeException: stop failed.
android.media.MediaRecorder.native_stop(Native Method)
崩溃日志如上!网上找说加mediaRecorder.setOnErrorListener(null);这些都无效。请问知道解决办法吗?
qq:285601517.麻烦知道的和我联系。谢谢

下载的apk打开黑屏

下载的demo和我自己集成使用都存在
直接启动app黑屏(权限没问题)
点击前后置切换按钮可以显示画面
或者按Home键再切回来也可以显示画面

手机华为荣耀V8 android7.0

切换前置摄像头不好使

三星A5 android版本4.4
切换前置摄像头时相机卡住不动 ,再次点击切换 就不卡了 但是还是 后置摄像头

Android6.0以上机型上遇到没有预览的情况,已解决

由于android6.0以上需要动态申请权限,调用此段代码会到时Activity的onPause调用,从而导致JCameraView类中的mCamera为null,所以当surfaceCreated执行时mCamera为null,导致无法预览。这里把JCameraView类中的onresume方法中的setStartPreview方法注释去掉即可

TextureView doesn't support displaying a background drawable

用25的sdk编译会出现这样的问题。
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.hardware.Camera.takePicture(android.hardware.Camera$ShutterCallback, android.hardware.Camera$PictureCallback, android.hardware.Camera$PictureCallback)' on a null object reference
at com.camera.CameraInterface.takePicture(CameraInterface.java:220)
at com..camera.JCameraView$2.takePictures(JCameraView.java:220)
at com.camera.CaptureLayout$2.takePictures(CaptureLayout.java:149)
at com.camera.CaptureButton.handlerUnpressByState(CaptureButton.java:162)
at com.camera.CaptureButton.onTouchEvent(CaptureButton.java:148)

在Android5.1及以下版本的手机上无法预览

我测试使用的手机是魅蓝3(android5.1)和华为荣耀PE-CL00(android4.4.2)
点击进入之后后置摄像头的预览画面是黑屏的,需要调用一下切换摄像头按钮,切换成前置摄像头才可以看到前置摄像头的预览画面,再切换回后置摄像头,也可以看到后置摄像头的预览画面了。

查看

我的为什么拍完不能查看呢?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.