android之多媒体篇(三)

录像

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

方案一:

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

MediaStore.EXTRA_OUTPUT 指定输出的位置。

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

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

01private static final int RECORD_VIDEO = 0;
02 
03private 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
12protected 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方法去确认可用性:

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

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

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

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

控制录制

1mediaRecorder.start();

启动

当你录完后:

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

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

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


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

创建一个延时的视频

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

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

1CamcorderProfile profile =
2   CamcorderProfile.get(CamcorderProfile.QUALITY_TIME_LAPSE_HIGH);
3 

 

4mediaRecorder.setProfile(profile);

转载于:https://www.cnblogs.com/Free-Thinker/p/3546413.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值