录制视频显然要比音频复杂点,那么我们一起看看录制视频又该如何做呢?

  (1)首先,我们肯定要用到摄像头,因此需要在Manifest文件中声明使用权限:

  <uses-permission android:name="android.permission.CAMERA" />
  (2)其次,还要使用一些硬件属性,那还要做额外的声明:

  <uses-feature android:name="android.hardware.camera"/>
  <uses-feature:name="android.hardware.camera.autofocus"/>
  <uses-permission android:name="android.permission.RECORD_AUDIO" />

  (3)第三,当我们在录制的时候,通常都想要看到我们正在拍什么,这就需要预览,而预览需要在一个SurfaceView上实现。

一、设计界面

  1、首先把record.png、stop.png两张图片复制到res/drawable-hdpi文件夹内。

  

  2、布局文件

  打开activity_main.xml文件。

  输入以下代码:

<?xml version="1.0" encoding="utf-8" ?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageButton
android:id="@+id/record"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/record" />
<ImageButton
android:id="@+id/stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/stop" />
<SurfaceView
android:id="@+id/surfaceview"
android:layout_width="300dip"
android:layout_height="400dip" />
</LinearLayout>

二、程序文件

  打开“src/com.genwoxue.recordvideo/MainActivity.java”文件。

  然后输入以下代码:

package com.genwoxue.recordvideo;
import java.io.File;
import java.io.IOException;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.app.Activity;
public class MainActivity extends Activity {
private ImageButton btnRecord=null;
private ImageButton btnStop=null;
private SurfaceView mSurfaceView=null;
private SurfaceHolder mSurfaceHolder=null;
private MediaRecorder recorder=null;
private File myRecAudioFile=null;
private File dir=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSurfaceView = (SurfaceView) findViewById(R.id.surfaceview);
mSurfaceHolder = mSurfaceView.getHolder();
mSurfaceHolder.setKeepScreenOn(true);
mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
btnRecord=(ImageButton)findViewById(R.id.record);
btnStop=(ImageButton)findViewById(R.id.stop);
File defaultDir = Environment.getExternalStorageDirectory();
String path = defaultDir.getAbsolutePath()+File.separator+"V"+File.separator;//创建文件夹存放视频
dir = new File(path);
if(!dir.exists()){
dir.mkdir();
}
recorder = new MediaRecorder();
//开始录制视频
btnRecord.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
recorder();
}
});
//停止录制视频
btnStop.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
recorder.stop();
recorder.reset();
recorder.release();
recorder=null;
}
});
}
public void recorder() {
try {
myRecAudioFile = File.createTempFile("video", ".3gp",dir);//创建临时文件
recorder.setPreviewDisplay(mSurfaceHolder.getSurface());//预览
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);//视频源
recorder.setAudioSource(MediaRecorder.AudioSource.MIC); //录音源为麦克风
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//输出格式为3gp
recorder.setVideoSize(800, 480);//视频尺寸
recorder.setVideoFrameRate(15);//视频帧频率
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);//视频编码
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//音频编码
recorder.setMaxDuration(10000);//最大期限
recorder.setOutputFile(myRecAudioFile.getAbsolutePath());//保存路径
recorder.prepare();
recorder.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}

三、运行结果

