美文网首页android 开发Android知识Android开发
【Android】像微信一样录制视频和音频

【Android】像微信一样录制视频和音频

作者: wanbo_ | 来源:发表于2017-01-22 22:38 被阅读2287次

    MediaUtils

    A demo of record audio and video about Android

    一个在 Android 上实现录像和录音功能的小例子。

    GitHub 地址:https://github.com/Werb/MediaUtils
    也可直接点击下载体验 https://fir.im/cbas

    • Android 的 MediaRecorder 相信用过的同学一定踩过很多坑
    • 之前写的代码很乱,现在重构了一下,可以直接放到自己的项目中用
    • 本例子将 MediaRecorder 进行了重构,通过 MediaUtils 对外暴露几个必需的方法来实现录像和录音功能
    • 录制视频界面参考新版微信小视频,还原了微信的动画效果
    • 支持 Android 7.0
    • 通过线程及 Exception 等手段避免了常见的 start failed , stop failed 等问题
    • 重绘了录制视频和录音时的两个自定义view,可在原本基础上进行二次开发
    • 提供了视频截图方法,支持双击放大,支持自动对焦
    • 视频录制暂时使用 SurfaceView + Camera , 后续会升级为 TextureView + Camera2

    效果图

    video audio

    核心类

    MediaUtils

    • 重构后对外暴露只有8行代码,可结合实际情况使用
          // 初始化
          MediaUtils mediaUtils = new MediaUtils(this);
          mediaUtils.setRecorderType(MediaUtils.MEDIA_VIDEO);
          mediaUtils.setTargetDir(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES));
          mediaUtils.setTargetName(UUID.randomUUID() + ".mp4");
          mediaUtils.setSurfaceView(surfaceView);
          // 开始录制
          mediaUtils.record()
          // 结束录制 save or unSave
          mediaUtils.stopRecordUnSave();
          mediaUtils.stopRecordSave();
    

    CameraHelper

    • 在 Android 中录制视频时显示的 Size 和实际拍照的 Size 是由 Camera 所决定的,最好的方法是计算出可支持的 PreviewSize 和 VideoSize 计算出一个合适的size,同时根据自己视频的用途,选择合理的 Size
    • CameraHelper 参考自 GoogleCameraSample 帮助你计算出合适的 Size

    CamcorderProfile

    这是一个困扰我好久的地方,一直在想录制视频的时候,如何保存清晰度的情况下,还能控制文件的大小,终于找到了一种可行的办法

    • 分辨率越大视频大小越大,比特率越大视频越清晰
    • 清晰度由比特率决定,视频尺寸和像素量由分辨率决定
    • 比特率越高越清晰(前提是分辨率保持不变),分辨率越大视频尺寸越大
    • CamcorderProfile 是 Android 提供的一个内置的视频参数配置类
    • videoFrameWidth 录制视频分辨率的宽
    • videoFrameHeight 录制视频分辨率的高
    • videoBitRate 这个就是比特率,决定了视频的清晰度
    • 将分辨率和比特率结合自己的需求,进行有效的控制,可以的到自己想要的效果
    • 本 demo 中,录制1080P的视频,大小在5M左右,还可以再小
    • 最后 videoFrameRate 帧率,这个一般是摄像头会自动调节,所以设置了恒定的有的也不起作用

    自定义View

    • 仿造新版微信拍摄视频的界面,通过 Paint,RectF,Canvas 绘制,很简单直接看代码就好了
    • 突然喜欢上了在 Android 画动效,开启 dribbble 抄动效模式

    好了,知识虽小但五脏俱全

    欢迎使用我自己开源的一个 Android 图片选择器

    项目中关于 Android M的权限检查用到了,我的另外一个库

    很高兴你看到这里

    有时候啊 你总是在追赶前面的人

    总是抱怨自己为什么不能再努力一点

    累了你可以停下来 看看原来的自己

    其实你已经很了不起了。

    我是 wanbo 。

    相关文章

      网友评论

      • 799c9d234d57:我用了你的MediaUtils,写的很不错,但我要控制录视频一分钟,该怎么做呀?在线等
      • 5bccc09f52f3:你好,如何在我录制成功之后,在选择从新录制和保存的时候,把录制的进行预览播放,而不是再现身摄像头的预览
      • ae0decab28f3:感谢楼主的分享
      • 93eaa63f4bc0:小米手机无法录制视频,并且视频预览很不对劲,被压缩了。
        93eaa63f4bc0:跟进一下,debug看了一下,是文件目录的问题,替换了自己的目录,并判断了文件exist 创建,然后就可以了。可能是一些机型特殊问题吧。
      • qzuser_2c8c:在拍摄过程中,切换摄像头,视频播不出来!
      • 光羽隼:当是用几次之后就不能录制视频,点击没有反应。如果退出再点进去,点击video按钮就会卡死。请问是什么原因呢
      • 奥创没电了:你好,我华为手机,运行起来后,按住录制视频,并没有走进度,也没有开始录制,还有点击切换摄像头按钮,就会闪退 到第一个页面。。不知怎么回事:frowning:
      • be43b93893be:我在你的基础上 切换摄像头 切换成功 但无法录像
        be43b93893be:@wanbo_ 已成功,感谢
        wanbo_:@陶瓷大叔 github 上更新了代码可以试一下
      • CAT1024:你好,我设置前置摄像头的时候 mCamera.setParameters(parameters);会报 setParameters failed的错误
        CAT1024:@wanbo_ 事实上你还可以加上闪光灯开关,录制完视频,可以直接循环播放等功能
        CAT1024:@wanbo_ 非常感谢,我这边之前已经实现了这个功能,并发现前置摄像头录制视频时,录好的视频是上下颠倒的,设置调用前置摄像头时mMediaRecorder.setOrientationHint(270);就能解决这个问题。。。
        wanbo_:@CAT1024 github 上更新了代码可以试一下
      • 7c81adae2703:小米机型录制不了视频
      • StillForward:minSdkVersion 最低要16吗?
        wanbo_:@StillForward 不一定的,都可以
      • jacklin1992:哇,我去github下了你的项目,很厉害,谢谢你,解决了我的问题,真的太感谢了,找了很久,你很厉害大兄弟。
      • yinianzhijian:你好,我手机录制不了视频,手机型号vivo X5SL ,Android 版本是4.4.4,处理器是64 位 八核的,请问那出问题了?
      • huangyirui:请问有没有像微博那样断点录制视频的demo么
        沉浸在码农的世界:七牛的可以

      本文标题:【Android】像微信一样录制视频和音频

      本文链接:https://www.haomeiwen.com/subject/flgobttx.html