返回顶部
首页 > 资讯 > 移动开发 >如何实现RTMP推送Android Camera2数据
  • 663
分享到

如何实现RTMP推送Android Camera2数据

数据rtmpAndroid 2022-06-06 13:06:57 663人浏览 泡泡鱼
摘要

Camera2简介 在Google 推出Android 5.0的时候, Android Camera api 版本升级到了API2(android.hardware.camer

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之前可以想象成用管道方式连接, 如下图:

fig.1

这里引用了管道的概念将安卓设备和摄像头之间联通起来,系统向摄像头发送 Capture 请求,而摄像头会返回 CameraMetadata。这一切建立在一个叫作 CameraCaptureSession 的会话中。

下面是 camera2包中的主要类:

fig.2

其中 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() 完成数据传送,底层进行二次处理后,编码后传输即可。

接口描述:


	
	public native int SmartPublisherOnImageYUV420888(long handle, int width, int height,
													 int crop_left, int crop_top, int crop_width, int crop_height,
													 ByteBuffer y_plane, int y_row_stride,
													 ByteBuffer u_plane, ByteBuffer v_plane, int uv_row_stride, int uv_pixel_stride,
													 int rotation_degree, int is_vertical_flip, int is_horizontal_flip,
													 int scale_width, int scale_height, int scale_filter_mode);

    private class OnImageAvailableListenerImpl implements ImageReader.OnImageAvailableListener {
        @Override
        public void onImageAvailable(ImageReader reader) {
            Image image = reader.acquireLatestImage();
            if ( image != null )
            {
                if ( camera2Listener != null )
                {
                    camera2Listener.onCameraImageData(image);
                }
                image.close();
            }
        }
    }

    @Override
    public void onCameraImageData(Image image) {
        synchronized(this)
        {
            Rect crop_rect = image.getCropRect();
            if(isPushingRtmp || isRTSPPublisherRunning) {
                if(libPublisher != null)
                {
                    Image.Plane[] planes = image.getPlanes();
                    //  crop_rect.left, crop_rect.top, crop_rect.width(), crop_rect.height(),
                    //  这里缩放宽高可以填0,使用原视视频宽高都可以的
                    libPublisher. SmartPublisherOnImageYUV420888(publisherHandle, image.getWidth(), image.getHeight(),
                            crop_rect.left, crop_rect.top, crop_rect.width(), crop_rect.height(),
                            planes[0].getBuffer(), planes[0].getRowStride(),
                            planes[1].getBuffer(), planes[2].getBuffer(), planes[1].getRowStride(), planes[1].getPixelStride(),
                            displayOrientation, 0, 0,
                            videoWidth, videoHeight, 1);
                }
            }
        }
    }

以上就是基础的Android Camera2介绍,和RTMP调用流程,感兴趣的可以自行学习


作者:daniulive


--结束END--

本文标题: 如何实现RTMP推送Android Camera2数据

本文链接: https://lsjlt.com/news/29432.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何实现RTMP推送Android Camera2数据
    Camera2简介 在Google 推出Android 5.0的时候, Android Camera API 版本升级到了API2(android.hardware.camer...
    99+
    2022-06-06
    数据 rtmp Android
  • Android实现Unity3D下RTMP推送的示例
    目录数据采集推送简单调用流程完成接口初始化后,调用Push()接口调用OpenPusher()InitAndSetConfig()ClosePusher()相关Event处理总结关于...
    99+
    2024-04-02
  • Node.js实现数据推送
    场景:后端更新数据推送到客户端(Java部分使用Tomcat服务器)。 后端推送数据的解决方案有很多,比如轮询、Comet、WebSocket。 1. 轮询对于后端来说开发成本最低,就是按照传统的方式处理A...
    99+
    2022-06-04
    数据 Node js
  • 如何在MongoDB中实现数据的实时推送功能
    如何在MongoDB中实现数据的实时推送功能MongoDB是一种面向文档的NoSQL数据库,其特点是具有高可扩展性和灵活的数据模型。在一些应用场景中,我们需要实时地推送数据更新给客户端,以便及时地更新界面或做出相应的操作。本文将介绍如何在M...
    99+
    2023-10-22
    数据处理 MongoDB 实时推送
  • android实现系统信息推送
    本文实例为大家分享了android实现系统信息推送的具体代码,供大家参考,具体内容如下 1、判断是否是启动App,而非刷新界面执行该方法 if (!window.name) {   ...
    99+
    2024-04-02
  • MySQL实现批量推送数据到Mongo
    import pymongo import mysql.connector 连接MySQL数据库 mysql_conn = mysql.connector.connect( host="localhost", user...
    99+
    2023-05-05
    MySQL推送数据到Mongo MySQL Mongo推送数据 MySQL Mongo
  • java实时数据推送功能怎么实现
    要实现Java实时数据推送功能,可以使用WebSocket技术。WebSocket是一种在单个TCP连接上进行全双工通信的协议,它可...
    99+
    2024-02-29
    java
  • 如何用PHP实现消息推送
     什么是消息推送 通过服务器自动推送消息到客户端(浏览器,APP,微信)的应用技术。  为什么要使用消息推送技术 通常情况下都是用户发送请求浏览器显示用户需要的信息。推送技术通过自动传送信息给用户,来减少用于网络上搜索的时间。它根据用户的兴...
    99+
    2023-08-31
    php 开发语言 websocket
  • android离线推送功能怎么实现
    在Android中实现离线推送功能,可以通过以下步骤来操作:1. 首先,你需要选择一个适合的推送服务提供商,这些服务提供商通常会提供...
    99+
    2023-09-28
    android
  • android怎么实现系统信息推送
    这篇文章主要介绍“android怎么实现系统信息推送”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“android怎么实现系统信息推送”文章能帮助大家解决问题。判断是否是启动App,而非刷新界面执行该...
    99+
    2023-06-30
  • thinkphp如何实现友盟消息推送
    这篇文章主要为大家展示了“thinkphp如何实现友盟消息推送”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“thinkphp如何实现友盟消息推送”这篇文章吧。上...
    99+
    2024-04-02
  • Python如何实现推送百度链接
    这篇文章将为大家详细讲解有关Python如何实现推送百度链接,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。通过代码实现抓取个人博客中某一页指定文章链接,并批量将该链接推送到百度站长平台,起到快速收录的目的...
    99+
    2023-06-22
  • 如何利用Redis实现实时推送功能
    如何利用Redis实现实时推送功能,需要具体代码示例概述:实时推送功能是指当服务器端有更新时,能够实时将这些消息推送给客户端,例如在线聊天、消息通知等场景。Redis作为一款高性能的内存数据库,有着快速读写的特性,可以很好地支持实时推送功能...
    99+
    2023-11-07
    redis 功能实现 实时推送
  • PHP如何实现推送NBA赛事结果
    本教程操作环境:Windows7系统、PHP8.1版、DELL G3电脑PHP实现NBA赛事结果即时推送对于平时不能看NBA直播,但又希望第一时间知道喜欢的湖人队的比赛结果。动动小手,简单实现监测湖人队的比赛结果,发送到自己微信、邮箱、钉钉...
    99+
    2024-04-02
  • Android使用个推实现三方应用的推送功能
    PS:用了一下个推.感觉实现第三方应用的推送功能还是比较简单的.官方文档写的也非常的明确. 学习内容: 1.使用个推实现第三方应用的推送. 所有的配置我最后会给一个源代码,内...
    99+
    2022-06-06
    Android
  • php如何实现raw传送数据库
    这篇“php如何实现raw传送数据库”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php如何实现raw传送数据库”文章吧。p...
    99+
    2023-07-04
  • webSocket实现数据的实时推送(附:前后端代码)
            之前开发的一个管理系统项目中,首页是数据大屏展示,一开始我是用JS的setInterval()方法,设置一个时间,每过时间发起一次ajax请求。虽然也能凑活着用,但总感觉不是最优的方法,而且还比较占用资源,所以学习WebSo...
    99+
    2023-09-09
    java 后端 websocket 网络协议 前端
  • Go语言学习之将mp4通过rtmp推送流媒体服务的实现方法
    目录前言环境代码总结前言 最近研究golang音视频处理的时候,试着将mp4推送流媒体服务。下面分享一下代码,大家有需要可以研究一下,按照自己的需求改改。 环境 需要安装:githu...
    99+
    2022-12-24
    go rtmp推流 go rtmp mp4转rtmp推送
  • Android实现几种推送方式解决方案
    本文介绍在Android中实现推送方式的基础知识及相关解决方案。推送功能在手机开发中应用的场景是越来起来了,不说别的,就我们手机上的新闻客户端就时不j时的推送过来新的消息,很方...
    99+
    2022-06-06
    解决方案 Android
  • 使用SignalR推送服务在Android的实现 SignalA
    由于我的版本最低是2.2,所以只有把源码下下来自己改,如果你觉得太多了可自己编译成jar引用,本人不才,对java不是很熟悉,如果此版本中有错误还请大家指出来,此图显示的是安卓...
    99+
    2022-06-06
    signalr Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作