• android之多媒体篇(三)


    录像

    Android提供了2种方案去录像。

    方案一:

    最简单的方式就是使用Intents去启动App来帮助你完成。这个方案使你能够指定输出的位置和视频的质量。这方案通常是最好的方法,应该可以用在多种情形下。

    MediaStore.EXTRA_OUTPUT 指定输出的位置。

    MediaStore.EXTRA_VIDEO_QUALITY 0-1之间, 1 质量最高,默认的话是1.

    MediaStore.EXTRA_DURATION_LIMIT 指定最大的录像长度。(秒单位)

    01 private static final int RECORD_VIDEO = 0;
    02  
    03 private void startRecording() {
    04    // Generate the Intent.
    05    Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
    06  
    07    // Launch the camera app.
    08    startActivityForResult(intent, RECORD_VIDEO);
    09 }
    10  
    11 @Override
    12 protected void onActivityResult(int requestCode,
    13                                        int resultCode, Intent data) {
    14    if (requestCode == RECORD_VIDEO) {
    15      VideoView videoView = (VideoView)findViewById(R.id.videoView);
    16      videoView.setVideoURI(data.getData());
    17      videoView.start()
    18    }
    19 }

    方案二:

    使用MediaRecorder类去录音频或者视频。

    你可能需要以下权限:

    1 <uses-permission android:name=”android.permission.RECORD_AUDIO”/>
    2 <uses-permission android:name=”android.permission.RECORD_VIDEO”/>
    3 <uses-permission android:name=”android.permission.CAMERA”/>

    MediaRecorder可以让你指定音频和视频资源,输出文件格式,还指定视频、音频编码器。

    Android 2.2引入配置文件,可以预先定义这些属性配置。

    很像MediaPlayerMediaRecorder管理录制,作为其状态机。这就意味着配置的顺序和管理变得尤为重要。最简单的:

    1.创建一个MediaRecorder

    2.解锁照相机,然后使其与MediaRecorder关联。

    3.指定输入源

    4.选择一个配置文件,或者定义输出格式和指定音频和视频编码器,帧率,输出大小。

    5.选择输出文件

    6.分配一个预览Surface.

    7.准备MediaRecorder录制。

    8.录制

    9.结束录制。

    当你结束录制的时候,记得mediaRecorder.release();

    配置VideoRecorder

    setAudioSourcesetVideoSource方法,可以分别让你指定一个MediaRecorder.AudioSource.*MediaRecorder.VideoSource.*静态常量,来定音频或者视频资源。

    当你选择你的输入源后,你需要去指定要使用的录制配置文件。Android 2.2引入setProfile方法,使用CamcorderProfile类的get方法创建profile,使用CamcorderProfile.Quality_*常量指定录制质量。不是每个设备都支持所有的配置文件,你可以用CamcorderProfile.hasProfile方法去确认可用性:

    1 if (CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_1080P)) {
    2   CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_1080P);
    3   mediaRecorder.setProfile(profile);
    4 }

    作为选择,你可以手动指定录制文件,通过选择输出格式,使用setOutputFormat方法去指定一个MediaRecorder.OutputFormat常量和使用set[audio/video]Encoder方法去指定一个音频或者视频编码,通过MediaPlayer.[Audio/Video]Encoder类。

    例子:

    01 // Unlock the Camera to allow the Media Recorder to own it.
    02 camera.unlock();
    03  
    04 // Assign the Camera to the Media Recorder.
    05 mediaRecorder.setCamera(camera);
    06  
    07 // Configure the input sources.
    08 mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
    09 mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
    10  
    11 // Set the recording profile.
    12 CamcorderProfile profile = null;
    13  
    14 if (CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_1080P))
    15   profile = CamcorderProfile.get(CamcorderProfile.QUALITY_1080P);
    16 else if (CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_720P))
    17   profile = CamcorderProfile.get(CamcorderProfile.QUALITY_720P);
    18 else if (CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_480P))
    19   profile = CamcorderProfile.get(CamcorderProfile.QUALITY_480P);
    20 else if (CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_HIGH))
    21   profile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
    22  
    23 if (profile != null)
    24   mediaRecorder.setProfile(profile);
    25  
    26 // Specify the output file
    27 mediaRecorder.setOutputFile(“/sdcard/myvideorecording.mp4”);
    28  
    29 // Prepare to record
    30 mediaRecorder.prepare();

    注意:setOutputFile方法必须在prepare之前和setOutputFormat之后。否则,会抛出异常。

    Android 4.0引入一个新的技术去改善MediaRecoder的表现,通过减少其启动时间。当你的Activity准备只是去录音频或者视频,你可以使用Camera.Parameters.setRecordingHint方法去告诉照相机你只是想去录音或者录像:

    1 Camera.Parameters parameters = camera.getParameters();
    2 parameters.setRecordingHint(true);
    3 camera.setParameters(parameters);

    控制录制

    1 mediaRecorder.start();

    启动

    当你录完后:

    1 mediaRecorder.stop();
    2  
    3 // Reset and release the media recorder.
    4 mediaRecorder.reset();
    5 mediaRecorder.release();
    6 camera.lock();

    Android 4.0.3引入可以使图像稳定化,通过修改参数:

    1 Camera.Parameters parameters = camera.getParameters();
    2 if (parameters.isVideoStabilizationSupported())
    3   parameters.setVideoStabilization(true);
    4 camera.setParameters(parameters);


    注意:不是所有的照相机设备都支持图像稳定化,所以程序中你可能要先检查下(上例)。

    创建一个延时的视频

    1 // Capture an image every 30 seconds.
    2 mediaRecorder.setCaptureRate(0.03);

    MediaRecorder也必须设置一系列预定义的配置优化。使用setProfile方法,使用QUALITY_TIME_LAPSE_*中的一个配置:

    1 CamcorderProfile profile =
    2    CamcorderProfile.get(CamcorderProfile.QUALITY_TIME_LAPSE_HIGH);
    3  
    4 mediaRecorder.setProfile(profile);
  • 相关阅读:
    IDEA 编辑器如何将tabs 分行显示
    react-native-image-zoom-viewer的使用
    react native ios Linking appstore,用于更新,模拟机操作不了
    将ios的地址和安卓的地址合并生成二维码
    error: Build input file cannot be found: '/Users/zhou/Downloads/IQKeyboardManager-master/IQKeyboardManager/IQToolbar/IQUIView+IQKeyboardToolbar.m'
    react 项目中引入iconfont
    Task :react-native-yunpeng-alipay:verifyReleaseResources FAILED
    react native 支付宝接入,亲测--安卓版
    react native 支付宝接入,亲测
    iOS---------金额转大写
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/3546413.html
Copyright © 2020-2023  润新知