这几天需要搞一个Android视频通话功能,从最简单的视频录制开始,网上例子大多不完整。下面的示例参考过别人的代码,还是拿出来给需要的朋友分享下。

Activity类:VideoActivity

  1. package com.media.Media;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import android.app.Activity;
  5. import android.media.MediaRecorder;
  6. import android.os.Bundle;
  7. import android.os.Environment;
  8. import android.view.SurfaceHolder;
  9. import android.view.SurfaceView;
  10. import android.view.View;
  11. import android.view.View.OnClickListener;
  12. import android.widget.Button;
  13. public class VideoActivity extends Activity {
  14. private File myRecAudioFile;
  15. private SurfaceView mSurfaceView;
  16. private SurfaceHolder mSurfaceHolder;
  17. private Button buttonStart;
  18. private Button buttonStop;
  19. private File dir;
  20. private MediaRecorder recorder;
  21. @Override
  22. public void onCreate(Bundle savedInstanceState) {
  23. super.onCreate(savedInstanceState);
  24. setContentView(R.layout.video);
  25. mSurfaceView = (SurfaceView) findViewById(R.id.videoView);
  26. mSurfaceHolder = mSurfaceView.getHolder();
  27. mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
  28. buttonStart=(Button)findViewById(R.id.start);
  29. buttonStop=(Button)findViewById(R.id.stop);
  30. File defaultDir = Environment.getExternalStorageDirectory();
  31. String path = defaultDir.getAbsolutePath()+File.separator+"V"+File.separator;//创建文件夹存放视频
  32. dir = new File(path);
  33. if(!dir.exists()){
  34. dir.mkdir();
  35. }
  36. recorder = new MediaRecorder();
  37. buttonStart.setOnClickListener(new OnClickListener() {
  38. @Override
  39. public void onClick(View v) {
  40. recorder();
  41. }
  42. });
  43. buttonStop.setOnClickListener(new OnClickListener() {
  44. @Override
  45. public void onClick(View v) {
  46. recorder.stop();
  47. recorder.reset();
  48. recorder.release();
  49. recorder=null;
  50. }
  51. });
  52. }
  53. public void recorder() {
  54. try {
  55. myRecAudioFile = File.createTempFile("video", ".3gp",dir);//创建临时文件
  56. recorder.setPreviewDisplay(mSurfaceHolder.getSurface());//预览
  57. recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);//视频源
  58. recorder.setAudioSource(MediaRecorder.AudioSource.MIC); //录音源为麦克风
  59. recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//输出格式为3gp
  60. recorder.setVideoSize(800, 480);//视频尺寸
  61. recorder.setVideoFrameRate(15);//视频帧频率
  62. recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);//视频编码
  63. recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//音频编码
  64. recorder.setMaxDuration(10000);//最大期限
  65. recorder.setOutputFile(myRecAudioFile.getAbsolutePath());//保存路径
  66. recorder.prepare();
  67. recorder.start();
  68. } catch (IOException e) {
  69. e.printStackTrace();
  70. }
  71. }
  72. }

界面:video.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout
  3. xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:orientation="vertical"
  5. android:layout_width="fill_parent"
  6. android:layout_height="fill_parent">
  7. <SurfaceView android:id="@+id/videoView"
  8. android:visibility="visible"
  9. android:layout_width="320px"
  10. android:layout_height="240px">
  11. </SurfaceView>
  12. <RelativeLayout
  13. android:layout_width="fill_parent"
  14. android:layout_height="wrap_content">
  15. <Button
  16. android:layout_width="wrap_content"
  17. android:layout_height="wrap_content"
  18. android:text="录制"
  19. android:id="@+id/start"/>
  20. <Button
  21. android:layout_width="wrap_content"
  22. android:layout_height="wrap_content"
  23. android:layout_toRightOf="@id/start"
  24. android:text="停止"
  25. android:id="@+id/stop"/>
  26. </RelativeLayout>
  27. </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.media.Media"
  4. android:versionCode="1"
  5. android:versionName="1.0">
  6. <application android:icon="@drawable/rabbit" android:label="@string/app_name">
  7. <activity android:name=".VideoActivity"
  8. android:label="@string/app_name">
  9. <intent-filter>
  10. <action android:name="android.intent.action.MAIN" />
  11. <category android:name="android.intent.category.LAUNCHER" />
  12. </intent-filter>
  13. </activity>
  14. </application>
  15. <uses-sdk android:minSdkVersion="7" />
  16. <uses-permission android:name="android.permission.CAMERA"/>
  17. <uses-permission android:name="android.permission.RECORD_AUDIO"/>
  18. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  19. </manifest>

希望对需要的人有帮助。

http://www.xker.com/page/e2011/0320/100584.html

