Android平台GB28181设备接入模块分辨率发生变化怎么办?

2023-11-07

技术背景

我们在做Android平台gb28181设备接入模块的时候,遇到这样的情况,比如横竖屏分辨率不锁定,采集摄像头的时候,可以实现,横屏状态采集横屏,竖屏状态采集竖屏,简单来说,横屏状态比如采集的1280*720的,竖屏状态,采集的数据源成了720*1280。

这块对我们来说,已经轻车熟路了,老早就已经处理,分辨率发生变化的时候,会重启encoder,确保正常兼容,不幸的是,好多gb28181平台侧,对分辨率切换,支持的并不友好,分辨率发生变化的时候,有些国标平台播放上来的视频流的时候,会直接crash。

分辨率变化,其实多数国标平台厂商都可以兼容,或者说应该兼容,如果国标平台侧不兼容的话,我们可以在android平台gb28181设备接入侧做一定的处理。

技术实现

以Android的camera2为例,我们做了“锁定图像方向”选项:

对应的代码实现如下:

    class ButtonCameraImageOrientationLockListener implements View.OnClickListener {
        public void onClick(View v) {
            is_need_lock_image_orientation_ = !is_need_lock_image_orientation_;

            if (cur_image_orientation_ >= 0)
                cur_image_orientation_ = orientation_;

            if(camera2Helper != null)
                cameraImageRotationDegree_ = camera2Helper.getCameraImageRotationDegree(cur_image_orientation_ < 0 ?orientation_ : cur_image_orientation_);

            btnCameraImageOrientationLock.setText(is_need_lock_image_orientation_?"解锁图像方向" : "锁定图像方向");
        }
    }

 其中,getCameraImageRotationDegree实现如下:

    public int getCameraImageRotationDegree(int device_degree) {
        if (device_degree < 0)
            return -1;

        String camera_id = getCameraId();

        int degree;
        if (CAMERA_ID_BACK.equals(camera_id)) {
            degree = (mSensorOrientation + device_degree + 360) % 360;
            Log.i(TAG, "getCameraImageRotationDegree BACK device_degree:" + device_degree
                    + " SENSOR_ORIENTATION:" + mSensorOrientation + " degree:" + degree);
        }
        else {
            degree = (mSensorOrientation - device_degree + 360) % 360;
            Log.i(TAG, "getCameraImageRotationDegree FRONT device_degree:" + device_degree
                    + " SENSOR_ORIENTATION:" + mSensorOrientation + " degree:" + degree);
        }

        return degree;
    }

针对摄像头rotation变化监测listener:

 /*
  * Github: https://github.com/daniulive/SmarterStreaming   
  */
 class OnOriChangedListener implements OrientationDetector.OriginListener {

        @Override
        public void onOrientationChanged(int orientation, int rotation) {
            orientation_ = orientation;

            if (!is_need_lock_image_orientation_ || cur_image_orientation_ < 0)
                cur_image_orientation_ = orientation_;

            Log.i(TAG, "onOrientationChanged:" + orientation + " rotation:" + rotation + " rotation.toString:" + Camera2Helper.getRotationString(rotation));

            if(camera2Helper != null) {
                camera2Helper.updateOrientation(orientation);
                cameraImageRotationDegree_ = camera2Helper.getCameraImageRotationDegree(cur_image_orientation_ < 0 ?orientation_ : cur_image_orientation_);
            }

            if (layer_post_thread_ != null ) {
                int rotation_degree = cameraImageRotationDegree_;
                if (rotation_degree < 0)
                    layer_post_thread_.updateVideoSize(0, 0);
                else if (90 == rotation_degree || 270 == rotation_degree)
                    layer_post_thread_.updateVideoSize(video_height_, video_width_);
                else
                    layer_post_thread_.updateVideoSize(video_width_, video_height_);
            }
        }
    }

总结

值得一提的是,如果视频分辨率发生变化,本地录像的话,一般来说会切换新的录像文件,国标平台侧如果做的比较好的话,一般都会兼容这种分辨率变化的场景,起码确保分辨率切换的时候,不至于直接crash。

实际上,比如一些执法记录仪等场景下,只需要一个固定的采集方向即可,这种情况下,锁定方向,反而是最好的。

var code = "628e938d-65c5-482b-8e70-c3be3750bbb6"

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

