android 录像机,android 录像机

一直都做camera 录像功能其实知道的很少,以前也是迷迷糊糊知道怎么写个video,今天测试了一下,各种问题。问题来源首先是对于SDK的阅读不够仔细。 实践的比较少。 其实所谓的录像 就是两个类的结合 一个是Camera 一个是MediaRecorder 这两个类搞好了,轻松

一直都做camera 录像功能其实知道的很少,以前也是迷迷糊糊知道怎么写个video,今天测试了一下,各种问题。问题来源首先是对于SDK的阅读不够仔细。

实践的比较少。

其实所谓的录像 就是两个类的结合 一个是Camera 一个是MediaRecorder 这两个类搞好了,轻松搞定。我用最简洁的代码完成录制功能。

代码在后面给出下载地址。

如果代码在你的手机上运行有问题,可能有以下几种可能。

1,保存路径那里可能有问题,因为我拿的机子是山寨机。

你可以更改getName()函数来更改你的存储路径。

2,mCamcorderProfile的获取有问题,你可以添加判断,参考

CamcorderProfile的SDK 来获取这个实例。

第一部首先要让camera处于预览状态。

SDK上写的很明显

先给出,如果要往SD卡上录制文件 还需要 另外两个权限

android:name="android.permission.RECORD_AUDIO">

android:name="android.permission.WRITE_EXTERNAL_STORAGE">

在此感谢http://blog.csdn.net/lissdy/article/details/7039332 。为我提供了思路。

To take pictures with this class, use the following steps:

Obtain an instance of Camera from open(int).

Get existing (default) settings with getParameters().

If necessary, modify the returned Camera.Parameters object

and call setParameters(Camera.Parameters).

If desired, call setDisplayOrientation(int).

Important: Pass a fully initialized SurfaceHolder to setPreviewDisplay(SurfaceHolder).

Without a surface, the camera will be unable to start the preview.

Important: Call startPreview() to

start updating the preview surface. Preview must be started before you can take a picture.

上面六条为google SDK 上 进入到预览的过程。

下面开始录制部分的分析

Obtain and initialize a Camera and start preview as described above.

Call unlock() to allow the media process

to access the camera.

Pass the camera to setCamera(Camera).

See MediaRecorder information about video recording.

When finished recording, call reconnect() to

re-acquire and re-lock the camera.

If desired, restart preview and take more photos or videos.

Call stopPreview() and release() as

described above.

一开始我出现了很多问题 在于没有对这段话进行认真的分析。

看第二条 unlock() 这个函数的功能是让通过使用这个函数让别的进程可以访问camera。没有调用的话,会出现以下问题

02-01 10:25:08.251: E/MediaRecorder(5545): start failed: -19 然后start fail了

看一下SDK对于unlock ()的解释

Unlocks the camera to allow another process to access it. Normally, the camera is locked to the process with an active Camera object until release() is called. To allow rapid handoff between processes, you can call this method to release the camera temporarily

for another process to use; once the other process is done you can call reconnect() to reclaim the camera.

释放camera 允许其他进程使用。一般来说,照相机是被锁定到实例化后的Camera对象的,除非release()被调用,为了进程间的快速切换,你可以调用该方法来暂时释放camera,待另一个进程使用完成后你可以通过调用reconnect()方法来收回Camera。

此时便是这个MediaRecorder要使用进程 所以要解锁。

看第三条 setCamera(Camera)

Sets a Camera to use for recording. Use this function to switch quickly between preview and capture mode without a teardown

of the camera object.unlock()should

be called before this. Must call before prepare().

设置一个用于录制的Camera ,使用该方法可以快速在预览和捕捉视频模式间快速切换(不用重新获取一个Camera实例) unlock()必须在这个方法前被调用,而这个方法必须在MediaRecorder.prepare()前调用。

然后便是关于录制设置的了

test.jsp?url=http%3A%2F%2Fimg.my.csdn.net%2Fuploads%2F201304%2F18%2F1366274118_4379.gif&refer=http%3A%2F%2Fblog.csdn.net%2Fshen332401890%2Farticle%2Fdetails%2F8819564

看到没这个图

reset()

setAudioSource()

setVideoSource()

setOutputFormat()

setAudioEncoder()

setVideoEncoder()

setOutputFile()

setVideoSize()

setVideoFrameRate()

setPreviewDisplay()

prepare()

start()//开始录制

stop()//停止录制

这个没什么说的只要你的参数选择正确就OK

下面我要说的是另一个类

因为MediaRecorder中有一个方法

