Android中用MediaRecorder进行录影的实例代码

MediaRecorder进行录影和录音没什么差别 ,就多了一个设置图像的格式

参考:http://www.jb51.net/article/46182.htm

实例:


代码如下:

<!-- 授予该程序录制声音的权限 -->
    <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" />

代码如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

<SurfaceView
        android:id="@+id/dView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true" 
        android:orientation="horizontal" >

<Button
            android:id="@+id/record"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/record" />

<Button
            android:id="@+id/stop"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/stop" />
    </LinearLayout>

</RelativeLayout>

代码如下:

package com.android.xiong.videotest;

import java.io.File;

import android.app.Activity;
import android.hardware.Camera;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.view.Menu;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {

Button record, stop;
 // 系统视频文件
 File viodFile;
 MediaRecorder mRecorder;
 // 显示视频的SurfaceView
 SurfaceView sView;
 // 记录是否正在进行录制
 boolean isRecording = false;

Camera camera;

@Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  record = (Button) findViewById(R.id.record);
  stop = (Button) findViewById(R.id.stop);
  sView = (SurfaceView) findViewById(R.id.dView);
  // stop按钮不可用
  stop.setEnabled(false);

// 设置Surface不需要维护自己的缓冲区
  sView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
  // 设置分辨率
  sView.getHolder().setFixedSize(320, 280);
  // 设置该组件不会让屏幕自动关闭
  sView.getHolder().setKeepScreenOn(true);

record.setOnClickListener(this);
  stop.setOnClickListener(this);

}

@Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.main, menu);
  return true;
 }

@Override
 public void onClick(View v) {
  switch (v.getId()) {
  case R.id.record:
   if (!Environment.getExternalStorageState().equals(
     Environment.MEDIA_MOUNTED)) {
    Toast.makeText(this, "SD卡不存在,请插卡!", Toast.LENGTH_SHORT).show();
    return;
   }
   try {
    // 创建MediaPlayer对象
    mRecorder = new MediaRecorder();
    mRecorder.reset();
   /* camera = Camera.open();
    camera.unlock();
    camera.setDisplayOrientation(0);
    mRecorder.setCamera(camera);*/
    // 创建保存录制视频的视频文件
    viodFile = new File(Environment.getExternalStorageDirectory()
      .getCanonicalFile() + "/myvideo.mp4");

if (!viodFile.exists())
     viodFile.createNewFile();

// 设置从麦克风采集声音
    mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    // 设置从摄像头采集图像
    mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
    // 设置视频、音频的输出格式
    mRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
    // 设置音频的编码格式、
    mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
    // 设置图像编码格式
    mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
    mRecorder.setOrientationHint(90);
    //mRecorder.setVideoSize(320, 280);
    // mRecorder.setVideoFrameRate(5);
    mRecorder.setOutputFile(viodFile.getAbsolutePath());
    // 指定SurfaceView来预览视频
    mRecorder.setPreviewDisplay(sView.getHolder().getSurface());
    mRecorder.prepare();
    // 开始录制
    mRecorder.start();
    // 让record按钮不可用
    record.setEnabled(false);
    // 让stop按钮可用
    stop.setEnabled(true);
    isRecording = true;

} catch (Exception e) {
    e.printStackTrace();
   }
   break;
  case R.id.stop:
   // 如果正在录制
   if (isRecording) {
    // 停止录制
    mRecorder.stop();
    // 释放资源
    mRecorder.release();
    mRecorder = null;
    // 让record按钮可用
    record.setEnabled(true);
    // 让stop按钮不可用
    stop.setEnabled(false);
   }
   break;
  default:
   break;
  }
 }
}

(0)

