录制视频

来源:互联网 发布:linux 同步盘 编辑:程序博客网 时间:2024/05/02 02:21

//布局中的实现代码

<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="com.example.recode_video.MainActivity" >    <!--显示视频预览的SurfaceView-->    <SurfaceView         android:id="@+id/sfv"        android:layout_width="300dp"        android:layout_height="300dp"        />    <Button        android:id="@+id/start"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_alignParentBottom="true"        android:layout_alignParentLeft="true"        android:text="开始录制" />    <Button        android:id="@+id/stop"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_above="@+id/start"        android:layout_alignParentLeft="true"        android:text="停止录制" /></RelativeLayout>

//主类中的实现代码

import java.io.File;import java.io.IOException;import android.support.v7.app.ActionBarActivity;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;import android.widget.Toast;public class MainActivity extends ActionBarActivity implements OnClickListener{    //定义控件    private Button start,stop;    private SurfaceView sfv;    private File videoFile;//保存录制视频的文件    private MediaRecorder mRecorder;    private boolean isRecording=false;    @SuppressWarnings("deprecation")    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        findViewById();        //设置 停止的按钮不可用        stop.setEnabled(false);        //为停止按钮和开始录制按妞绑定监听事件        start.setOnClickListener(this);        stop.setOnClickListener(this);        //设置SurFaceview缓冲区不需要自己维护        sfv.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);        //设置分辨率        sfv.getHolder().setFixedSize(320, 280);        //设置该组件让屏幕不会自动关闭        sfv.getHolder().setKeepScreenOn(true);    }    private void findViewById() {        start=(Button) findViewById(R.id.start);        stop=(Button) findViewById(R.id.stop);        sfv=(SurfaceView) findViewById(R.id.sfv);    }    @Override    public void onClick(View v) {        switch (v.getId()) {        case R.id.start:            if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {                Toast.makeText(MainActivity.this, "SD卡不存在,请插入SD卡", 0).show();                return;            }            try {                //创建保存录制视频的视频文件                videoFile=new File(Environment.getExternalStorageDirectory().getCanonicalFile()+"/myvideo.mp4");                //创建MediaRecorder对象                mRecorder=new MediaRecorder();                mRecorder.reset();                //设置从麦克风采集声音                mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);                //设置从摄像头采集图像                mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);                //设置视频文件的输出格式                //必须在设置声音编码格式  视频编码格式之前设置                mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);                //设置声音的编码格式                mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);                //设置图像的编码格式                mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);                mRecorder.setVideoSize(320, 280);                //每秒4帧                mRecorder.setVideoFrameRate(5);                mRecorder.setOutputFile(videoFile.getAbsolutePath());                //指定使用SurFaceView预览视频                mRecorder.setPreviewDisplay(sfv.getHolder().getSurface());                //准备录制                mRecorder.prepare();                //开始录制                mRecorder.start();                //让录制按钮不可用                start.setEnabled(false);                //让停止按钮可用                stop.setEnabled(true);                //记录录制的状态                isRecording=true;//正在播放的状态            } catch (IOException e) {                e.printStackTrace();            }            break;        case R.id.stop:            if (isRecording) {                mRecorder.stop();                mRecorder.release();                mRecorder=null;                start.setEnabled(true);                stop.setEnabled(false);            }            break;        default:            break;        }    }}

//这个多代码就够了 但是我们不要忘记了 需要添加权限呢
下面就是需要添加的权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>    <uses-permission android:name="android.permission.CAMERA"/>    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>    <uses-permission android:name="android.permission.RECORD_AUDIO"/>

这样就简单的实现了视频的录制和播放,需要的你赶快行动起来吧!希望可以帮到你。

0 0
原创粉丝点击