Android平台GB28181设备接入模块分辨率发生变化怎么办? 的相关文章

  • rtmp/rtsp/hls公网真正可用的测试地址

    相信大家在调试播放器的时候 都有这样的困惑 很难找到合适的公有测试源 以下是大牛直播SDK GitHub地址 整理的真正可用的直播地址源 其中 rtmp和rtsp的url 用我们播放器验证通过 1 rtmp 58 200 131 2 193
  • 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以客户端方式工作 对流媒体提供播放 暂停 后退 前进等操作 它主要用来控制具有实时特性的数据的
  • WebRTC建立会话流程分析

    WebRTC建立会话流程总结 了解如何运行PeerConnection Demo后 熟悉运行流程可以做为深入学习WebRTC的切入点 本节重点解释客户端双方建立会话时交互的主要信令 控制会话的文本协议 和与信令相关的 WebRTC API
  • 如何快速实现Android平台前端设备接入能力

    技术背景 SIP 会话初始化协议 是在 IP网络上进行多媒体通信的应用层控制协议 以几种RFC的形式提供 其中最重要的是包含核心协议规范的RFC3261 该协议用于创建 修改和终止与一个或多个参与者的会话 通过会话 我们了解了一组进行通信的
  • 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按键 重置后 我
  • 【无标题】ZLM和wvp配置

    ZLM配置 wvp对zlm要求的配置只有一个 具体值随便设置 以9080为例 http port 9080 wvp配置 确保media gt ip为zlm的IP media gt port为刚才配置的9080 其他wvp配置参考配置说明按需
  • GB28181媒体保活机制探究与实现

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

    搭建环境为Centos 7 2 64bit 一 安装gcc编译器 yum install gcc c 二 安装live555 wget http www live555 com liveMedia public live555 latest
  • GB28181平台如何接入无人机实现智能巡检?

    大家都知道 无人机巡检系统 有效解决了传统巡查工作空间和时间局限问题 降低人力工作成本 有效替代人工巡检工作模式 智能巡检系统通过人工智能技术和机械智能技术完美结合 在工业等场景下 应用非常广泛 本文旨在讲如何实现无人机 如大疆无人机 数据
  • Andorid平台GB28181设备接入端如何生成黑帧并推送至国标平台

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

    RTP协议不依赖于底层协议 由于UDP包的快速 时实性高的特点 它通常和UDP结合在一起 作为UDP的上层载体数据的形式传播 typedef struct rtp header t uint32 t v 2 protocol version
  • Red5应用开发(三) 点播

    Red5点播默认只支持RTMP协议的点播地址 RTSP和HLS需要使用插件的形式进行配置 插件需要自己编译 很多依赖有问题 后期有需求再更新 Github 仓库地址 利用Red5的Eclipse插件生成的默认Red5工程即可直接作为点播应用
  • 基于SRS的视频直播服务器搭建

    srs提供的一个demo实例 包括实时流的rtmp播放 hls播放 视频会议 ffmpeg视频变换 jwplayer播放 OSMF播放 vlc播放等等功能 下面是在Centos 6 x环境下的编译搭建流程 1 下载或更新源码或者使用git更
  • 格式工厂5.10.0版本安装

    目前格式工厂有很多 大多都可以进行视频转换 之前遇到一个用ffmpeg拉流保存的MP4在vlc和迅雷都无法正常播放的问题 发现视频长度不对 声音也不对 最后换到了格式工厂的格式播放器是可以正常播放的 格式工厂下载之家的地址 https ww
  • GB/T28181-2022相对2016版“基于TCP协议的视音频媒体传输要求“规范解读和技术实现

    规范解读 GB T28181 2022和GB T28181 2016规范 有这么一条 更改了附录 D 基于 TCP 协议的视音频媒体传输要求 见附录 D 2016 年版的附录 L 本文主要是针对GB T28181 2022里面提到的 基于
  • 海康、大华IpCamera RTSP地址和格式

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

