1、添加权限

<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />

2、动态添加权限

ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CAMERA,Manifest.permission.RECORD_AUDIO},100);

3、创建一个MediaRecorderActivity,使用Intent连接MainActivity和MediaRecorderActivity

4、创建 MediaRecorder ()源码即步骤:

(1)、创建recorder对象:new MediaRecorder()

(2)、设置录制视频的方向:setCamera(camera);其中camera为

Camera camera = Camera.open();
           camera.setDisplayOrientation( );
           camera.unlock();

(3)、设置音频的采集方式:setAudioSource();设置视频的采集方式:setVideoSource()

(4)、设置视频的输出格式:setOutputFormat()

(5)、设置音频的编码格式:setAudioEncoder();设置视频的编码格式:setVideoEncoder()

(6)、设置视频播放的方向:setOrientationHint()

(7)、设置输出文件的位置:setOutputFile()

(8)、设置输出视频的大小:setVideoSize()

(9)、设置视频的帧率:setVideoFrameRate()

(10)、设置视频预览:setPreviewDisplay()

(11)、准备录制:prepare()

(12)、开始录制:start()

(13)、结束录制:stop()

(14)、释放recorder对象:release()

(15)、关闭与释放camera:stopPreview(),release()

完整代码:

mainActivity

public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//android 6.0以上需要进行动态权限申请ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CAMERA,Manifest.permission.RECORD_AUDIO},100);}public void record(View view) {Intent intent = new Intent(this, MediaRecoderActivity.class);startActivity(intent);}
}

MediaRecorderActivity

public class MediaRecoderActivity extends AppCompatActivity implements View.OnClickListener {private Button button;private MediaRecorder mediaRecorder;private SurfaceView surfaceView;private Camera camera;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_media_recoder);surfaceView = findViewById(R.id.surface);button = findViewById(R.id.button);button.setOnClickListener(this);}@Overridepublic void onClick(View view) {String s = button.getText().toString();if(s.equals("开始")){button.setText("结束");mediaRecorder = new MediaRecorder();camera = Camera.open();camera.setDisplayOrientation(90);//将摄像头预览的角度进行调整camera.unlock();mediaRecorder.setCamera(camera);mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);//设置音频源mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);//设置视频源mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);//设置视频输出格式mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);//设置音频编码格式mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);//设置视频编码格式mediaRecorder.setOrientationHint(90);//设置视频播放的方向mediaRecorder.setOutputFile(new File(getExternalFilesDir(""),"a.mp4").getAbsolutePath());//设置存储路径mediaRecorder.setVideoSize(640,480);//大小mediaRecorder.setVideoFrameRate(30);//帧率mediaRecorder.setPreviewDisplay(surfaceView.getHolder().getSurface());//设置预览界面try {mediaRecorder.prepare();//准备录制} catch (IOException e) {e.printStackTrace();}mediaRecorder.start();//开始录制}else{button.setText("开始");mediaRecorder.stop();//结束录制mediaRecorder.release();//释放camera.stopPreview();//关闭摄像头camera.release();//释放}}}

布局

activity_main

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="录制视频"android:onClick="record"android:layout_gravity="center"android:layout_marginTop="100dp"/></LinearLayout>

activity_media_recorder

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MediaRecoderActivity"><SurfaceViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/surface"/><Buttonandroid:id="@+id/button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="开始"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

mediaRecorder录制视频与播放相关推荐

  1. 前端 mediaRecorder 录制视频源代码实例,和本地播放器无法定位进度条问题分析和解决

    问题 mediaRecorder 本质上录制的是webm 当我们使用getUserMedia.MediaRecorder等API生成的webm视频时,会发现最终的webm是无法拖动进度条的 解决方案 ...

  2. Android音视频之MediaRecorder录制视频

    1 MediaRecorder 录制视频步骤 这篇文章介绍了Android录音MediaRecorder使用和SoundPool的使用 主要讲解了音频的录制和播放,这篇AudioRecord和Audi ...

