Android视频录制小例子
16lz
2021-01-23
转于:http://blog.csdn.net/ouyang_peng/article/details/12068331
---------------------------------------------------------------------------------------------
下面就看看该小例子的代码吧。
文件1.该应用的布局文件,res/layout/main.xml
[html] view plain copy- <!--帧布局-->
- <FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"android:layout_height="fill_parent">
- <!--用来展示画面-->
- <SurfaceViewandroid:id="@+id/surfaceView"
- android:layout_width="fill_parent"android:layout_height="fill_parent"/>
- <!--相对布局,该界面默认不显示出来,当触摸屏幕时候显示出来-->
- <RelativeLayoutandroid:layout_width="fill_parent"
- android:layout_height="fill_parent"android:visibility="gone"
- android:id="@+id/buttonlayout">
- <!--刻录按钮-->
- <Buttonandroid:layout_width="wrap_content"
- android:layout_height="wrap_content"android:layout_alignParentRight="true"
- android:layout_alignParentBottom="true"android:layout_marginRight="10dp"
- android:text="@string/recoderbutton"android:onClick="recoder"
- android:id="@+id/recoderbutton"/>
- <!--停止按钮-->
- <Buttonandroid:layout_width="wrap_content"
- android:layout_height="wrap_content"android:layout_toLeftOf="@id/recoderbutton"
- android:layout_alignTop="@id/recoderbutton"android:layout_marginRight="30dp"
- android:text="@string/stopbutton"android:onClick="stop"
- android:id="@+id/stopbutton"
- android:enabled="false"/>
- </RelativeLayout>
- </FrameLayout>
文件2:布局文件所用到的资源文件,res/values/string.xml
- <?xmlversion="1.0"encoding="utf-8"?>
- <resources>
- <stringname="hello">HelloWorld,RecoderActivity!</string>
- <stringname="app_name">视频刻录小例子</string>
- <stringname="recoderbutton">刻录</string>
- <stringname="stopbutton">停止</string>
- <stringname="noSDcard">检测到手机没有存储卡!请插入手机存储卡再开启本应用</string>
- <stringname="maxDuration">已经达到最长录制时间</string>
- </resources>
文件3:该应用的主程序,RecoderActivity.java
- packagecn.oyp.recoder;
- importjava.io.File;
- importandroid.app.Activity;
- importandroid.content.pm.ActivityInfo;
- importandroid.media.MediaRecorder;
- importandroid.media.MediaRecorder.OnInfoListener;
- importandroid.os.Bundle;
- importandroid.os.Environment;
- importandroid.view.MotionEvent;
- importandroid.view.SurfaceHolder;
- importandroid.view.SurfaceView;
- importandroid.view.View;
- importandroid.view.ViewGroup;
- importandroid.view.Window;
- importandroid.view.WindowManager;
- importandroid.widget.Button;
- importandroid.widget.RelativeLayout;
- importandroid.widget.Toast;
- publicclassRecoderActivityextendsActivity{
- //用来显示图片
- privateSurfaceViewsurfaceView;
- //刻录和停止按钮布局
- privateRelativeLayoutbuttonlayout;
- //刻录按钮
- privateButtonrecoderbutton;
- //停止按钮
- privateButtonstopbutton;
- //媒体刻录对象
- privateMediaRecordermediaRecorder;
- /**Calledwhentheactivityisfirstcreated.*/
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- //窗口特效为无标题
- requestWindowFeature(Window.FEATURE_NO_TITLE);
- //设置窗口全屏
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
- //设定屏幕显示为横向
- setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
- setContentView(R.layout.main);
- buttonlayout=(RelativeLayout)this.findViewById(R.id.buttonlayout);
- recoderbutton=(Button)this.findViewById(R.id.recoderbutton);
- stopbutton=(Button)this.findViewById(R.id.stopbutton);
- surfaceView=(SurfaceView)this.findViewById(R.id.surfaceView);
- //获取的画面直接输出到屏幕上
- surfaceView.getHolder()
- .setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
- //画面分辨率
- surfaceView.getHolder().setFixedSize(176,144);
- //保持屏幕高亮
- surfaceView.getHolder().setKeepScreenOn(true);
- }
- //点击刻录按钮处理方法
- publicvoidrecoder(Viewv){
- try{
- //判断是否存在SD卡
- if(Environment.getExternalStorageState().equals(
- Environment.MEDIA_MOUNTED)){
- //将刻录的视频保存到SD卡中
- FilevideoFile=newFile(
- Environment.getExternalStorageDirectory(),
- System.currentTimeMillis()+".3gp");
- mediaRecorder=newMediaRecorder();
- //设置声音采集来源于麦克风
- mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
- //设置视频采集来源于摄像头
- mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
- //设置输出格式为3gp
- mediaRecorder
- .setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
- //设置视频尺寸
- mediaRecorder.setVideoSize(surfaceView.getWidth(),
- surfaceView.getHeight());
- //设置每秒钟捕捉画面个数为5帧
- mediaRecorder.setVideoFrameRate(5);
- //设置声音编码
- mediaRecorder
- .setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
- //设置视频编码
- mediaRecorder.setAudioEncoder(MediaRecorder.VideoEncoder.H264);
- //设置视频的最大持续时间
- mediaRecorder.setMaxDuration(10000);
- mediaRecorder.setOnInfoListener(newOnInfoListener(){
- @Override
- publicvoidonInfo(MediaRecordermr,intwhat,intextra){
- if(what==MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED){
- Toast.makeText(getApplicationContext(),
- R.string.maxDuration,Toast.LENGTH_LONG)
- .show();
- if(mediaRecorder!=null){
- mediaRecorder.stop();
- mediaRecorder.release();
- mediaRecorder=null;
- }
- }
- }
- });
- //设置刻录的视频保存路径
- mediaRecorder.setOutputFile(videoFile.getAbsolutePath());
- //设置预览显示
- mediaRecorder.setPreviewDisplay(surfaceView.getHolder()
- .getSurface());
- //预期准备
- mediaRecorder.prepare();
- //开始刻录
- mediaRecorder.start();
- }else{
- Toast.makeText(getApplicationContext(),R.string.noSDcard,
- Toast.LENGTH_LONG).show();
- }
- }catch(Exceptione){
- e.printStackTrace();
- }
- //刻录按钮不可点击
- recoderbutton.setEnabled(false);
- //停止按钮可点击
- stopbutton.setEnabled(true);
- }
- //点击停止按钮处理方法
- publicvoidstop(Viewv){
- //停止刻录,并释放资源
- if(mediaRecorder!=null){
- mediaRecorder.stop();
- mediaRecorder.release();
- mediaRecorder=null;
- }
- //刻录按钮可点击
- recoderbutton.setEnabled(true);
- //停止按钮不可点击
- stopbutton.setEnabled(false);
- }
- /**当触摸屏幕的时候,将对焦和拍照按钮布局显示出来*/
- @Override
- publicbooleanonTouchEvent(MotionEventevent){
- if(event.getAction()==MotionEvent.ACTION_DOWN){
- buttonlayout.setVisibility(ViewGroup.VISIBLE);
- returntrue;
- }
- returnsuper.onTouchEvent(event);
- }
- }
文件4:该应用的描述文件 ,AndroidManifest.xml
- <?xmlversion="1.0"encoding="utf-8"?>
- <manifestxmlns:android="http://schemas.android.com/apk/res/android"
- package="cn.oyp.recoder"android:versionCode="1"android:versionName="1.0">
- <uses-sdkandroid:minSdkVersion="8"/>
- <!--摄像头权限-->
- <uses-permissionandroid:name="android.permission.CAMERA"/>
- <!--录制音频权限-->
- <uses-permissionandroid:name="android.permission.RECORD_AUDIO"/>
- <!--在SD卡中创建和删除文件权限-->
- <uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
- <!--往SD卡中写入数据的权限-->
- <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
- <applicationandroid:icon="@drawable/icon"android:label="@string/app_name">
- <activityandroid:name=".RecoderActivity"android:label="@string/app_name"
- android:screenOrientation="landscape">
- <intent-filter>
- <actionandroid:name="android.intent.action.MAIN"/>
- <categoryandroid:name="android.intent.category.LAUNCHER"/>
- </intent-filter>
- </activity>
- </application>
- </manifest>
更多相关文章
- Android 监听U盘插入和拔出并获取U盘文件路径
- Android 页面或文件或网络请求时的加载动画
- android EditText实例 删除按钮 与内容监听
- Android 文件管理器
- Android 本地文件 调用系统 设置壁纸
- Android 4.x上适配设置DialogFragment背景透明--可拓展实现悬浮
- android 根据文件的扩展名选择用什么应用程序打开
- android将对象写入文件和从文件中读取对象数据
- Android中XML文件的序列化生成与解析