android录制和播放视频

来源:互联网 发布:云计算开发工程师面试 编辑:程序博客网 时间:2024/04/29 23:31

java代码:

package com.example.shipinlz;

import java.io.File;
import java.io.IOException;
import java.util.ResourceBundle.Control;

import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.media.RemoteControlClient.MetadataEditor;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Camera;
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.MediaController.MediaPlayerControl;
import android.widget.MediaController;
import android.widget.Toast;
import android.widget.VideoView;

public class MainActivity extends Activity implements OnClickListener{

    private Button starts,stops,plays;
    //显示视频预览的控件
    private SurfaceView surfaceview;

    private MediaRecorder mediarecoder;
    //视频文件
    private File videofiles;
    private boolean isRecording=false;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        starts=(Button)findViewById(R.id.starts);
        plays=(Button)findViewById(R.id.plays);
        stops=(Button)findViewById(R.id.stops);
        surfaceview=(SurfaceView)findViewById(R.id.shipin);
        stops.setEnabled(false);
        starts.setOnClickListener(this);
        stops.setOnClickListener(this);
        plays.setOnClickListener(this);
        //设置surfaceView不需要自己维护缓冲区
        surfaceview.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        //设置分辨率
        surfaceview.getHolder().setFixedSize(320, 280);
        //设置组件不会让屏幕自动关闭
        surfaceview.getHolder().setKeepScreenOn(true);
    }
    @Override
    public void onClick(View view) {
        // TODO Auto-generated method stub
        switch (view.getId()) {
        //单击录制按钮
        case R.id.starts:
            
            if(!Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)){
                Toast.makeText(this, "请插入能存卡", 0).show();
                return;
            }
            //创建录制视频的文件夹
            String path=Environment.getExternalStorageDirectory()+"/video";
            File file=new File(path);
            if(!file.exists()){
                file.mkdirs();
            }
            //录制视频的视频文件
            videofiles=new File(file.getPath()+"/shipin.mp4");
            //创建MediaRecorder对象
            mediarecoder=new MediaRecorder();
            mediarecoder.reset();
            //设置从麦克风采集声音
            mediarecoder.setAudioSource(MediaRecorder.AudioSource.MIC);
            //设置从摄像头采集图像
            mediarecoder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
            //设置视频文件的输出格式(必须设置在编码格式之前)
            mediarecoder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
            //设置音频编码格式
            mediarecoder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
            //设置图像编码格式
            mediarecoder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);

        //    mediarecoder.setVideoSize(320,320);
        //设置每秒4帧
        //    mediarecoder.setVideoFrameRate(4);
            //输出视频文件
            mediarecoder.setOutputFile(videofiles.getAbsolutePath());
            //指定surfaceview预览视频
            mediarecoder.setPreviewDisplay(surfaceview.getHolder().getSurface());
            try {
                
                mediarecoder.prepare();
                //开始录制
                mediarecoder.start();
                starts.setEnabled(false);
                stops.setEnabled(true);
                isRecording=true;
            } catch (IllegalStateException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            
            break;
 
        case R.id.stops:
            if(isRecording){
                mediarecoder.stop();
                //释放资源
                mediarecoder.release();
                mediarecoder=null;
                starts.setEnabled(true);
                stops.setEnabled(false);
            }
            break;
        case R.id.plays:
        MediaPlayer mediaplayer=new MediaPlayer();
        mediaplayer.reset();
        mediaplayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            try {
                mediaplayer.setDataSource(videofiles.getAbsolutePath());
                mediaplayer.setDisplay(surfaceview.getHolder());
                mediaplayer.prepare();
                mediaplayer.start();
            } catch (IllegalArgumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (SecurityException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalStateException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        
            break;
        }
        
    }


}

布局文件:

<LinearLayout 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"
    android:orientation="vertical"
        >

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    >
    <Button
        android:id="@+id/starts"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="开始录制"
        />
    <Button
        android:id="@+id/stops"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="停止录制"
        />
    <Button
        android:id="@+id/plays"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="播放视频"
        />
</LinearLayout>

    <SurfaceView
    android:id="@+id/shipin"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
   
    />


</LinearLayout>

权限设置:

   <!-- 授予录音权限 -->
<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"/>



不知道为什么录制的图像是倒着的,如果有知道的指点一下

0 0
原创粉丝点击