随机推荐

  • Java图片压缩thumbnailator

    1 依赖 需要thumbnailator包
  • 卷积神经网络之-ZFNet

    更多内容请关注 机器视觉 CV 公众号 原文地址 说在前面 貌似江湖上有两篇 ZFNet 的论文 也即 Visualizing and Understanding Convolutional Networks 最新的请见论文地址 https
  • 【LeetCode】最长回文子串 [M](Manacher算法)

    5 最长回文子串 力扣 LeetCode 一 题目 给你一个字符串 s 找到 s 中最长的回文子串 如果字符串的反序与原始字符串相同 则该字符串称为回文字符串 示例 1 输入 s babad 输出 bab 解释 aba 同样是符合题意的答案
  • Flutter手势--GestureDetector各种手势使用详情

    1 GestureDetector单击手势 序列号 字段 属性 描述 1 onTapDown GestureTapDownCallback 手指按下时的回调函数 2 onTapUp GestureTapUpCallback 手指松开时的回调
  • 解决zookeeper启动失败Could not find or load main class org.apache.zookeeper.server.quorum.QuorumPeerMain报错

    zookeeper的默认日志在 xxxxx apache zookeeper 3 5 9 logs目录下 完整报错名称为 Error Could not find or load main class org apache zookeepe
  • C++学习 三、weak_ptr使用

    C 学习 三 weak ptr使用 前言 weak ptr概述 创建weak ptr对象 创建空weak ptr对象 使用拷贝构造函数初始化weak ptr对象 使用shared ptr对象初始化weak ptr对象 注意 不能使用堆指针初
  • QT 实现简单截图功能

    QT 实现简单截图功能 代码内容完善 有详细的代码注释所以不在赘述 头文件CaptureScreen h ifndef CAPTURESCREEN H define CAPTURESCREEN H include
  • shiro多realm异常解决

    shiro多realm异常解决 1 情况描述 2 自定义token 用户名 密码 使用shiro自带token 1 TelCodeToken 参考shiro自带UserNamePasswordToken 3 自定义Realm 1 Paren
  • opencv从入门到精通 哦吼10

    目录 视频处理 读取并显示摄像头视频 VideoCapture 类 播放视频文件 保存视频文件 小结 视频处理 OpenCV 不仅能够处理图像 还能够处理视频 视频是由大量的图像构成的 这些图像以固定的时间间隔从视频中获取 这样 就能够使用
  • python库-jieba安装(很多库都可以这样安装)

    方式一 直接安装 win R gt cmd gt pip install jieba 亲测安装很多python库的时候大家获取会遇到很多坑 不管是pip命令 conda 命令 Anaconda图形化 或者pycharm导入安装 都会遇到安装
  • PHPStorm超级好用的插件

    一 常用插件 1 Translation 翻译插件 2 CodeGlance 代码地图 3 Key Promoter X 快捷键提示 4 Color Highlighter 颜色代码显示为颜色 5 Database Navigator 数据
  • 在学习k8s时候,pod services 和deployment

    在学习 Kubernetes K8s 时 Pod Service 和 Deployment 是三个非常重要的概念 它们是 Kubernetes 中用于管理容器化应用程序的核心组件 Pod Pods Pod 是 Kubernetes 最基本的
  • Rust学习资源清单

    官网学习栏目 https www rust lang org learn 包含标准库 rustdoc cargo和rustc的文档 第三方库文档 https docs rs 各种第三方库的文档 直接搜索tokio anyhow ftp第三方
  • 数据结构-第二讲 线性结构-学习笔记(MOOC 浙江大学 陈越 何钦铭)

    目录 第二讲 线性结构 2 1 线性表及其实现 2 1 1 引子 多项式表示 2 1 2 线性表及顺序存储 2 1 3 顺序存储的插入和删除 顺序存储 数组实现 code 2 1 4 链式存储及查找 2 1 5 链式存储的插入和删除 2 1
  • JAVA - 对象与对象变量

    对象变量 Date deadline 定义了一个对象变量deadline 它可以引用Date类型的对象 但是 一定要认识到 变量deadline不是一个对象 实际上也没有引用对象 此时 不能将任何 Date 方法应用于这个变量上 可以显式地
  • 旋转链表(C语言)

    题目 给定一个链表 旋转链表 将链表每个节点向右移动 k 个位置 其中 k 是非负数 示例 1 输入 1 gt 2 gt 3 gt 4 gt 5 gt NULL k 2 输出 4 gt 5 gt 1 gt 2 gt 3 gt NULL 解释
  • 【ChatGPT+MindShow高效生成PPT,保姆级安装教程】

    AI破局先行者 AI工具 AI绘图 AI专栏 如果你想学到最前沿 最火爆的技术 赶快加入吧 作者简介 硕风和炜 CSDN Java领域优质创作者 保研 国家奖学金 JAVA开发技术栈 面试刷题 面经八股文 经验分享 好用的网站工具分享 恭喜
  • Vue.js 学习笔记:项目实战

    项目实战 使用技术栈 Vue 2 x Vue CLI 4 x Element UI 2 x 开发工具自选 VS Code HbuilderX WebStorm 因本人主要是 Java 开发 使用 Idea 安装 Vue js 插件即可开发
  • 图像处理笔试面试题整理1

    1 图像处理笔试面试题 1 https blog csdn net m0 37407756 article details 78800709 1 1 给定0 1矩阵 求连通域 二值图像分析最重要的方法就是连通区域标记 它是所有二值图像分析的
  • Android平台GB28181设备接入模块分辨率发生变化怎么办?

    技术背景 我们在做Android平台gb28181设备接入模块的时候 遇到这样的情况 比如横竖屏分辨率不锁定 采集摄像头的时候 可以实现 横屏状态采集横屏 竖屏状态采集竖屏 简单来说 横屏状态比如采集的1280 720的 竖屏状态 采集的数