setProfile(CamcorderProfileprofile) Uses

the settings from a CamcorderProfile object for recording.

设置参数用的

但是它都决定哪些参数呢?

看一下SDK对于这个东西的理解

Retrieves the predefined camcorder profile settings for camcorder applications. These settings are read-only.

The compressed output from a recording session with a given CamcorderProfile contains two tracks: one for audio and one for video.

Each profile specifies the following set of parameters:

The file output format

Video codec format

Video bit rate in bits per second

Video frame rate in frames per second

Video frame width and height,

Audio codec format

Audio bit rate in bits per second,

Audio sample rate

Number of audio channels for recording.

那怎么获取这个对象呢 举个简单的例子

CamcorderProfile

mCamcorderProfile = CamcorderProfile.get(CameraInfo.CAMERA_FACING_BACK, CamcorderProfile.QUALITY_LOW);

CamcorderProfile.xxxxx 你可以换成别的对应不同的数据。 但是这里返回的对象可能为空,所以做好其他的处理准备,这里我没有特殊处理。

然后看一下setProfile()这个函数

Uses

the settings from a CamcorderProfile object for recording. This method should be called after the video AND audio sources are set,

and

before setOutputFile(). If a time lapse CamcorderProfile is used, audio related source or recording parameters are ignored.

使用这个类来设置录像的参数,这个方法必须在

setAudioSource() ,setVideoSource() 之后调用,但是必须在setOutPutFile之前调用。如果你需要延时拍照 ,请参看CamCorderProfile这个类的SDK 内容。

然后就开始录制了

setPreviewDisplay()

prepare()

start()//开始录制

结束录制stop方法 这时候请注意 因为你释放了camera 所以你要重新获取

上面录制过程有说明When finished recording, callreconnect()to

re-acquire and re-lock the camera.

关于reconnect()在上面说过了这里就不解释了。

最后记得释放资源 release()

下面就没啥说的了。

源码下载链接

下载代码的链接稍后提供 http://download.csdn.net/detail/shen332401890/5272982

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349160.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java命令行界面(第21部分):航空公司2

本系列文章的第21篇关于Java中解析命令行参数的文章的重点是Airline 2库。 Airline 2的GitHub项目页面描述了该库,“ Airline是一个Java库,提供了基于注释的框架来解析命令行界面。” 该页面进入状态:航空公司“既支持简单的单个命令&#xf…

android中进度条的使用,android的进度条使用

android的进度条1、实现的效果2、布局代码先写一个my_browser.xml文件 存放WebViewandroid:layout_width"fill_parent"android:layout_height"fill_parent"android:orientation"vertical" >android:id"id/webView"android:layout_w…

应用服务器web服务器_最受欢迎的应用服务器

应用服务器web服务器这是本系列的第二篇文章,我们将发布有关Java安装的统计数据。 使用的数据集来自免费的Plumbr安装,在过去六个月中,我们总共收集了1,024个不同的环境。 该系列的第一篇文章分析了基础-运行JVM的操作系统,是32位…

如何在Java 8中将Lambda表达式转换为方法引用?

如果您使用Java 8进行编码,那么您会知道使用方法引用代替lambda表达式会使您的代码更具可读性,因此建议尽可能使用方法引用替换lambda表达式,但是,最大的问题是,您如何查找是否可以用方法引用替换lambda? 是…

最大化窗口设置_打开表格总是默认窗口最小化?适用Word、PPT等其他应用

今天有小哥哥说每天早上上班打开第一个表格时,这样显示;打开第二个表时是这样显示;每次打开第二个表后点最大化再打开其他的表才正常显示为最大化的状态。其实,这只是表格的默认打开方式改变了,我们改正过来就好了。在…

html5块元素代码,html5 区块与内联div 与span html块级元素(示例代码)

HTML 和 可以通过 和 将 HTML 元素组合起来。HTML 块元素大多数 HTML 元素被定义为块级元素或内联元素。编者注:"块级元素"译为 block level element,"内联元素"译为 inline element。块级元素在浏览器显示时,通常会以新…

html页面js遍历listview,javascript实现的listview效果

javascript实现的listview效果更新时间:2007年04月28日 00:00:00 作者:#oContainer {width: 600px;height: 500px;border: 1px solid menu;margin: 0px;padding: 0px;overflow: hidden;}a {color: black;text-decoration: none;}a:hover {color: red;t…

Apache Ignite本机持久性,简要概述