Android视录视频示例的更多相关文章

  1. 基于 Android 的 3D 视频示例代码

    笔者:Mark Liu 下载样本代码 简单介绍 在Android 中,创建一个可以播放视频剪辑的应用很easy:创建一个採用 3D 图形平面的游戏应用也很easy.可是,创建一个可以在 3D 图形对象 ...

  2. Android实现录屏直播(三)MediaProjection + VirtualDisplay + librtmp + MediaCodec实现视频编码并推流到rtmp服务器

    请尊重分享成果,转载请注明出处,本文来自Coder包子哥,原文链接:http://blog.csdn.net/zxccxzzxz/article/details/55230272 Android实现录 ...

  3. Android 音视频深入 五 完美的录视频(附源码下载)

    本篇项目地址,名字是录视频,求star https://github.com/979451341/Audio-and-video-learning-materials 这一次的代码录视频在各个播放器都 ...

  4. Android录屏命令、Android录Gif、Android录视频

    NoHttp开源地址:https://github.com/yanzhenjie/NoHttp NoHttp具体使用文档已公布,你想知道的全都有,请点我移步! 版权声明:转载请注明本文转自严振杰的博客 ...

  5. Android 音视频深入 四 录视频MP4(附源码下载)

    本篇项目地址,名字是<录音视频(有的播放器不能放,而且没有时长显示)>,求star https://github.com/979451341/Audio-and-video-learnin ...

  6. 最简单的视音频播放示例7:SDL2播放RGB/YUV

    本文记录SDL播放视频的技术.在这里使用的版本是SDL2.实际上SDL本身并不提供视音频播放的功能,它只是封装了视音频播放的底层API.在Windows平台下,SDL封装了Direct3D这类的API ...

  7. 最简单的视音频播放示例6:OpenGL播放YUV420P(通过Texture,使用Shader)

    本文记录OpenGL播放视频的技术.上一篇文章中,介绍了一种简单的使用OpenGL显示视频的方式.但是那还不是OpenGL显示视频技术的精髓.和Direct3D一样,OpenGL更好的显示视频的方式也 ...

  8. Android实现录屏直播(一)ScreenRecorder的简单分析

    http://blog.csdn.net/zxccxzzxz/article/details/54150396 Android实现录屏直播(一)ScreenRecorder的简单分析 Android实 ...

  9. Android开发笔记——视频录制播放常见问题

    本文分享自己在视频录制播放过程中遇到的一些问题,主要包括: 视频录制流程 视频预览及SurfaceHolder 视频清晰度及文件大小 视频文件旋转 一.视频录制流程 以微信为例,其录制触发为按下(住) ...

随机推荐

  1. 【转】Facebook React 和 Web Components(Polymer)对比优势和劣势

    原文转自:http://segmentfault.com/blog/nightire/1190000000753400 译者前言 这是一篇来自 StackOverflow 的问答,提问的人认为 Rea ...

  2. 【转】 Understanding Component-Entity-Systems

    http://www.gamedev.net/page/resources/_/technical/game-programming/understanding-component-entity-sy ...

  3. Smart210---LED驱动

    经过几天的学习,终于linux驱动的基本框架弄清楚了...真的很艰辛,,,不过终于还是熬过来了,虽然还是最基础的,,, 今晚也完成了我第一个linux驱动,,,心里还是有点小兴奋的,哈哈O(∩_∩)O ...

  4. c++学习笔记4:如何写好注释

    1.单行注释一般放在语句的上方: // cout and endl live in the iostream library std::cout << "Hello world! ...

  5. 大数据hadoop入门学习之集群环境搭建集合

    目录: 1.基本工作准备 1.虚拟机准备 2.java 虚拟机-jdk环境配置 3.ssh无密码登录 2.hadoop的安装与配置 3.hbase安装与配置(集成安装zookeeper) 4.zook ...

  6. (理论篇)53个要点提高PHP编程效率

    用单引号代替双引号来包含字符串,这样做会更快一些.因为php会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的"函数"( ...

  7. iOS学习笔记---oc语言第一天

    第一讲 初始类和对象 c语言的超集,允许在oc中使用c语言源代码.编译器兼容c语言程序 具备完善的面向对象特性 包含一个运行时系统 类库丰富 面向对象编程 oop 面向对象语言:c++  java   ...

  8. ZOJ 1067 Color Me Less

    原题链接 题目大意:一道类似于简单图像压缩的题目.给定一个调色板,然后把24位真彩色按照就近原则聚类. 解法:每个像素的色彩都是RGB三个值,相当于三维空间的一个点.所以当一个新的像素进来时,分别和调 ...

  9. JavaWeb学习记录(二十六)——在线人数统计HttpSessionListener监听实现

    一.session销毁控制层代码 public class InvalidateSession extends HttpServlet { public void doGet(HttpServletR ...

  10. Json数据,转换规则,

    JSON数据转换,规则是遇见json 中的{},则是数组[],遇见name:value,则是'key'=>'value', 但是不带键值的数组如['xxxxxx'],json_encode后仍然 ...