转:http://blog.csdn.net/peijiangping1989/article/details/7049991

在这里给出自己的一个测试DEMO,里面注释很详细。简单的视频录制功能.

  1. package com.video;
  2. import java.io.IOException;
  3. import android.app.Activity;
  4. import android.content.pm.ActivityInfo;
  5. import android.graphics.PixelFormat;
  6. import android.media.MediaRecorder;
  7. import android.os.Bundle;
  8. import android.view.SurfaceHolder;
  9. import android.view.SurfaceView;
  10. import android.view.View;
  11. import android.view.View.OnClickListener;
  12. import android.view.Window;
  13. import android.view.WindowManager;
  14. import android.widget.Button;
  15. /**
  16. * class name:TestBasicVideo<BR>
  17. * class description:一个简单的录制视频例子<BR>
  18. * PS:实现基本的录制保存文件 <BR>
  19. *
  20. * @version 1.00 2011/09/21
  21. * @author CODYY)peijiangping
  22. */
  23. public class TestBasicVideo extends Activity implements SurfaceHolder.Callback {
  24. private Button start;// 开始录制按钮
  25. private Button stop;// 停止录制按钮
  26. private MediaRecorder mediarecorder;// 录制视频的类
  27. private SurfaceView surfaceview;// 显示视频的控件
  28. // 用来显示视频的一个接口,我靠不用还不行,也就是说用mediarecorder录制视频还得给个界面看
  29. // 想偷偷录视频的同学可以考虑别的办法。。嗯需要实现这个接口的Callback接口
  30. private SurfaceHolder surfaceHolder;
  31. public void onCreate(Bundle savedInstanceState) {
  32. super.onCreate(savedInstanceState);
  33. requestWindowFeature(Window.FEATURE_NO_TITLE);// 去掉标题栏
  34. getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
  35. WindowManager.LayoutParams.FLAG_FULLSCREEN);// 设置全屏
  36. // 设置横屏显示
  37. setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
  38. // 选择支持半透明模式,在有surfaceview的activity中使用。
  39. getWindow().setFormat(PixelFormat.TRANSLUCENT);
  40. setContentView(R.layout.main);
  41. init();
  42. }
  43. private void init() {
  44. start = (Button) this.findViewById(R.id.start);
  45. stop = (Button) this.findViewById(R.id.stop);
  46. start.setOnClickListener(new TestVideoListener());
  47. stop.setOnClickListener(new TestVideoListener());
  48. surfaceview = (SurfaceView) this.findViewById(R.id.surfaceview);
  49. SurfaceHolder holder = surfaceview.getHolder();// 取得holder
  50. holder.addCallback(this); // holder加入回调接口
  51. // setType必须设置,要不出错.
  52. holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
  53. }
  54. class TestVideoListener implements OnClickListener {
  55. @Override
  56. public void onClick(View v) {
  57. if (v == start) {
  58. mediarecorder = new MediaRecorder();// 创建mediarecorder对象
  59. // 设置录制视频源为Camera(相机)
  60. mediarecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
  61. // 设置录制完成后视频的封装格式THREE_GPP为3gp.MPEG_4为mp4
  62. mediarecorder
  63. .setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
  64. // 设置录制的视频编码h263 h264
  65. mediarecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
  66. // 设置视频录制的分辨率。必须放在设置编码和格式的后面,否则报错
  67. mediarecorder.setVideoSize(176, 144);
  68. // 设置录制的视频帧率。必须放在设置编码和格式的后面,否则报错
  69. mediarecorder.setVideoFrameRate(20);
  70. mediarecorder.setPreviewDisplay(surfaceHolder.getSurface());
  71. // 设置视频文件输出的路径
  72. mediarecorder.setOutputFile("/sdcard/love.3gp");
  73. try {
  74. // 准备录制
  75. mediarecorder.prepare();
  76. // 开始录制
  77. mediarecorder.start();
  78. } catch (IllegalStateException e) {
  79. // TODO Auto-generated catch block
  80. e.printStackTrace();
  81. } catch (IOException e) {
  82. // TODO Auto-generated catch block
  83. e.printStackTrace();
  84. }
  85. }
  86. if (v == stop) {
  87. if (mediarecorder != null) {
  88. // 停止录制
  89. mediarecorder.stop();
  90. // 释放资源
  91. mediarecorder.release();
  92. mediarecorder = null;
  93. }
  94. }
  95. }
  96. }
  97. @Override
  98. public void surfaceChanged(SurfaceHolder holder, int format, int width,
  99. int height) {
  100. // 将holder,这个holder为开始在oncreat里面取得的holder,将它赋给surfaceHolder
  101. surfaceHolder = holder;
  102. }
  103. @Override
  104. public void surfaceCreated(SurfaceHolder holder) {
  105. // 将holder,这个holder为开始在oncreat里面取得的holder,将它赋给surfaceHolder
  106. surfaceHolder = holder;
  107. }
  108. @Override
  109. public void surfaceDestroyed(SurfaceHolder holder) {
  110. // surfaceDestroyed的时候同时对象设置为null
  111. surfaceview = null;
  112. surfaceHolder = null;
  113. mediarecorder = null;
  114. }
  115. }