通过将数据的工作集放入系统内存中,内存中方法可以达到极高的速度。 当所有数据都保存在内存中后,处理使用传统旋转磁盘引起的问题的需求就消失了。 例如,这意味着无需维护数据的其他缓存副本并管理它们之间的同步。 但是这种方法还有一个缺点…

Java命令行界面(第23部分):Rop

Rop库在其主页上被描述为“用Java编写的轻量级命令行选项解析器”。 Rop的“简介”还指出:“ Rop的设计目的是最小化同时方便,并涵盖了大多数常见的命令行解析用例。” 这篇文章是本系列中第23篇有关解析Java命令行参数的文章 ,重点是Rop。 …

Java 9,Jigsaw,JPMS和模块:个人探索

Java 9由于Jigsaw项目而延迟了很多次,您可能会听到很多关于模块,模块化和其他内容的信息,那么,它的全部含义是什么? 模块化到底是什么,模块化平台是什么意思? Java平台模块系统(JPMS…

仪征市第二中学计算机老师,静心倾听花自开 ——仪征市第二中学徐丞老师

原标题:静心倾听花自开 ——仪征市第二中学徐丞老师徐丞老师是我校一名优秀的青年教师。自2004年从教以来,他满怀对教育事业的真诚,立足本职,默默耕耘,在平凡中成就着不平凡。在教育教学过程中,徐丞老师始终…

智慧物业小程序_刷脸支付+电商小程序+智慧酒店营销方案

我们这边刷脸支付电商小程序智慧酒店行业解决方案,支付宝微信订房小程序,芝麻信用免押住,数字化经营发券引流,未来酒店:0押金 0房费 退房扣款,不占用资金,用户增长信用分,线上订房小程序&#x…

# 字符串从右往左查找_字符串匹配(搜索,查找)算法

(一)前言所谓的字符串匹配就是在一个长字符串(可称文本T)中找一个短字符串(可称模式P),看长字符串中是否存在短字符串,若存在则返回出现的第一个位置,若不存在则返回一个标记。字符串搜索算法有很多,比较知名的自然是大名鼎鼎Knut…

html5按钮样式具有子项目,如何使用HTML5+css3制作出12种常用的按钮开关样式(附完整代码)...

现如今前端网页的开发越来越注重设计感,这些设计感更体现在细节处,今天向大家具体介绍一下各式各样的开关按钮是如何使用HTML5css3制作出来的,希望可以帮到大家。使用HTML5css3制作按钮开关的原理根据设计的要求填充各种颜色。按钮开关的形状…

Java命令行界面(第17部分):jw-options

JavaWorld文章处理Java中的命令行参数: Matthias Laux博士关闭的案例介绍了一个基于Java的简单库,用于处理命令行参数 ,在本文中我将其称为jw-options 。 被引用的文章提供了有关为何在构造Options类时做出某些设计决策的背景信息。 本文的“…

便捷式计算机无线功能按钮,TP-Link TL-MR13U便携式无线路由器Client模式设置

本文介绍了TP-Link TL-MR13U便携式无线路由器,在“客户端模式(Client)”下的设置方法。TL-MR13U工作在“客户端模式(Client)”时,主要作用是用来接收无线WiFi信号,把无线WiFi信号转换为有线网络,实现让台式电脑上网。TP-Link TL-M…

Java命令行界面(第6部分):JOpt简单

JOpt Simple的主页将这个基于Java的库称为“用于解析命令行选项的Java库,例如您可能传递给调用javac的Java库,”该Java库试图“使用POSIX getopt()的命令行选项语法)和GNU getopt_long() 。” 这…

计算机c盘哪些东西可以清理,细说电脑c盘哪些文件可以删除

有些网友反映,自己看C盘里的文件太多了,电脑又太卡,情急之下就把里面的东西删掉了,现在系统都不能用了。为了避免大家再入这个坑,我给大家讲一下哪些是C盘里的无用文件,并且删除后不会影响系统使用C盘是指电…

软件测试度量计算方法有哪些,软件测试度量(三)

进度差异趋势6.4.3 范围变化(SC)这个指标指出如何固定测试范围。下面总范围 以前的范围 新范围,如果范围扩大的话总范围 以前的范围 - 新范围,如果范围缩小的话一个发布版本范围变化趋势7、结论度量是评估的重要组成部分以及任何业务改进的基础。是应…

使用带有OAuth的Spring Security保护资源

1.简介 在本教程中,我们将研究如何使用Spring Security和OAuth来基于路径模式( / api / ** )保护服务器上的管理资源。 我们配置的另一个路径模式( / oauth / token )将帮助已配置的授权服务器生成访问令牌。 请注意&a…