前两章介绍了音视频的采集,这章主要内容是适配5.0以下手机的视频采集,首先自然是老Api的基类代码
//老相机id
private var oldCameraId = Camera.CameraInfo.CAMERA_FACING_BACK
//老相机SurfaceTexture
private var oldSurfaceTexture:SurfaceTexture? = null
//老相机数据存储数组
private var oldBuffers:ByteArray? = null
//老相机
private var oldCamera:Camera? = null
/**
* 老相机API开始预览
*/
fun startPreview(surfaceTexture:SurfaceTexture){
if (oldSurfaceTexture == null){
oldSurfaceTexture = surfaceTexture;
}
// 打开摄像头并将展示方向旋转90度
oldCamera = Camera.open(oldCameraId)
oldCamera!!.setDisplayOrientation(90)
val parameters = oldCamera!!.parameters
// 选择合适的预览尺寸
val sizeList = parameters.supportedPreviewSizes
val oldSize = getOldSize(sizeList)
parameters.previewFormat = ImageFormat.NV21
//设置预览图像参数
parameters.setPictureSize(oldSize.width,oldSize.height)
parameters.setPreviewSize(oldSize.width,oldSize.height)
oldCamera!!.parameters = parameters
oldCamera!!.setPreviewTexture(oldSurfaceTexture)
//获取预览数据
oldBuffers = ByteArray(oldSize.width * oldSize.height * 4)
oldCamera!!.addCallbackBuffer(oldBuffers)
oldCamera!!.setPreviewCallbackWithBuffer(previewCallback)
oldCamera!!.startPreview()
}
/**
* 获取老相机预览数据回调
*/
private val previewCallback = Camera.PreviewCallback { data, camera ->
camera?.addCallbackBuffer(oldBuffers)
oldSendVideoData(data)
}
/**
* 老相机API预览数据回调
*/
abstract fun oldSendVideoData(data:ByteArray)
/**
* 停止预览
*/
fun stopPreview(){
if (oldCamera != null){
oldCamera!!.stopPreview()
oldCamera!!.release()
oldCamera = null
}
}
/**
* 老camera切换摄像头