main.xml

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:layout_width="fill_parent"
  3. android:layout_height="fill_parent"
  4. android:orientation="horizontal" >
  5. <LinearLayout
  6. android:layout_width="fill_parent"
  7. android:layout_height="fill_parent"
  8. android:layout_weight="1" >
  9. <SurfaceView
  10. android:id="@+id/surfaceview"
  11. android:layout_width="fill_parent"
  12. android:layout_height="fill_parent" />
  13. </LinearLayout>
  14. <LinearLayout
  15. android:layout_width="fill_parent"
  16. android:layout_height="fill_parent"
  17. android:layout_weight="4"
  18. android:gravity="center"
  19. android:orientation="vertical" >
  20. <Button
  21. android:id="@+id/start"
  22. android:layout_width="fill_parent"
  23. android:layout_height="wrap_content"
  24. android:layout_weight="1"
  25. android:text="Start" />
  26. <Button
  27. android:id="@+id/stop"
  28. android:layout_width="fill_parent"
  29. android:layout_height="wrap_content"
  30. android:layout_weight="1"
  31. android:text="Stop" />
  32. </LinearLayout>
  33. </LinearLayout>

AndroidManifest.xml

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    3. package="com.video"
    4. android:versionCode="1"
    5. android:versionName="1.0" >
    6. <application
    7. android:icon="@drawable/icon"
    8. android:label="@string/app_name" >
    9. <activity
    10. android:label="@string/app_name"
    11. android:name=".TestBasicVideo" >
    12. <intent-filter >
    13. <action android:name="android.intent.action.MAIN" />
    14. <category android:name="android.intent.category.LAUNCHER" />
    15. </intent-filter>
    16. </activity>
    17. </application>
    18. <uses-sdk android:minSdkVersion="8" />
    19. <uses-permission android:name="android.permission.CAMERA" >
    20. </uses-permission>
    21. <uses-permission android:name="android.permission.RECORD_AUDIO" >
    22. </uses-permission>
    23. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
    24. </uses-permission>
    25. </manifest>