  3. 机试题:地图定位、拍照并显示、录制视频并播放

    这两天参加面试,有个公司先出了机试题,然后才能进入下一步,机试题大意是要求实现:地图定位.拍照并显示照片.录制视频并且播放视频三个小功能. 先上我的效果图: 1.地图定位关键代码(ios8后,开启地图 ...

  4. 使用MediaRecorder录制视频短片

    MediaRecorder除了可用于录制音频之外,还可用于录制视频,使用MediaRecorder录制视频与录制音频的步骤基本相同.只是录制视频时不仅需要采集声音,还需要采集图像.为了让MediaRe ...

  5. Android多媒体四:MediaRecorder录制视频短片

    Android多媒体四:MediaRecorder录制视频短片 MediaRecorder除了可用于录制音频之外,还可用于录制视频,使用MediaRecorder录制视频与录制音频的步骤基本相同. 只 ...

  6. MediaRecorder录制视频时计算文件大小

    MediaRecorder录制视频时通过音频编码率和视频编码率计算文件大小或时间 计算公式:(音频编码率(单位k)+视频编码率(单位k))/8*时间(秒) = 文件大小(kb) 例: mediaRec ...

  7. Android MediaRecorder录制视频详细步骤

    使用MediaRecorder能够编写从设备麦克风与相机捕获音视频,保存音频并(使用MediaPlayer)进行播放的应用. 1.添加权限: <uses-permission android:n ...

  8. 利用MediaRecorder录制视频切片上传到ftp服务器

    文章目录 1.前言 2.思路 思路一 思路二 1.前言 之前项目中用Canvas+H5合并流实现录屏功能,但是因为视频流是一直保存到内存中,当你的合成的视频流越来越来,那么导致内存消耗越大(后面浏览器 ...

  9. Android 仿微信长按录制视频并播放的功能

    一.点击按钮进行录制 首先要获取摄像拍照的权限和读取权限 <uses-permission android:name="android.permission.CAMERA" ...

最新文章

  1. Windows10看视频出现蓝屏重启
  2. 太强了!Kaggle竞赛宝典方案汇总
  3. Model Explorer中变量Scope属性的意义
  4. 另一种办法直接在宿主机上的文件夹内查看Docker镜像运行的日志文件
  5. winform能连MySQL吗_c# winform中怎么连接mysql
  6. 从委托而起(二)认识委托
  7. 浅谈Fluent Ribbon 中的SplitButton
  8. C 语言实例 -求分数数列1/2+2/3+3/5+5/8+...的前n项和
  9. ImageView显示图像控件
  10. 荣之联:生物云仅仅是开始
  11. Novel-Ai本地部署教程
  12. cisco、华为交换机常用配置对照表
  13. 微信小程序 一键授权 给第三方平台代开发管理(一,创建第三方平台)
  14. 纯前端实现—点一个小圆圈变四个动画效果
  15. 城市智慧水务供水测试床在工业互联网上发布
  16. [.NET源码] asp.net中手机版和PC版识别
  17. 域名的DA值和PA值用什么工具查询?
  18. ZOJ 2975-K - Kinds of Fuwas-暴力+bitset
  19. 985大学计算机专业起薪,985名校毕业生有多值钱?看完这份大学毕业生薪酬榜你就知道了...
  20. iphone连接linux系统电脑,为什么iphone连不上电脑 多种解决方法【图文教程】

热门文章

  1. form提交base64的小方法
  2. 十六进制转换成十进制
  3. javascript的100个常用技巧收集
  4. Wiznet W5100硬件TCP/IP嵌入式以太网控制器
  5. 营销人才必须具备狼性
  6. 认领应用的MD5签名写入空白包中
  7. python中mktime函数_Python time mktime()方法
  8. 【JAVA】将分散于多个文件夹的文件汇集于同一个文件
  9. openlayers示例教程100+【目录】
  10. 【Java】递归算法