Andorid平台GB28181设备接入端如何生成黑帧并推送至国标平台

2023-11-09

我们在做Android平台GB28181设备接入模块的时候,遇到这样的需求,做移动对讲的时候,是不需要视频数据的,但是国标平台侧,没有视频的话,大多平台又无法播纯音频打包的数据(网页端大多基于http-flv或webrtc实现),基于此,我们做了个简单的处理,通过Bitmap生成个32*32的黑帧,然后,确保上行的音视频数据都有,但是由于视频系黑帧数据,几乎不占用带宽。

废话不多说,上代码:

    class LayerPostThread extends Thread
    {
        private volatile boolean is_exit_ = false;
        private long handle_ = 0;
        ByteBuffer image_buffer_ = null;
        private int width_ = 32;
        private int height_ = 32;

        @Override
        public void run() {
            image_buffer_ = null;

            if (0 == handle_)
                return;

            generateImageBuffer(width_, height_);

            while(!is_exit_) {
                postImageLayer(0, 0, 0, width_, height_);
                waitSleep(40);
            }

            image_buffer_ = null;
        }

        private void generateImageBuffer(int width, int height)
        {
            Bitmap bitmap = android.graphics.Bitmap.createBitmap(width, height, android.graphics.Bitmap.Config.ARGB_8888);
            bitmap.eraseColor(android.graphics.Color.argb(255, 0, 0, 0));

            if (null == bitmap)
                return;

            if ( image_buffer_ != null) {
                image_buffer_.rewind();

                if ( image_buffer_.remaining() < bitmap.getByteCount())
                    image_buffer_ = null;
            }

            if (null == image_buffer_)
                image_buffer_ = ByteBuffer.allocateDirect(bitmap.getByteCount());

            bitmap.copyPixelsToBuffer(image_buffer_);
        }

        private int postImageLayer(int index, int left, int top, int video_w, int video_h) {
            if (video_w < 1 || video_h < 1)
                return  0;

            int scale_w = 0, scale_h = 0, scale_filter_mode = 0;

            libPublisher.PostLayerImageRGBA8888ByteBuffer(handle_, index, left, top, image_buffer_, 0,
                    4*video_w, video_w, video_h,
                    0, 0, scale_w, scale_h, scale_filter_mode,0);

            return 0;
        }

        public void startPost(long handle, int w, int h, boolean is_text, boolean is_pitcure) {
            this.is_exit_ = false;
            this.handle_ = handle;

            try {
                this.start();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        public void stopPost() {
            this.is_exit_ = true;

            try {
                this.join(1000);
            }
            catch (Exception e) {
                e.printStackTrace();
            }

            handle_ = 0;
        }
    }

外部调用逻辑如下:

    private LayerPostThread layer_post_thread_ = null;

    private void startLayerPostThread() {
        if (null == layer_post_thread_) {
            layer_post_thread_ = new LayerPostThread();
            layer_post_thread_.startPost(publisherHandle, video_width_, video_height_, isHasTextWatermark(), isHasPictureWatermark());
        }
    }

    private void stopLayerPostThread() {
        if (layer_post_thread_ != null) {
            layer_post_thread_.stopPost();
            layer_post_thread_ = null;
        }
    }

简单来说,读取到的Bitmap数据,转bytebuffer,然后通过调用PostLayerImageRGBA8888ByteBuffer()接口投递到底层,PostLayerImageRGBA8888ByteBuffer()的接口设计如下:

    /*
     * SmartPublisherJniV2.java
     * Author: daniusdk.com
     */
	/**
	 * 投递层RGBA8888图像,如果不需要Aplpha通道的话, 请使用RGBX8888接口, 效率高
	 *
	 * @param index: 层索引, 必须大于等于0, 注意:如果index是0的话,将忽略Alpha通道
	 *
	 * @param left: 层叠加的左上角坐标, 对于第0层的话传0
	 *
	 * @param top: 层叠加的左上角坐标, 对于第0层的话传0
	 *
	 * @param rgba_plane: rgba 图像数据
	 *
	 * @param offset: 图像偏移, 这个主要目的是用来做clip的, 一般传0
	 *
	 * @param row_stride: stride information
	 *
	 * @param width: width, 必须大于1, 如果是奇数, 将减1
	 *
	 * @param height: height, 必须大于1, 如果是奇数, 将减1
	 *
	 * @param  is_vertical_flip: 是否垂直翻转, 0不翻转, 1翻转
	 *
	 * @param  is_horizontal_flip:是否水平翻转, 0不翻转, 1翻转
	 *
	 * @param  scale_width: 缩放宽,必须是偶数, 0或负数不缩放
	 *
	 * @param  scale_height: 缩放高, 必须是偶数, 0或负数不缩放
	 *
	 * @param  scale_filter_mode: 缩放质量, 传0使用默认速度,可选等级范围是:[1,3],值越大缩放质量越好, 但速度越慢
	 *
	 * @param  rotation_degree: 顺时针旋转, 必须是0, 90, 180, 270, 注意:旋转是在缩放, 垂直/水品反转之后再做, 请留意顺序
	 *
	 * @return {0} if successful
	 */
	public native int PostLayerImageRGBA8888ByteBuffer(long handle, int index, int left, int top,
											 ByteBuffer rgba_plane, int offset, int row_stride, int width, int height,
											 int is_vertical_flip,  int is_horizontal_flip,
											 int scale_width,  int scale_height, int scale_filter_mode,
											 int rotation_degree);

这个接口非常强大,可以针对传下去的数据,进行裁剪、反转等各种操作,感兴趣的开发者可以尝试看看。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Andorid平台GB28181设备接入端如何生成黑帧并推送至国标平台 的相关文章

  • 如何开发一个音视频播放器(ffmpeg3.2+sdl2.0)

    如何开发一个音视频播放器 ffmpeg3 2 SDL2 0 前言 创建一个音视频播放器的步骤 一 播放音频 二 播放视频 三 音视频同步 源码分析 一 正式开始前的准备工作 二 配置音视频基本参数 获取文件基本信息 初始化音频参数 初始化视
  • Android平台GB28181接入端如何对接UVC摄像头?

    我们在对接Android平台GB28181接入的时候 有公司提出这样的需求 除了采集执法记录仪摄像头自带的数据外 还想通过执法记录仪采集外接UVC摄像头 实际上 这块对我们来说有点炒冷饭了 不算新的诉求 大牛直播SDK 在2016年对接RT
  • GB28181-2022注册注销基本要求、注册重定向解读和技术实现

    规范解读 GB28181 2022注册 注销基本要求相对GB28181 2016版本 做了一定的调整 新调整的部分如下 更改了注册和注销基本要求 见 9 1 1 2016 年版的 9 1 1 1 增加对NAT模式网络传输要求 宜增加TCP传
  • Android平台GB28181设备接入端如何实现本地录像?

    实现Android平台GB28181设备接入的时候 有个功能点不可避免 那就是本地录像 实际上 在实现GB28181设备接入模块之前 我们前些年做RTMP推送和轻量级RTSP服务的时候 早已经实现了本地录像功能 本地录像功能 我们实现的主要
  • RTSP和RTP、RTCP协议介绍

    一 RTSP 1 简介 RTSP Real Time Stream Protocol 协议是一个基于文本的多媒体播放控制协议 属于应用层 RTSP以客户端方式工作 对流媒体提供播放 暂停 后退 前进等操作 它主要用来控制具有实时特性的数据的
  • librtmp ssl 1.0.0 到 ssl 1.1.1

    openssl 版本更新了 导致 librtmp 库不能使用 于是查查资料 Compiler errors dereferencing pointer to incomplete type DH aka struct dh st 根据上面的
  • Red5应用开发(二)直播串流与录制

    环境 操作系统 win10 1803 Eclipse版本 4 7 3a Oxygen J2EE版本 Red5 Server版本 1 0 8 Release 环境搭建参考前一篇文章 Red5应用开发 一 开发环境搭建 后续不再涉及red5 f
  • 海康、大华网络摄像机RTSP URL格式组成及参数配置

    经常有开发者咨询我们关于海康 大华网络摄像机RTSP url拼接规则和相关参数配置 虽然很简单 考虑到资料不全 写个博客记录下 1 海康摄像机 在IE浏览器输入网络摄像机的IP地址 输入配置的用户名 密码 登陆 视频 1 码率类型 主码流和
  • 交换机端口镜像及Wireshake抓包

    1 首先配置交换机 先将交换机断开与其他交换机连接的网线 保证电脑端只与这一个交换机通信 2 之前配置过交换机的 如果记得IP 可以直接通过交换机的IP进行登录 3 如果忘记交换机的IP 则可以重置 交换机上有一个reset按键 重置后 我
  • GB/T28181设备接入端如何应用到数字城管场景?

    什么是数字城管 数字城管 又称 数字化城市管理 或 智慧城管 是一种采用信息化手段和移动通信技术来处理 分析和管理整个城市的所有城管部件和城管事件信息 促进城市管理现代化的信息化措施 数字城管通过建立城市管理信息化平台 实现城市管理信息的采
  • GB28181媒体保活机制探究与实现

    规范解读 GB28181 2016和GB28181 2022关于媒体保活机制这块 并无调整 平台 设备媒体流保活机制规定如下 a 链路建立后 码流经过的各级平台应具备媒体流丢失监测能力 若监测到媒体流丢失 应释放该条媒体链路 并通过会话内B
  • RTP时间戳概念

    RTP协议不依赖于底层协议 由于UDP包的快速 时实性高的特点 它通常和UDP结合在一起 作为UDP的上层载体数据的形式传播 typedef struct rtp header t uint32 t v 2 protocol version
  • Unity实现Camera和Audio数据的低延迟RTMP推送技术探讨

    关于Unity实现RTMP直播推送技术方案 之前零散的写过几篇介绍 得到了好多开发者的关注 以Android平台为例 目前视频这块 我们demo实现的是Camera数据的采集 然后编码投递到底层 如果设备没有性能瓶颈 可达到高帧率 60帧
  • 格式工厂5.10.0版本安装

    目前格式工厂有很多 大多都可以进行视频转换 之前遇到一个用ffmpeg拉流保存的MP4在vlc和迅雷都无法正常播放的问题 发现视频长度不对 声音也不对 最后换到了格式工厂的格式播放器是可以正常播放的 格式工厂下载之家的地址 https ww
  • GB28181设备接入侧如何支持H.265?

    技术背景 一直以来 GB28181 2022之前的规范版本让人诟病的一点 没有明确针对H 265的说明 特别是监控摄像机 H 265已然成为标配 GB T28181 2022规范 终于针对H 265做了明确的说明 让我们来一起解读下规范 基
  • GB/T28181-2022相对2016版“基于TCP协议的视音频媒体传输要求“规范解读和技术实现

    规范解读 GB T28181 2022和GB T28181 2016规范 有这么一条 更改了附录 D 基于 TCP 协议的视音频媒体传输要求 见附录 D 2016 年版的附录 L 本文主要是针对GB T28181 2022里面提到的 基于
  • RTP/RTCP/RTSP负载H264的一些问题小结

    以下内容都是基于rfc3984 RTP负载H264时的参数配置 1 在TCP传输时 Transport头中的interleaved参数必须设置 比如0 1 或者2 3 海康的流中出现了4 但是没有配置 所以wireshark也无法解析cha
  • Android平台GB28181设备接入侧(编码前

    在之前 我有写过Android平台GB28181设备接入模块的好多blog 包括参数设置 功能支持与扩展等 以数据接入为例 支持的数据类型涉及编码前 编码后或直接流数据 RTSP或RTMP流 可用于如智能监控 智慧零售 智慧教育 远程办公
  • Android平台RTMP

    我们需要怎样的直播播放器 很多开发者在跟我聊天的时候 经常问我 为什么一个RTMP或RTSP播放器 你们需要设计那么多的接口 真的有必要吗 带着这样的疑惑 我们今天聊聊Android平台RTMP RTSP播放器常规功能 如软硬解码设置 实时
  • 海康、大华IpCamera RTSP地址和格式

    大家注意 我下面文章描述的都是海康老款摄像机的RTSP规则 现在新的DS 系列 摄像机型号为DS 开头的 的摄像机RTSP规则为 http blog csdn net xiejiashu article details 71786187 海

随机推荐

  • 树型结构(二叉树的基础)

    对于树型结构 想必刚开始看见这个词的时候 大家的第一想法一定会是 二叉树吧 但是 笔者所讲的这篇文章不是二叉树 但是 又与二叉树有着关系 树型结构是二叉树的基础 所谓的树型结构是指 树是一种非线性的数据结构 它是由n n gt 0 个有限结
  • 《自然语言处理》第二次实验:机器翻译(Transformer中英文翻译实验)

    文章目录 任务三 按照实验手册进行Transformer中英文翻译实验 步骤 1 OBS创建项目文件夹 步骤 2 下载自然语言处理包 步骤 3 上传实验源码及数据 步骤 4 进入ModelArts开发环境 步骤 1 上传源码和数据至本地容器
  • 微信小程序如何被微信搜索收录?开启页面收录功能,被评定为达标

    微信小程序的内容也跟我们个人博客网站的文章一样 需要被搜索引擎收录后才能吸引自然流量 而微信小程序对应的搜索引擎其实就是微信搜索 所以想要提高收录率 除了发布优质的内容外 还需要确保小程序后台没有关闭 页面收录 功能 同时努力让我们的小程序
  • eslint 报错解决 ,关闭语法检测 vue-admin-template

    关闭eslint语法检测 在 eslintrc js文件中 注释掉 eslint recommended vue config js 里的warnings 和errors 都设为false 找到 eslintignore文件 末尾 加 就好
  • STM32F103使用内部Flash保存参数

    在我们应用开发时 经常会有一些程序运行参数需要保存 如一些修正系数 这些数据的特点是 数量少而且不需要经常修改 但又不能定义为常量 因为每台设备可能不一样而且在以后还有修改的可能 将这类数据存在指定的位置 需要修改时直接修改存储位置的数值
  • L3-005 垃圾箱分布 (30 分)

    题目 题目链接 题解 对每个垃圾箱进行一次队列优化的Dijskra 每算出一个垃圾箱到其余各个居民点的最短距离后 计算这些距离中的最大距离 最短距离 如果最大距离大于要求的距离则直接忽略这个位置放垃圾桶的情况 否则 如果最短距离小于已经记录
  • opencv——颜色识别

    颜色识别 文章目录 颜色识别 前言 一 颜色识别是什么 二 图像处理中对颜色的转换 三 HSV的相关函数和应用流程 步骤展示 实例操作 总结 前言 这段时间一直在弄有关机器视觉识别的问题 在比赛中用到了很多关于颜色识别的视觉算法 感觉在开始
  • java通过poi模板导出excel

    java通过poi来读写excel目前很方便 支持xls和xlsx格式 目前代码支持按照sheet模板导出 并且支持sheet页级的模板复制功能 附上poi的maven配置 Java代码
  • mysql group by失效

    在MySQL5 7之后 sql mode中默认存在ONLY FULL GROUP BY SQL语句未通过ONLY FULL GROUP BY语义检查所以报错 检查代码也都是正确无误那么可以用any value函数解决 例子 select a
  • 图神经网络(1):图卷积神经网络GCN ICLR 2017

    图卷积神经网络GCN ICLR 2017 是曾经在美国加州大学UCI教授 现在荷兰阿姆斯特丹大学教授 Max Welling团队的大作 Max是图灵奖获得者Hinton的弟子 第一作者T N Kipf已经成为这个领域有名的学者和工程师 如果
  • DHCP协议详细解析

    一 DHCP定义 DHCP 动态主机配置协议 是一个应用层的网络协议 指的是由服务器控制一段IP地址范围 客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码 当我们将客户主机ip地址设置为动态获取方式时 DHCP服务器就会根据D
  • Java学习--- MySQL多表查询与自连接

    目录 一 多表查询 二 笛卡尔集 三 非等值连接 四 自连接 五 练习 一 多表查询 基于两个和两个以上的表查询 在实际应用中 单表查询不能满足需求 当在多表查询的条件不能少于表的个数 1 不然会出现笛卡尔集 二 笛卡尔集 多表查询 查询员
  • 在多个浏览器中添加IDM插件

    许多朋友下载了IDM Internet Download Manager 不知如何使用 把包含视频的链接放到软件新建任务 下载下来的的却是网页而不是视频 该软件下载视频的其中一个方法 需安装浏览器插件 通过插件抓取视频下载源 正常来说 我们
  • multicycle path的概念和用法

    通常情况下 两个同步的reg进行timing check时 组合逻辑的delay必须在一个时钟周期内到达 才能满足setup的时序 但是在某些情况下 从一个寄存器输出到另外一个寄存器的data端需要不止一个cycle的时间 而且又不影响逻辑
  • c++之Vector(动态 )

    原文 Vector 向量 C 中的一种数据结构 确切的说是一个类 它相当于一个动态的数组 当无法知道数组的规模有多大时 用来解决问题可以达到最大节约空间的目的 1 用法 include
  • 《结构化思维》读书笔记

    读书使人进步 每天进步一点点 本周小萌精心读的一本书是 结构化思维 主要是讲结构化思考 很棒的一本书 推荐读 麦肯锡金字塔原理 以及其他的麦肯锡结构化思考方法 第一章 初识思维 思维是我们解读事实的起点 是产生行为的源头 是决定结果的根本
  • honeyd路由拓扑

    create router 创建路由器模版 set router personality Cisco 7206 running IOS 11 1 24 指纹 add router tcp port 23 usr share honeyd s
  • python+unittest+ddt,从0到1搭建接口自动化框架

    最近在学习纯代码的接口自动化框架 在网上查阅大量资料后 结合了多个文章 最后使用python unittest ddt实现了一个简单的接口自动化工具 可以实现读取excel中的测试用例 生成测试报告 并发送邮件的功能 下图是项目的框架结构
  • Activiti7正式版- Activiti Cloud SR1

    2019年3月18版本 Activiti7正式版 Activiti Cloud SR1正式发布 我很高兴地宣布第一个服务版本的Activiti Cloud 和Activiti Core artefacts 在从我们的第一次GA迭代中获得大量
  • Andorid平台GB28181设备接入端如何生成黑帧并推送至国标平台

    我们在做Android平台GB28181设备接入模块的时候 遇到这样的需求 做移动对讲的时候 是不需要视频数据的 但是国标平台侧 没有视频的话 大多平台又无法播纯音频打包的数据 网页端大多基于http flv或webrtc实现 基于此 我们