如何实现RTMP推送Android Camera2数据
Posted 大牛直播SDK
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何实现RTMP推送Android Camera2数据相关的知识,希望对你有一定的参考价值。
Camera2简介
在Google 推出android 5.0的时候, Android Camera API 版本升级到了API2(android.hardware.camera2), 之前使用的API1(android.hardware.camera)就被标为 Deprecated 了。
Camera API2相较于API1有很大不同, 并且API2是为了配合HAL3进行使用的, API2有很多API1不支持的特性, 比如:
- 更先进的API架构;
- 可以获取更多的帧(预览/拍照)信息以及手动控制每一帧的参数;
- 对Camera的控制更加完全(比如支持调整focus distance, 剪裁预览/拍照图片);
- 支持更多图片格式(yuv/raw)以及高速连拍等。
在API架构方面, Camera2和之前的Camera有很大区别, APP和底层Camera之前可以想象成用管道方式连接, 如下图:
这里引用了管道的概念将安卓设备和摄像头之间联通起来,系统向摄像头发送 Capture 请求,而摄像头会返回 CameraMetadata。这一切建立在一个叫作 CameraCaptureSession 的会话中。
下面是 camera2包中的主要类:
其中 CameraManager 是那个站在高处统管所有摄像投设备(CameraDevice)的管理者,而每个 CameraDevice 自己会负责建立 CameraCaptureSession 以及建立 CaptureRequest。
CameraCharacteristics 是 CameraDevice 的属性描述类,非要做个对比的话,那么它与原来的 CameraInfo 有相似性。
Camera2 API调用基础流程:
- 通过context.getSystemService(Context.CAMERA_SERVICE) 获取CameraManager;
- 调用CameraManager .open()方法在回调中得到CameraDevice;
- 通过CameraDevice.createCaptureSession() 在回调中获取CameraCaptureSession;
- 构建CaptureRequest, 有三种模式可选 预览/拍照/录像.;
- 通过 CameraCaptureSession发送CaptureRequest, capture表示只发一次请求, setRepeatingRequest表示不断发送请求;
- 拍照数据可以在ImageReader.OnImageAvailableListener回调中获取, CaptureCallback中则可获取拍照实际的参数和Camera当前状态。
获取数据后对接RTMP推送:
通过OnImageAvailableListenerImpl 获取到原始数据,推送端以大牛直播SDK https://github.com/daniulive/SmarterStreaming/ 的万能推送接口为例,获取数据后,调用SmartPublisherOnImageYUV420888() 完成数据传送,底层进行二次处理后,编码后传输即可。
接口描述:
以上就是基础的Android Camera2介绍,和RTMP调用流程,感兴趣的可以自行学习。
以上是关于如何实现RTMP推送Android Camera2数据的主要内容,如果未能解决你的问题,请参考以下文章
实现手机直播推送屏幕推送及录像功能RTMP推流组件之EasyRTMP-Android设置授权Key介绍
实现手机直播推送屏幕推送及录像功能RTMP推流组件之EasyRTMP-Android使用H265编码流程
Android平台实现系统内录(捕获播放的音频)并推送RTMP服务技术方案探究
利用Android Camera2 的照相机api 实现 实时的图像采集与预览
简单高效易用的全平台(Windows/Linux/ARM/Android/iOS)web实现RTMP推送组件EasyRTMP-Android BUS传递消息过程介绍
简单高效易用Windows/Linux/ARM/Android/iOS平台实现RTMP推送组件EasyRTMP-Android MediaCodec硬编码流程介绍