【问题标题】:Expanded camera view in android?android中的扩展相机视图?
【发布时间】:2011-06-15 05:28:54
【问题描述】:

我在我的应用程序中使用的相机视图与本机相机不同,例如,本机相机视图如下所示,

但我的应用程序中的视图不一样,我使用 Surfaceview 用于我的自定义相机和媒体记录器来捕获视频,在布局中我使用框架布局,

<com.cdr.Vio.CamcorderView android:id="@+id/camcorder_preview" android:clickable="true" android:focusable="true" android:layout_height="wrap_content" android:layout_width="wrap_content"></com.cdr.Vio.CamcorderView>

....

<Button android:id="@+id/widget34" android:background="@drawable/camrecord"
    android:layout_height="60dp" android:layout_width="60dp"
    android:layout_gravity="right" android:layout_marginRight="20dp">
</Button>
<Button android:id="@+id/widget33" android:background="@drawable/stoprecord"
    android:layout_gravity="right" android:layout_height="60dp"
    android:layout_width="60dp" android:layout_marginTop="-60dp"
    android:layout_marginRight="20dp">
</Button>

我尝试了具有预定义屏幕高度和屏幕宽度的视图,但它似乎又有些拉伸了,这是我拉伸的相机视图,

如果有人知道这个问题,我该如何解决。

谢谢。

【问题讨论】:

    标签: android android-layout


    【解决方案1】:

    最后,我通过设置 videEncodingBitRate、AudioEncodingBitRate、AudioSamplingRate ...等找到了在 android 2.1 中录制高质量视频的代码。使用此方法,您可以设置任何您想要提供高质量视频的视频属性。

    关于设置高质量和低质量参数,请参阅此页面,

    http://www.andgps.com/20110410/camcorderprofile-predefined-camcorder-profile-settings-for-camcorder-applications

    我使用基础版本 android 2.1 生成高质量视频的代码如下所示。

    recorder = new MediaRecorder();
    Method[] methods = recorder.getClass().getMethods();
    
    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
    recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    recorder.setVideoFrameRate(24);
    recorder.setVideoSize(720, 480);
    
    for (Method method : methods) {
        try {
            if (method.getName().equals("setAudioChannels")) {
                method.invoke(recorder, String.format("audio-param-number-of-channels=%d", 1));
            } else if (method.getName().equals("setAudioEncodingBitRate")) {
                method.invoke(recorder, 12200);
            } else if (method.getName().equals("setVideoEncodingBitRate")) {
                method.invoke(recorder, 3000000);
            } else if (method.getName().equals("setAudioSamplingRate")) {
                method.invoke(recorder, 8000);
            } else if (method.getName().equals("setVideoFrameRate")) {
                method.invoke(recorder, 24);
            }
        } catch (IllegalArgumentException e) {
    
            e.printStackTrace();
        } catch (IllegalAccessException e) {
    
            e.printStackTrace();
        } catch (InvocationTargetException e) {
    
            e.printStackTrace();
        }
    }
    
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
    

    【讨论】:

      【解决方案2】:

      看起来纵横比已经消失了。 尝试更改相机的预览分辨率。

      在摄像头参数上调用setPreviewSize,在摄像头设备上设置摄像头参数。重新启动预览。

      编辑:添加代码

      mCameraDevPara.setPreviewSize(PREVIEW_WIDTH, PREVIEW_HEIGHT);
      mCameraDev.setParameters(mCameraDevPara);
      mMediaRecoder.setCamera(mCameraDev);
      

      PREVIEW_WIDTH 和PREVIEW_HEIGHT 应该是您要设置的预览分辨率的宽度和高度。

      【讨论】:

      • 如何设置 MediaRecorder 的预览大小
      • 您需要在Camera对象上设置预览大小,然后通过setCamera方法将相机对象传递给MediaRecorder。简而言之,您可以针对特定摄像机对象设置预览分辨率,然后将该摄像机对象传递给媒体记录器。还要确保您在 xml 中定义的表面视图具有与预览分辨率相同的宽度和高度。
      • 我已经添加了代码,首先尝试使用标准分辨率,如VGA [640x480],这应该保持纵横比,但如果设备屏幕更大,它可能不会填满设备的屏幕比VGA。希望对您有所帮助。
      • 我按照你说的添加了,但是当开始录制 recorder.start() 时,它显示以下错误 06-15 16:20:49.862: ERROR/AndroidRuntime(10837): java.lang.IllegalStateException 06- 15 16:20:49.862:错误/AndroidRuntime(10837):在 android.media.MediaRecorder.start(本机方法)
      • 奇怪,你能用getPreferredPreviewSizeForVideo返回的大小吗?还要将预览尺寸设置为与您要录制的视频尺寸相同的纵横比。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-21
      • 1970-01-01
      相关资源
      最近更新 更多