转:android 录制视频的Demo的更多相关文章

  1. Android录制视频报错setVideoSize called in a invalid state 1

    录制视频时想获取手机支持的录制视频的分辨率,使用代码如下: List<Camera.Size> videoSize = camera.getParameters().getSupporte ...

  2. Android 录制视频

    Activity代码: package eoe.demo.Media; import java.io.File; import java.io.IOException; import android. ...

  3. android 录制视频方式

    http://www.cnblogs.com/skyseraph/archive/2012/03/31/2427593.html http://bbs.csdn.net/topics/39088448 ...

  4. Android手机录制视频 实时传输(转载)

    最近调研android视频录制.另一部手机实时观看,大致有以下几种思路. 1. android手机充当服务器,使用NanoHTTPD充当服务器,另一部手机或者pc通过输入http://手机的ip:80 ...

  5. Android开发之打开闪光灯录制视频

    Android的SDK在线API上对录制视频的方法.步骤都写得非常清楚,但是如果没有一点思路,写起来也比较式费事.录制视频的全过程要打开闪光灯(可能是因为项目需要,或者特殊原因),则必须按照一定的顺序 ...

  6. Android切换前后置摄像头并录制视频

    项目需要对微信的视频模块也看了一下,在此就对这块进行了一个开发.首先给出效果图 首先给出java代码 /** * RecordActivity.java * 版权所有(C) 2013 * 创建:cui ...

  7. Android 音视频开发(七): 音视频录制流程总结

    在前面我们学习和使用了AudioRecord.AudioTrack.Camera.MediaExtractor.MediaMuxer API.MediaCodec. 学习和使用了上述的API之后,相信 ...

  8. Android自定义view之仿微信录制视频按钮

    本文章只写了个类似微信的录制视频的按钮,效果图如下:             一.主要的功能: 1.长按显示进度条,单击事件,录制完成回调 2.最大时间和最小时间控制 3.进度条宽度,颜色设置 二.实 ...

  9. Android音视频之MediaRecorder音视频录制

    前言: 公司产品有很多地方都需要上传音频视频,今天抽空总结一下音频视频的录制.学习的主角是MediaRecorder类. MediaRecorder类介绍: MediaRecorder类是Androi ...

随机推荐

  1. Openfire开发配置,Openfire源代码配置,OpenFire二次开发配置(eclipse)

    首先去官网把openfire的源码下下来: http://www.igniterealtime.org/downloads/source.jsp 1.下载后放到你的workspace当中,我的woek ...

  2. wchar_t 和 char 之间转换

    vc++2005以后,Visual studio 编译器默认的字符集为Unicode.VC中很多字符处理默认为宽字符wchar_t,如CString的getBuffer(),而一些具体操作函数的输入却 ...

  3. linux 安装Apache----tar.gz文件安装方式(零环境安装)

    一.下载apache源代码 1.下载地址:http://httpd.apache.org/download.cgi  找稳定的最新的版本(Stable Release) 得到文件 httpd-2.4. ...

  4. HDU 2066 一个人的旅行 - from lanshui_Yang

    Problem Description 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰 ...

  5. AspNet上传文件的几个控件

    本文转载:http://www.cnblogs.com/downmoon/archive/2009/02/05/1384931.html 1.AspnetUpload 地址:http://www.as ...

  6. C++的优秀特性3:构造函数和析构函数

    (转载请注明原创于潘多拉盒子) 构造函数和析构函数是C++中再熟悉不过的概念了,几乎每个了解一点C++的人都知道这两个概念是什么意思.一个对象的全部生命期中构造函数和析构函数执行的时机如下: 1. 为 ...

  7. DevExpress 13.2.6源码、安装包、汉化包下载和教程

    DevExpress比DotNetBar控件成熟很多,当然源码是公开的,但是最新版本需要9K多.如果不是土豪,用已经破解的版本或者自己拿源码编译一份就可以了,老外就是这么好. 首先在这里下载然后解压准 ...

  8. linux的webserver配置与管理——创建用户个人主页

    本实验用的是RedHat linux9.0,在虚拟机上进行操作,它已具有相当完好的可视化界面,这样用户会更加easy接受和理解. 首先呢就是虚拟机的相关配置,这个就不说了,当我们安装完系统后,打开终端 ...

  9. 【转】REST on Rails指南

    REST on Rails指南1:理解资源 这是来自http://www.softiesonrails.com的REST简明指南. PART I 在理解REST on Rails之前,有必要先思考一下 ...

  10. 【HTML】Jquery前台传参及接收

    在一些网页应用中,有的时候需要前台之间传递参数,通过JS语法来做一些判断处理. 发送端:(a页面) <a href="b.html?Show=true" id="t ...