项目作者: lauhwong

项目描述 :
一个支持Android拍照和视频录制的camera库。使用libyuv和MediaCodec
高级语言: C++
项目地址: git://github.com/lauhwong/Camera-Muxer.git
创建时间: 2018-07-27T08:14:33Z
项目社区:https://github.com/lauhwong/Camera-Muxer

开源协议:

下载


Camera-Muxer

一个支持Android拍照和视频录制的camera库,Maven-SnapShot依赖.

  1. allprojects {
  2. repositories {
  3. google()
  4. jcenter()
  5. maven{
  6. url 'https://oss.sonatype.org/content/repositories/snapshots/'
  7. }
  8. }
  9. }

CameraView:通用的CameraView,支持帧预览,拍照。

1.添加Module依赖.

  1. configurations.all {
  2. resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
  3. }
  4. dependencies {
  5. implementation 'com.github.lauhwong:cameraview-muxer:0.85-SNAPSHOT'
  6. }

2.开启或者关闭CameraView预览.

  1. override fun onResume() {
  2. super.onResume()
  3. cameraView.start()
  4. }
  5. override fun onPause() {
  6. super.onPause()
  7. cameraView.stop()
  8. }

3.设置预览frame或者picture的大小,可以自己扩展ChooseSizeStrategy.

  1. cameraView.setCameraSizeStrategy(CameraFunctions.STRATEGY_RECORD_PREVIEW_SIZE,
  2. ChooseSizeStrategy.NearestStrategy(1920, 1080))
  3. cameraView.setCameraSizeStrategy(CameraFunctions.STRATEGY_PICTURE_SIZE,
  4. ChooseSizeStrategy.LargestSizeStrategy())

4.给recordingFrame或者capturePicture添加回调,非UI线程.扩展CameraView.Callback

  1. cameraView.addCallback(object:CameraView.Callback{})

5.设置相机自动对焦,闪光灯,切换摄像头参数

  1. cameraView.set*(*:*)

CameraView-Muxer:CameraView的回调实现,支持拍照和Mp4录制(Mp4采用MediaCodec编码)Handler

1.添加拍照回调

  1. cameraView.addCallback(CapturePictureHandler(path))

2.添加MP4录制回调

  1. cameraView.addCallback(object:Mp4MuxerHandler(){
  2. override fun createMp4Muxer(): Mp4Muxer {
  3. return newMp4Muxer()
  4. }
  5. private fun newMp4Muxer(): Mp4Muxer {
  6. val path = File(Environment.getExternalStorageDirectory(), "me.mp4").absolutePath
  7. val mp4Param = Mp4Muxer.Params().apply {
  8. this.path = path
  9. }
  10. val audioParam = AudioDevice.Params()
  11. val audioDevice = AudioDevice.create(audioParam)
  12. return Mp4Muxer(ctx, mp4Param, audioDevice)
  13. }
  14. override fun onStartRecordingFrame(cameraView: CameraView, timeStampInNs: Long) {
  15. super.onStartRecordingFrame(cameraView, timeStampInNs)
  16. }
  17. override fun onStopRecordingFrame(cameraView: CameraView, timeStampInNs: Long) {
  18. super.onStopRecordingFrame(cameraView, timeStampInNs)
  19. }
  20. })

3.设置mp4编码的帧数据和声音采样录制数据

  1. val mp4Param = Mp4Muxer.Params().apply {
  2. this.path = path
  3. this.width=544
  4. this.height=960
  5. this.fps=30
  6. this.videoBitrate=1300000
  7. ***
  8. }
  9. val audioParam = AudioDevice.Params().apply{
  10. this.audioSampleRate=44100
  11. }

更多细节,请查看demo!