转: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. Proxy代理(AOP实现原理)

    AOP基于动态代理实现:返回代理对象 java.lang.reflect 包Proxy 类,构造代理类.newProxyInstance() 就是创建代理对象的方法. Proxy.newProxyIn ...

  2. 修改SVN账户密码的方法

        Case1:     在Eclipse 使用SVN 的过程中大多数人往往习惯把访问SVN 的用户名密码自动保存起来以便下次自动使用,不要再次手工输入,但是有些时候需要变更密码或者用户名,这时候 ...

  3. 初步认识shell

    言语不多说,直奔主题,lz不善于写文章,只是记录自己学习过程中的点点滴滴. 注意:shell对于字母大小写比较敏感. 打开终端出现:username@hostname$或者root@hostname# ...

  4. How To: Perl TCP / UDP Socket Programming using IO::Socket::INET

    http://www.thegeekstuff.com/2010/07/perl-tcp-udp-socket-programming/ In this article, let us discuss ...

  5. Lazy Loading Images

    Use a blank.gif as the src of images, and include the width and height of the final image. HTML: < ...

  6. CSS Sprites图片处理

    简介: CSS Sprites是一个网页图片处理方式,在国内都叫CSS精灵,css Sprites允许你将一个页面涉及到的所有零星图片都包含到一张大图中去,这样一来,当访问该页面时,载入的图片就不会像 ...

  7. SSI框架中配置log4j

    事实上主要是log4j配置,跟SSI关系不大. web.xml中加入 <context-param> <param-name>log4jConfigLocation</p ...

  8. Windows下编译openssl

    依赖工具: 1.VS 2.perl 编译方法: release: :\> 切换到openssl目录 :\> perl Configure VC-WIN32 no-asm --prefix= ...

  9. JtextField的延时更新

    import java.awt.Container;import java.awt.FlowLayout;import java.awt.event.ActionEvent;import java.a ...

  10. MySQL 调优基础:Linux内存管理 Linux文件系统 Linux 磁盘IO Linux网络

    http://www.cnblogs.com/digdeep/category/739915.html