Android 录制视频

Activity代码:

package eoe.demo.Media;

import java.io.File;
import java.io.IOException;

import android.app.Activity;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;public class VideoActivity extends Activity {private File myRecAudioFile;private SurfaceView mSurfaceView;private SurfaceHolder mSurfaceHolder;private Button buttonStart;private Button buttonStop;private File dir;private MediaRecorder recorder;

@Overridepublic void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.video);
  mSurfaceView = (SurfaceView) findViewById(R.id.videoView);
  mSurfaceHolder = mSurfaceView.getHolder();
  mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
  buttonStart=(Button)findViewById(R.id.start);
  buttonStop=(Button)findViewById(R.id.stop);
  File defaultDir = Environment.getExternalStorageDirectory();
  String path = defaultDir.getAbsolutePath()+File.separator+"V"+File.separator;//创建文件夹存放视频  dir = new File(path);
  if(!dir.exists()){
    dir.mkdir();
  }
  recorder = new MediaRecorder();

  buttonStart.setOnClickListener(new OnClickListener() {
@Override
  public void onClick(View v) {
    recorder();
  }
});

buttonStop.setOnClickListener(new OnClickListener() {
@Override
   public void onClick(View v) {
    recorder.stop();
    recorder.reset();
    recorder.release();
    recorder=null;
   }
  });
}public void recorder() {try {
  myRecAudioFile = File.createTempFile("video", ".3gp",dir);//创建临时文件  recorder.setPreviewDisplay(mSurfaceHolder.getSurface());//预览  recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);//视频源  recorder.setAudioSource(MediaRecorder.AudioSource.MIC); //录音源为麦克风  recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//输出格式为3gp  recorder.setVideoSize(800, 480);//视频尺寸  recorder.setVideoFrameRate(15);//视频帧频率  recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);//视频编码  recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//音频编码  recorder.setMaxDuration(10000);//最大期限  recorder.setOutputFile(myRecAudioFile.getAbsolutePath());//保存路径  recorder.prepare();
  recorder.start();
} catch (IOException e) {
  e.printStackTrace();
    }
   }
}

布局代码:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:orientation="vertical"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent">
    <SurfaceView android:id="@+id/videoView"
      android:visibility="visible"
      android:layout_width="320px"
      android:layout_height="240px">
    </SurfaceView>

    <RelativeLayout
      android:layout_width="fill_parent"
      android:layout_height="wrap_content">
    <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="录制"
      android:id="@+id/start"/>
    <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_toRightOf="@id/start"
      android:text="停止"
      android:id="@+id/stop"/>
    </RelativeLayout>
    </LinearLayout>

AndroidManifest.xml:

   <!-- 授予该程序录制声音的权限 -->
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <!-- 授予该程序使用摄像头的权限 -->    
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
    <!-- 授予使用外部存储器的权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

时间: 2024-10-06 00:38:45

Android 录制视频的相关文章

Android录制视频分段保存的探究

录制视频需要分段保存,可以从系统源码考虑,看了以下一些代码: framework/av/media/libstagefright/MPEG4Writer.cpp package/apps/Camera/src/com/android/camera/actor/VideoActor.java 主要从MPEG4Writer.cpp中的kMax32BitFileSize 和入手,如下,修改单个文件最大容量为56M(0x3800000),发现利用系统Camera录像时,到达阀值后会提示"已达到大小上限&

Android录制视频

我们一般直接从摄像头和麦克风取数据,经过编码,保存为文件.android的视频录制需要使用到MediaRecorder,MediaRecorder除了可以用于录制音频,还可用于录制视频. 效果图如下图所示: 一个为录制过程中,可以看到屏幕上方的录制时间显示,后一个为停止录制视频. 然后录制好的视频可以在手机的SD卡中找到,如下图所示: 视频录制步骤: 1) 调用MediaRecorder 对象的setVideoEncoder().setVideoEncodingBitRate(intbitRat

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

录制视频时想获取手机支持的录制视频的分辨率,使用代码如下: List<Camera.Size> videoSize = camera.getParameters().getSupportedVideoSizes(); Iterator<Camera.Size> itos = videoSize.iterator(); while (itos.hasNext()) { Camera.Size curSize = itos.next(); int curSupporSize = cur

Android 录制视频时,在视频右下角添加时间水印,达到监控录像的效果

录制视频时,在视频右下角添加时间水印,达到监控录像的效果,如下图: 实现步骤如下: 1.制作12张图片,分别是数字0-9,冒号和横折.首先用PS做成png24格式,最好是黑底白字(在代码中将黑色忽略). 2.将上面制作好的12张png图片转成256色的bmp位图,可以使用windows自带的画图程序打开,然后另存为. 3.使用Bmp2c将第2步得到的256色bmp图片,转成c数组. 4.将第3步得到的c数组放到头文件tchip_digital_data.h里. 5.修改frameworks/av

Android(java)学习笔记144:Android音视频录制类MediaRecorder用法举例

Android语音录制可以通过MediaRecorder和AudioRecorder.MediaRecorder本来是多媒体录制控件,可以同时录制视频和语音,当不指定视频源时就只录制语音(默认录制语言):AudioRecorder只能录制语音.二者录制的区别在于,MediaRecorder固定了语音的编码格式,具体平台支持类型可以在http://developer.android.com/guide/appendix/media-formats.html这里查看,而且使用时指定输出文件,在录制的

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

Android的SDK在线API上对录制视频的方法.步骤都写得非常清楚,但是如果没有一点思路,写起来也比较式费事.录制视频的全过程要打开闪光灯(可能是因为项目需要,或者特殊原因),则必须按照一定的顺序进行开关,毕竟容易出错.要实现录制的同时开启闪光灯也不难,官方API给出了一个大体的步骤.因为要采集点视频数据,临时写了个简单的Demo学习下,必要时再深度开发. 首先在工程中的AndroidManifest.xml中添加权限声明,因为要使用到摄像头,故需要添加Camera的相关权限,另外还需要写S

Android实现视频录制

安卓实现视频录制,有两种方法,一种是调用自带的视频功能,一种是使用MediaRecorder. 每种方法都有自己的优缺点.接下来,把两种方法的代码写出来. 先说第一种方法,也是最简单的方法,那就是直接调用系统的视频功能. 代码很简单: //这是跳转至录制视频界面的按钮监听 class VideoListener implements OnClickListener {   @Override public void onClick(View v) {   Intent intent = new

Android 使用意图录制视频

本文章主要将通过意图触发内置的Camera应用程序来录制视频. 源代码: 布局文件: activity_main: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" androi

Android使用的开发MediaRecorder录制视频

MediaRecorder除了使用录制音频.还可用于录制视频.关于MediaRecorder的具体解释大家能够參考<Android开发之MediaRecorder类具体解释>.使用MediaRecorder录制视频与录制音频的步骤基本同样.仅仅是录制视频时不仅须要採集声音.还须要採集图像.为了让MediaRecorder录制时採集图像,应该在调用setAudioSource(int audio source)方法时再调用setVideoSource(int video source)方法来设置