zoukankan      html  css  js  c++  java
  • 视频刻录的简单实现

    本代码可能在不用的平台上会存在一些问题。。

    但是主要方法还是一样的


    1、main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
         >
    
        <SurfaceView android:id="@+id/surfaceview"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
             />
        
        <LinearLayout android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            >
            
            <Button android:id="@+id/bt_start"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="开始"
            android:onClick="start"
            android:layout_marginRight="10dp"/>
            <Button android:id="@+id/bt_stop"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="停止"
            android:onClick="stop"
            android:enabled="false"
            android:layout_marginRight="10dp"/>
        </LinearLayout>
    
    </RelativeLayout>


    2、MainActivity

    package com.njupt.vediorecorder;
    
    import java.io.File;
    
    import android.media.MediaRecorder;
    import android.os.Bundle;
    import android.os.Environment;
    import android.app.Activity;
    import android.view.Menu;
    import android.view.SurfaceHolder;
    import android.view.SurfaceView;
    import android.view.View;
    import android.widget.Button;
    
    public class MainActivity extends Activity {
    
    	private SurfaceView surfaceview;
    	private MediaRecorder mr;
        private Button bt_start;
        private Button bt_stop;
        
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
    
    		surfaceview = (SurfaceView) findViewById(R.id.surfaceview);
    		bt_start = (Button) findViewById(R.id.bt_start);
    		bt_stop = (Button) findViewById(R.id.bt_stop);
    		
    		SurfaceHolder holder = surfaceview.getHolder();
    		holder.setFixedSize(176, 144);
    		holder.setKeepScreenOn(true);
    		holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    
    	}
    
    	public void start(View v) {
    
    		try {
    			mr = new MediaRecorder();
    			mr.reset();
    			mr.setAudioSource(MediaRecorder.AudioSource.MIC);
    			mr.setVideoSource(MediaRecorder.VideoSource.CAMERA);
    			mr.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    			mr.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    			mr.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
    
    			File file = new File(Environment.getExternalStorageDirectory(),
    					System.currentTimeMillis() + ".3gp");
    			mr.setOutputFile(file.getAbsolutePath());
    
    			mr.setPreviewDisplay(surfaceview.getHolder().getSurface());
    			mr.prepare();
    			
    			bt_start.setEnabled(false);
    			bt_stop.setEnabled(true);
    			mr.start();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    
    	public void stop(View v){
    		mr.stop();
    		
    		bt_start.setEnabled(true);
    		bt_stop.setEnabled(false);
    		mr.release();
    	}
    	@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;
    	}
    
    }
    


    3、AndroidManifest.xml

    注册权限

     <uses-permission android:name="android.permission.RECORD_AUDIO"/>//媒体刻录
        <uses-permission android:name="android.permission.CAMERA"/>//拍照
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>//以下两个是读写SD卡
        <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
        


    横屏显示

     android:screenOrientation="landscape"


  • 相关阅读:
    android widgets控件
    android test控件
    android layout
    android build.gradle
    android studio AndroidManifest
    android studio settings
    (2)git本地生成SSH关联github
    (1)git
    bzoj2286 (sdoi2011)消耗战(虚树)
    Tree 树(树形期望dp)
  • 原文地址:https://www.cnblogs.com/riskyer/p/3329105.html
Copyright © 2011-2022 走看看