相关推荐

  • Android使用MediaRecorder实现录音及播放

    现在项目中有使用到音视频相关技术,在参考了网上各种大牛的资料及根据自己项目实际情况(兼容安卓6.0以上版本动态权限管理等),把声音录制及播放相关代码做个记录. public class MediaRecorderActivity extends BaseActivity { private Button start_tv; private ListView listView; //线程操作 private ExecutorService mExecutorService; //录音API pri

  • Android录音应用实例教程

    本文以实例形式较为详细的展示了Android录音的实现方法,分享给大家供大家参考之用.具体方法如下: 首先是xml布局文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" andr

  • 解决Android MediaRecorder录制视频过短问题

    具体表现: 调用MediaRecorder的start()与stop()间隔不能小于1秒(有时候大于1秒也崩),否则必崩.  错误信息: java.lang.RuntimeException: stop failed. at android.media.MediaRecorder.stop(Native Method)  解决办法: 在stop以前调用setOnErrorListener(null);就行了! 相关代码: /** 开始录制 */ @Override public MediaPar

  • Android App调用MediaRecorder实现录音功能的实例

    MediaRecorder Android的MediaRecorder包含了Audio和video的记录功能,在Android的界面上,Music和Video两个应用程序都是调用MediaRecorder实现的. MediaRecorder在底层是基于OpenCore(PacketVideo)的库实现的,为了构建一个MediaRecorder程序,上层还包含了进程间通讯等内容,这种进程间通讯的基础是Android基本库中的Binder机制. 以开源的Android为例MediaRecorder的

  • Android使用MediaRecorder类进行录制视频

    我们提醒大家使用MediaRecorder录音录像的设置代码步骤一定要按照API指定的顺序来设置,否则报错 步骤为: 1.设置视频源,音频源,即输入源 2.设置输出格式 3.设置音视频的编码格式 一.首先看布局文件,这里有一个SurfaceView,这是一个绘制容器,可以直接从内存或者DMA等硬件接口取得图像数据, <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tool

  • Android音频录制MediaRecorder之简易的录音软件实现代码

    使用MediaRecorder的步骤:1.创建MediaRecorder对象2.调用MediRecorder对象的setAudioSource()方法设置声音的来源,一般传入MediaRecorder.MIC3.调用MediaRecorder对象的setOutputFormat()设置所录制的音频文件的格式4.调用MediaRecorder对象的setAudioRncoder().setAudioEncodingBitRate(int bitRate).setAudioSamlingRate(i

  • Android简单的利用MediaRecorder进行录音的实例代码

    复制代码 代码如下: package com.ppmeet; import java.io.IOException; import android.app.Activity;  import android.graphics.PixelFormat;  import android.media.MediaRecorder;  import android.os.Bundle;  import android.view.View;  import android.view.View.OnClick

  • Android开发四大组件之实现电话拦截和电话录音

    一.问题描述 使用BordercastReceiver和Service组件实现下述功能: 1.当手机处于来电状态,启动监听服务,对来电进行监听录音. 2.设置电话黑名单,当来电是黑名单电话,则直接挂断. 当拨打电话或电话状态发生改变时,系统就会发出有序广播,因此我们可以使用BordercastReceiver接受广播,因BordercastReceiver执行时间短不能执行耗时任务也不能使用子线程,因此我们应启动一个Service来监听电话并进行处理 二.加入AIDL文件 Android没有对外

  • Android应用开发:电话监听和录音代码示例

    在oncreate 中执行: 复制代码 代码如下: public void onCreate() {  super.onCreate();  Log.i("TAG", "服务启动了"); // 对电话的来电状态进行监听  TelephonyManager telManager = (TelephonyManager) this    .getSystemService(Context.TELEPHONY_SERVICE);  // 注册一个监听器对电话状态进行监听 

  • android开发之调用手机的摄像头使用MediaRecorder录像并播放

    我们玩玩手机的录像功能吧.做个DEMO. 看看录制过程: 复制代码 代码如下: mediarecorder = new MediaRecorder();// 创建mediarecorder对象 // 设置录制视频源为Camera(相机) mediarecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); // 设置录制完成后视频的封装格式THREE_GPP为3gp.MPEG_4为mp4 mediarecorder.setOutputFo

随机推荐