第57章、录制视频(从零开始学Android)相关推荐

  1. 第52章,bitmap图像处理(从零开始学android),第52章、Bitmap图像处理(从零开始学Android)...

    1.Drawable → Bitmap public static Bitmap drawableToBitmap(Drawable drawable) { Bitmap bitmap = Bitma ...

  2. 从零开始学android:Android中的基本控件(上)

    从零开始学android:Android中的基本控件(上) 本章内容较多,下面只贴代码,大家只需要贴到自己eclipse里就知道作用^^! View组件简介 Android中的View组件包含了几乎所 ...

  3. CCNA视频----从零开始学CCNA实验视频课程(加强版)-晁海江-专题视频课程

    CCNA视频----从零开始学CCNA实验视频课程(加强版)-22537人已学习 课程介绍         本课程从零开始系统性的演示了CCNA的实验操作,并且在实验操作的同时讲解CCNA对应的理论知 ...

  4. 第88章、系统服务之NOTIFICATION_SERVICE服务(从零开始学Android)

    Notification通知将一个图标(包含一条可选的提示文本信息)填加到系统的状态栏(一般来说,Android手机的状态栏是在顶部,非底部,要注意噢)中,并将一条展开信息添加到通知窗口中.当用户选中 ...

  5. 从零开始学android编程_小白也能学得会!谷歌推出免费的Kotlin和Android开发课程...

    程序员书库(ID:CodingBook) 猿妹编译 链接:https://android-developers.googleblog.com/2020/07/learn-android-and-kot ...

  6. 从零开始学android编程_android初学者的入门秘籍

    大概是去年年底开始接触android 原本是学习嵌入式的我,领导让我看看能不能搞一下这个android APP. 一开始的我懵逼得很... 这android APP 不是得用java写吗??? 现在我 ...

  7. 《微课实战:Camtasia Studio入门精要》——第2章 录制视频 2.1 录制视频基本常识...

    本节书摘来自异步社区<微课实战:Camtasia Studio入门精要>一书中的第2章,第2.1节,作者 于化龙,沈婷婷,郝雨,更多章节内容可以访问云栖社区"异步社区" ...

  8. 第1章、从零开始学Android

    引子 滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 都付笑谈中 --------------------------- ...

  9. 第89章、系统服务之SMS服务(从零开始学Android)

    每逢佳节,中国移动.电信.联通都是偷偷笑的日子,又不知道多少短信费用纳入囊中,尽管微信.QQ.飞信漫天飞,但仍然阻挡不了节日祝福短信的火爆,但群发实在没有意义,你是不是想来一个既个性而又群发呢? 譬如 ...

最新文章

  1. 百度PaddleOCR及云平台OCR API详解及示例
  2. OpenGL延迟着色之二
  3. 结对作业——四则运算
  4. 曹大带我学 Go(8)—— 一个打点引发的事故
  5. 如何将S/4HANA系统存储的图片文件用Java程序保存到本地
  6. 为 Joomla 而生的 Kunena 论坛安装手册
  7. 初始化游戏状态数据二
  8. c# 对象json互相转换_能够将Excel 数据转换成Json格式的实用工具 excel2json
  9. 给wordpress添加留言者操作系统、浏览器和运营商信息
  10. 基于基于jsp+mysql+Spring+mybatis的SSM汽车保险理赔管理系统设计和实现
  11. 渲染科研入门到入土(Chinagraph2020闫令琪老师分享)
  12. 高等数学-考试常用的三角函数公式
  13. 12123 上传照片到文件服务器失败,12123软件上传不了照片怎么回事(教你最合理的上传方法)...
  14. Gluster源代码阅读3--MGMT Xlator
  15. 网页使用中文字体的两种解决方案
  16. python当前运行目录_Python获取运行目录与当前脚本目录的方法
  17. linux物料管理,SAP-PM 工具管理篇之出入库
  18. ios微信微博回调 留在微信
  19. struct与typedef struct的区别
  20. 售价2999元起  华为5G自拍视频旗舰nova7系列强势来袭

热门文章

  1. 微信小程序实现标签栏
  2. Linux基础之-BTRFS文件系统
  3. Standford 机器学习应用的建议及机器学习系统的设计
  4. 圆柱坐标系统中亥姆霍兹方程的解
  5. FSB、BIS和IMF三大国际金融机构
  6. h5ai界面修改_H5ai修改版,带HTML5视频播放器DPlayer,并支持hls切片播放
  7. uni-app小程序授权登陆示例
  8. Sparsity Invariant CNNs
  9. OSChina 周五乱弹 —— 我就和你们不一样了,我是长得很搞笑
  10. 超详细的用户认证、权限、安全原理详解(认证、权限、JWT、RFC 7235、HTTPS、HSTS、PC端、服务端、移动端、第三方认证等等)