录像

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);

android之多媒体篇(三)的更多相关文章

  1. android之多媒体篇(一)

    Android 4.0.3(Api Level 15)支持的多媒体格式. 注意:有些设备可能支持其他的文件格式. 1.Audio AAC LC/LTP.HE-AACv1(AAC+).AMR-NB.AM ...

  2. Android核心服务解析篇(三)——Android系统的启动

    从大的方面来说.Android系统的启动能够分为两个部分:第一部分是Linux核心的启动,第二部分是Android系统的启动. 第一部分主要包含系统引导,核心和驱动程序等,因为它们不属于本篇要讲的内容 ...

  3. android之多媒体篇(二)

    管理音频焦点 情景:当你的app隐退到后台,而其他也有播放能力的app浮现在前台,这个时候,你可能要暂停你原有app的播放功能,和解除监听Media Button,把控制权交给前台的APP. 这就需要 ...

  4. Android之实战篇(三)

    先给出我们用到的工具类 1.发送请求的工具类 本实例采用HttpClient与服务器通信,用到了一个工具类对Httpclient进行封装:定义了两个方法来发送请求 getRequest:发送GET请求 ...

  5. 【转】android 电容屏(三):驱动调试之驱动程序分析篇

    关键词:android  电容屏 tp 工作队列 中断 坐点计算  电容屏主要参数平台信息:内核:linux2.6/linux3.0系统:android/android4.0  平台:S5PV310( ...

  6. Android UI开发第三十九篇——Tab界面实现汇总及比较

    Tab布局是iOS的经典布局,Android应用中也有大量应用,前面也写过Android中TAb的实现,<Android UI开发第十八篇——ActivityGroup实现tab功能>.这 ...

  7. Android UI开发第三十篇——使用Fragment构建灵活的桌面

    http://www.lupaworld.com/article-222973-1.html 当我们设计应用程序时,希望能够尽最大限度的适配各种设备,包括4寸屏.7寸屏. 10寸屏等等,Android ...

  8. Android APP压力测试(三)之Monkey日志自动分析脚本

    Android APP压力测试(三) 之Monkey日志自动分析脚本 前言 上次说要分享Monkey日志的分析脚本,这次贴出来分享一下,废话不多说,请看正文. [目录] 1.Monkey日志分析脚本 ...

  9. Android抓包方法(三)之Win7笔记本Wifi热点+WireShark工具

    Android抓包方法(三) 之Win7笔记本Wifi热点+WireShark工具 前言 做前端测试,基本要求会抓包,会分析请求数据包,查看接口是否调用正确,数据返回是否正确,问题产生是定位根本原因等 ...

随机推荐

  1. C# chart绑定数据的方式整理

    C#chart 画图曲线的条数决定是你的数据源也就Series.Series是对象 你动态创建就可以了. 一.数组, List 等简单Collection类型的方式 Series s1= new Se ...

  2. [Papers]NSE, $\p_3u$, Lebesgue space [Penel-Pokorny, AM, 2004]

    $$\bex \p_3\bbu\in L^p(0,T;L^q(\bbR^3)),\quad \frac{2}{p}+\frac{3}{q}=\frac{3}{2},\quad 2\leq q\leq ...

  3. 《Python CookBook2》 第一章 文本 - 过滤字符串中不属于指定集合的字符 && 检查一个字符串是文本还是二进制

    过滤字符串中不属于指定集合的字符 任务: 给定一个需要保留的字符串的集合,构建一个过滤函数,并可将其应用于任何字符串s,函数返回一个s的拷贝,该拷贝只包含指定字符集合中的元素. 解决方案: impor ...

  4. 《零成本实现Web自动化测试--基于Selenium》第三章 Selenium-IDE

    1.简介 Selenium-IDE(集成开发环境)是一种开发selenium测试案例的工具.是一种易用的Firefox插件.你可以通过文字菜单,在当前页面上选择一个UI元素,接着挑选与UI元素相关的s ...

  5. 如何设置适当的ramp-up period值

    如何设置适当的值并不轻易. 首先,假如要使用大量线程的话,ramp-up period 一般不要设置成零. 因为假如设置成零,Jmeter将会在测试的开始就建立全部线程并立即发送访问请求, 这样一来就 ...

  6. 提高Web页面性能的技巧

    现在动辄几兆大小的页面加载量,让性能优化成了不可避免的热门话题.WEB 应用越流畅,用户体验就会越好,继而带来更多的访问量.这也就是说,我们应该反省一下那些过度美化的 CSS3 动画和多重操作的 DO ...

  7. opencv人脸检测分类器训练小结

    这两天在初学目标检测的算法及步骤,其中人脸检测作为最经典的算法,于是进行了重点研究.该算法最重要的是建立人脸检测分类器,因此我用了一天的时间来学习分类器的训练.这方面的资料很多,但是能按照一个资料运行 ...

  8. jackson 注解的使用

    在实体对象上添加 @JsonAutoDetect , 表明对该实体对象序列化成json串. @JsonAutoDetect public class User{ private int id; pri ...

  9. SaltStack安装Redis模块

    安装redis Python Client 下载地址: https://pypi.python.org/simple/redis/ tar -xvf redis-2.8.0.tar.gz cd red ...

  10. [iOS基础控件 - 6.9.2] 静态单元格 QQ功能列表

    使用storyboard设计静态的表格数据   A.实现步骤 1.控制器继承UITableViewController 2.在storyboard中使用TableViewController,删除原来 ...