转: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. 学习C++的一些问题总结

    C++ 问题 (一) int main() { int i,j,m,n; i=8; j=10; m=++i+j++;  //++i是先递加再使用,j++是先使用再递加,故:9+10=19 n=++i+ ...

  2. (1)html开头解说与案例演示

    看完后也可以参考http://www.cnblogs.com/csxiaoyu/p/5228889.html http://www.cnblogs.com/zfc2201/p/5429252.html ...

  3. 关于form.submit()不能提交表单的错误原因

    来源:http://www.ido321.com/948.html 直接上代码把: 1: <div id="register"> 2: <h4>会员注冊&l ...

  4. jQuery Mobile与QUI框架的异曲同工之处

    最近一直在研究jQuery Mobile框架,这是jQuery的官方移动版UI框架,专门用来开发手机与平板电脑方面的应用.结果越来越觉得它和我的QUI框架的开发思路非常相似,很多地方都有异曲同工之妙. ...

  5. cdoj 15 Kastenlauf dfs

    Kastenlauf Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/3 De ...

  6. CSS样式如何解决IE浏览器不同版本的兼容问题

    如果你想让浏览器是固定的IE6版本,那么你做网页的时候在<head>后面加上一句话: <meta http-equiv="X-UA-Compatible" con ...

  7. Spring MVC 3.0 请求转发和重定向

    首先看一下如何获得request对象.session对象: 普通的Controller类,示例代码如下: @Controller @RequestMapping(value = "user& ...

  8. poj 1222 EXTENDED LIGHTS OUT(位运算+枚举)

    http://poj.org/problem?id=1222 题意:给一个确定的5*6放入矩阵.每一个格子都有一个开关和一盏灯,0表示灯没亮,1表示灯亮着.让你输出一个5*6的矩阵ans[i][j], ...

  9. Swift中的问号?和感叹号!

    Swift语言使用var定义变量,但和别的语言不同,Swift里不会自动给变量赋初始值,也就是说变量不会有默认值,所以要求使用变量之前必须要对其初始化.如果在使用变量之前不进行初始化就会报错: var ...

  10. Center OS mongodb安装

    一.下载        1.#cd /usr/local/src     2.#wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2. ...