• and音集


    pc上半天,m1上分分钟,下次and只用这个 to thi

    https://www.jianshu.com/p/ff7629201c07

    必看

    https://bigflake.com/mediacodec/#samples

    录看

    https://hub.fastgit.org/ChenTianSaber/ScreenRecorderShoter

    录屏29以后还得 看这个

    https://zhuanlan.zhihu.com/p/360356420

    录像的看下这个

    https://www.cnblogs.com/CoderTian/p/6224605.html 

     mediacodec多的

     https://www.jianshu.com/p/e6c683d6dbbe

    android原录像的

    package com.example.recordvideo;
    import android.Manifest;
    import android.app.Activity;
    import android.content.pm.PackageManager;
    import android.graphics.Camera;
    import android.media.MediaRecorder;
    import android.os.Bundle;
    import android.os.Environment;
    import android.util.Log;
    import android.view.SurfaceView;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.ImageButton;
    import android.widget.Toast;
    
    import androidx.core.app.ActivityCompat;
    import androidx.core.content.ContextCompat;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.nio.charset.StandardCharsets;
    
    public class MainActivity extends Activity implements OnClickListener {
    
        private static final String TAG = "MainActivity";
        // 程序中的两个按钮
        Button record, stop;
        // 系统的视频文件
        File videoFile;
        MediaRecorder mRecorder;
        // 显示视频预览的SurfaceView
        SurfaceView sView;
        // 记录是否正在进行录制
        private boolean isRecording = false;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            // 获取程序界面中的两个按钮
            record = (Button) findViewById(R.id.record);
            stop = (Button) findViewById(R.id.stop);
            // 让stop按钮不可用
            stop.setEnabled(false);
            // 为两个按钮的单击事件绑定监听器
            record.setOnClickListener(this);
            stop.setOnClickListener(this);
            // 获取程序界面中的SurfaceView
            sView = (SurfaceView) this.findViewById(R.id.sView);
            // 设置分辨率
            //sView.getHolder().setFixedSize(1920, 1080);   // 1080P
            // 设置该组件让屏幕不会自动关闭
            //sView.getHolder().setKeepScreenOn(true);
            verifyStoragePermissions(this);
    
        }
    
        @Override
        public void onClick(View v) {
            // 单击录制按钮
            if (v.getId() == R.id.record) {
                if (!Environment.getExternalStorageState().equals(
                        android.os.Environment.MEDIA_MOUNTED)) {
                    Toast.makeText(MainActivity.this, "SD卡不存在,请插入SD卡!", Toast.LENGTH_SHORT).show();
                    return;
                }
                try {
                    // 创建保存录制视频的视频文件
                    //videoFile = new File(Environment.getExternalStorageDirectory()
                     //       .getCanonicalFile() + "/my_video.mp4");
                    videoFile = new File(getExternalFilesDir(""),"0919.mp4");
    
                   // videoFile = new File("data/data/com.example.recordvideo/0919.mp4");
                    // 创建MediaPlayer对象
                    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.AAC);
                    mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
                           // .AudioEncoder.DEFAULT);
                    // 设置图像编码的格式
                    //mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
                    mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
                    mRecorder.setOrientationHint(90);
                    //mRecorder.setVideoSize(1920, 1080);  // 1080P
                    mRecorder.setVideoSize(640, 480);  // 1080P
                    // 每秒16帧 已加入帧数就出错
                   // mRecorder.setVideoFrameRate(20);
                    mRecorder.setMaxDuration(10*1000);
                    //mRecorder.setVideoFrameRate(30);
                    //mRecorder.setVideoEncodingBitRate(1024*1024*20);
                    mRecorder.setOutputFile(videoFile.getAbsolutePath());
                    Log.i(TAG, "---------------->: "+videoFile.getAbsolutePath());
                    // 指定使用SurfaceView来预览视频
                    mRecorder.setPreviewDisplay(sView.getHolder().getSurface());  //
                    mRecorder.prepare();
                    // 开始录制
                    mRecorder.start();
                    Log.d(TAG, "---recording---");
                    // 让record按钮不可用
                    record.setEnabled(false);
                    // 让stop按钮可用
                    stop.setEnabled(true);
                    isRecording = true;
                    /*
                    try{
                        //--
                        FileOutputStream txtFile = new FileOutputStream("data/data/com.example.recordvideo/0919.txt");
                        Log.d(TAG, "---recording---"+txtFile);
                        txtFile.write("haha".getBytes());
                        txtFile.flush();
                        txtFile.close();
                    } catch (Exception e){
                        e.printStackTrace();
                    }
                    */
                    //
    
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } else if (v.getId() == R.id.stop) {   // 单击停止按钮
                // 如果正在进行录制
                if (isRecording) {
                    // 停止录制
                    mRecorder.stop();
                    mRecorder.reset();
                    // 释放资源
                    mRecorder.release();
                    Log.i(TAG, "---------------->:stop" );
                    mRecorder = null;
                    // 让record按钮可用
                    record.setEnabled(true);
                    // 让stop按钮不可用
                    stop.setEnabled(false);
                }
            }
        }
    
    
    
        private  final int REQUEST_EXTERNAL_STORAGE = 1;
        private  String[] PERMISSIONS_STORAGE = {
                Manifest.permission.CAMERA,
                Manifest.permission.RECORD_AUDIO,
                Manifest.permission.WRITE_EXTERNAL_STORAGE };
        public  void verifyStoragePermissions(Activity activity) {
            // Check if we have write permission
          //  int permission = ActivityCompat.checkSelfPermission(activity,
            //        Manifest.permission.WRITE_EXTERNAL_STORAGE);
            //if (permission != PackageManager.PERMISSION_GRANTED)
            {
                // We don't have permission so prompt the user
                ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,
                        REQUEST_EXTERNAL_STORAGE);
            }
        }
    
    }
  • 相关阅读:
    java内联函数
    jvm垃圾回收
    jvm内存管理
    java进程和线程的区别
    jvm
    简单易学的SSM(Spring+SpringMVC+MyBatis)整合
    Spring之声明式事务
    SpringMVC知识点小结
    Servlet之文件的上传与下载
    java使用字节流和字符流实现文件复制
  • 原文地址:https://www.cnblogs.com/cnchengv/p/15538773.html
Copyright © 2020-2023  润新知