录制视频
来源:互联网 发布: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
- 录制视频
- 视频录制
- 视频录制
- 视频录制
- 录制视频
- 录制视频
- 录制视频
- 视频录制
- 视频录制
- 录制视频
- 录制视频
- 录制视频
- android视频录制(调用系统视频录制)
- 视频录制压力,正反面录制视频
- android 视频录制,视频拼接
- flv视频录制
- 录制保存视频
- c#视频流畅录制
- 梯度提升树GBDT原理
- 读书笔记---计算机网络基本概念
- Kinect v2深度测量原理
- 【spring mvc】 页面重定向时参数的传递
- Android Studio 使用快捷键
- 录制视频
- 从户外团队活动体验团结建设
- 剑指offer(十五)之合并两个排序的链表
- jquery ajax post请求实例
- 数组分页显示
- Ubuntu 15.10 卸载 VMware11
- 统计某一字段等于不同值的个数的sql语句
- Wrox红皮书 目录 Unix入门经典
- java ObjectInputStream和ObjectOutputStream与Serializable