[java] view plain copy print ?
  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

[html] view plain copy print ?
  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

[html] view plain copy print ?
  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>

更多相关文章

  1. 【流媒體】Android 实时视频采集—MediaRecoder录制
  2. Android App Bundle (Android新的应用发布格式)
  3. 第三部分:Android 应用程序接口指南---第一节:应用程序组件---第六
  4. 完整安卓 Android开发视频教程共10季,迅雷快传免费下载
  5. Android本地视频播放器开发--视频解码
  6. android视频录制MediaStore.ACTION_VIDEO_CAPTURE
  7. android新闻应用、应用锁、小说阅读、短视频APP等源码
  8. 麦子学院Android应用开发工程师视频教程 共18章

随机推荐

  1. could not get batchedbridge make sure
  2. android动态布局方法总结
  3. Android(安卓)自定义 地图 室内
  4. 库克黑 Windows 和 Android
  5. Android开发~点击其它控件弹出软键盘
  6. android获取屏幕长宽,status bar高度,设置
  7. Android多媒体技术之博客收集
  8. Android(安卓)代码混淆
  9. Android(安卓)Activity的生命周期
  10. android EventBus3.1.1使用