Android平台GB28181设备接入端如何实现本地录像?

2023-11-04

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

本地录像功能,我们实现的主要控制接口如下:

音视频录制开关,为了更细粒度的控制录像,如只需要录纯音频还是纯视频,或者音视频,可以通过下述两个接口实现:

/**
   * 音频录制开关, 目的是为了更细粒度的去控制录像, 一般不需要调用这个接口, 这个接口使用场景比如同时推送音视频,但只想录制视频,可以调用这个接口关闭音频录制
   *
   * @param is_recoder: 0: do not recorder; 1: recorder; sdk默认是1
   *
   * @return {0} if successful
   */
  public native int SmartPublisherSetRecorderAudio(long handle, int is_recoder);

  /**
   * 视频录制开关, 目的是为了更细粒度的去控制录像, 一般不需要调用这个接口, 这个接口使用场景比如同时推送音视频,但只想录制音频,可以调用这个接口关闭视频录制
   *
   * @param is_recoder: 0: do not recorder; 1: recorder; sdk默认是1
   *
   * @return {0} if successful
   */
  public native int SmartPublisherSetRecorderVideo(long handle, int is_recoder);

创建并设置录像目录:

/**
     * Create file directory(创建录像存放目录)
     * 
     * @param path,  E.g: /sdcard/daniulive/rec
     * 
     * <pre> The interface is only used for recording the stream data to local side. </pre> 
     * 
     * @return {0} if successful
     */
    public native int SmartPublisherCreateFileDirectory(String path);
    
    /**
     * Set recorder directory(设置录像存放目录)
     * 
     * @param path: the directory of recorder file.
     * 
     * <pre> NOTE: make sure the path should be existed, or else the setting failed. </pre>
     * 
     * @return {0} if successful
     */
    public native int SmartPublisherSetRecorderDirectory(long handle, String path);

设置单个文件录制的大小:

    /**
     * Set the size of every recorded file(设置单个录像文件大小,如超过最大文件大小,自动切换到下个文件录制)
     * 
     * @param size: (MB), (5M~500M), if not in this range, set default size with 200MB.
     * 
     * @return {0} if successful
     */
    public native int SmartPublisherSetRecorderFileMaxSize(long handle, int size);

启动录像、暂停录像、停止录像,说到这里,好多开发者可能对暂停/恢复录像,比较感兴趣,实际上,我们在具体使用场景下,并不是所有的数据,都想录制下来,比如智慧教室,下课时间,我们无需录制,这时候,只要调用PauseRecorder来暂停录像,等上课后,恢复录像即可。

/**
    * Start recorder(开始录像)
    *
    * @return {0} if successful
    */
    public native int SmartPublisherStartRecorder(long handle);

    /**
     * Pause recorder(暂停/恢复录像)
     *
     * is_pause: 1表示暂停, 0表示恢复录像, 输入其他值将调用失败
     *
     * @return {0} if successful
     */
    public native int SmartPublisherPauseRecorder(long handle, int is_pause);

    /**
    * Stop recorder(停止录像)
    *
    * @return {0} if successful
    */
    public native int SmartPublisherStopRecorder(long handle);

具体调用如下:

class ButtonStartRecorderListener implements View.OnClickListener {
        public void onClick(View v) {
            if (isRecording) {
                stopRecorder();

                if (!isPushingRtmp && !isRTSPPublisherRunning && !isGB28181StreamRunning) {
                    ConfigControlEnable(true);
                }

                btnStartRecorder.setText("实时录像");
                isRecording = false;

                btnPauseRecorder.setText("暂停录像");
                btnPauseRecorder.setEnabled(false);
                isPauseRecording = true;

                return;
            }

            Log.i(TAG, "onClick start recorder..");

            if (libPublisher == null)
                return;

            if (!isPushingRtmp && !isRTSPPublisherRunning&& !isGB28181StreamRunning) {
                InitAndSetConfig();
            }

            ConfigRecorderParam();

            int startRet = libPublisher.SmartPublisherStartRecorder(publisherHandle);
            if (startRet != 0) {
                isRecording = false;

                Log.e(TAG, "Failed to start recorder.");
                return;
            }

            if (!isPushingRtmp && !isRTSPPublisherRunning && !isGB28181StreamRunning) {
                CheckInitAudioRecorder();
                ConfigControlEnable(false);
            }

            startLayerPostThread();

            btnStartRecorder.setText("停止录像");
            isRecording = true;

            btnPauseRecorder.setEnabled(true);
            isPauseRecording = true;
        }
    }

实际上,本地录像和GB28181上去的数据,是同一路编码数据,当然,如果做的更智能一些,也可以分两个实例来实现,一路编码用于GB28181平台接入,一路高分辨率帧率,用于本地录制,具体根据使用场景定制即可。

 

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

Android平台GB28181设备接入端如何实现本地录像? 的相关文章

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

    相信大家在调试播放器的时候 都有这样的困惑 很难找到合适的公有测试源 以下是大牛直播SDK GitHub地址 整理的真正可用的直播地址源 其中 rtmp和rtsp的url 用我们播放器验证通过 1 rtmp 58 200 131 2 193
  • Windows平台实现Unity下窗体

    技术背景 随着Unity3D的应用范围越来越广 越来越多的行业开始基于Unity3D开发产品 如传统行业中虚拟仿真教育 航空工业 室内设计 城市规划 工业仿真等领域 基于此 好多开发者苦于在Unity环境下 没有低延迟的推拉流解决方案 前几
  • GB28181-2022注册注销基本要求、注册重定向解读和技术实现

    规范解读 GB28181 2022注册 注销基本要求相对GB28181 2016版本 做了一定的调整 新调整的部分如下 更改了注册和注销基本要求 见 9 1 1 2016 年版的 9 1 1 1 增加对NAT模式网络传输要求 宜增加TCP传
  • GB28181智慧可视化指挥控制系统之执法记录仪设计探讨

    什么是智慧可视化指挥控制系统 智慧可视化指挥控制平台通过4G 5G网络 WIFI实时传输视音频数据至指挥中心 特别是在有突发情况时 可以指定一台执法仪为现场视频监控器 实时传输当前画面到指挥中心 指挥中心工作人员可通过麦克风向现场执法人员下
  • librtmp ssl 1.0.0 到 ssl 1.1.1

    openssl 版本更新了 导致 librtmp 库不能使用 于是查查资料 Compiler errors dereferencing pointer to incomplete type DH aka struct dh st 根据上面的
  • Linux平台如何实现采集音视频数据并注入轻量级RTSP服务?

    技术背景 好多开发者 问我们最多的问题是 为什么要设计轻量级RTSP服务 轻量级RTSP服务 和RTSP服务有什么区别 针对这个问题 我们的回答是 轻量级RTSP服务解决的核心痛点是避免用户或者开发者单独部署RTSP服务或者RTMP服务 R
  • 6款真正好用的播放器推荐

    GOM player GOM player 是一款本身装有视频播放所需的解码 及占用系统资源少 并且能以最优秀的画质来观看多种格式影片的播放程序 可以支持播放大多数当前流行的视频格式 如 MP4 AVI WMV MKV MOV FLV 等
  • RTP和RTCP详解

    1 RTP和RTCP详解 文章目录 1 RTP和RTCP详解 1 1 概述 1 2 RTP协议详解 1 3 RTCP协议详解 1 1 概述 在流媒体相关的领域 我们进场会看到RTP RTCP 其用于流式传输的最常见的码流传输协议 位于传输层
  • 使用nginx做为http-flv服务如何解决跨域问题

    什么是跨域 跨域是指浏览器的同源策略限制 这个策略会阻止一个域的javascript脚本和另外一个域的内容进行交互 如果一个请求url的协议 域名 端口三者之间任意一个与当前页面的url不同即为跨域 如下图所示即为跨域时的报错 使用ngin
  • 前端实现预览功能,播放rtsp视频流(node.js+ffmpeg+flv.js)

    实现思路 获取摄像头rtsp流 通过node js ffmpeg转码 通过哔哩哔哩flv js播放 1 获取摄像机RTSP流 之前文章有说明不多阐述 2 配置流媒体服务器 1 下载安装node js 运行node js 网上教程很多自行下载
  • GB/T28181-2022图像抓拍规范解读及技术实现

    规范解读 GB28181 2022相对2016 增加了设备软件升级 图像抓拍信令流程和协议接口 我们先回顾下规范说明 图像抓拍基本要求 源设备向目标设备发送图像抓拍配置命令 携带传输路径 会话ID等信息 目标设备完成图像传输后 发送图像抓拍
  • Android平台一对一音视频通话方案对比:WebRTC VS RTMP VS RTSP

    一对一音视频通话使用场景 一对一音视频通话都需要稳定 清晰和流畅 以确保良好的用户体验 常用的使用场景如下 社交应用 社交应用是一种常见的使用场景 用户可以通过音视频通话进行面对面的交流 在线教育 老师和学生可以通过音视频通话功能进行实时互
  • 深入理解Google Cast(三)探寻原理

    如何开发一个receiver application 先来简单说一下这个话题 Receiver本质就是一个网页 由html CSS和jacascript开发 如果要自定义receiver application 需要在 Google Cas
  • 公网可用的RTMP、RTSP测试地址(更新于2021年3月)

    好多博客提到的公网可测试的RTSP和RTMP URL大多都不用了 以下是大牛直播SDK Github 于2021年3月亲测可用的几个URL 有其他可用的URL 也欢迎大家在评论区回复 RTMP流地址 湖南卫视 rtmp 58 200 131
  • Unity实现Camera和Audio数据的低延迟RTMP推送技术探讨

    关于Unity实现RTMP直播推送技术方案 之前零散的写过几篇介绍 得到了好多开发者的关注 以Android平台为例 目前视频这块 我们demo实现的是Camera数据的采集 然后编码投递到底层 如果设备没有性能瓶颈 可达到高帧率 60帧
  • 格式工厂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里面提到的 基于
  • RTP/RTCP/RTSP负载H264的一些问题小结

    以下内容都是基于rfc3984 RTP负载H264时的参数配置 1 在TCP传输时 Transport头中的interleaved参数必须设置 比如0 1 或者2 3 海康的流中出现了4 但是没有配置 所以wireshark也无法解析cha
  • GB28181设备接入端如何播放语音广播数据?

    技术背景 语音广播功能是GB28181设备接入端非常重要的功能属性 语音广播让终端和平台之间 有了实时双向互动 可以满足执法记录仪 智能安全帽 智能监控 智慧零售 智慧教育 远程办公 明厨亮灶 智慧交通 智慧工地 雪亮工程 平安乡村 生产运
  • GB28181状态信息报送解读及Android端国标设备接入技术实现

    今天主要聊聊GB T28181状态信息报送这块 先回顾下协议规范相关细节 然后再针对代码实现 做个简单的说明 状态消息报送基本要求 当源设备 包括网关 SIP设备 SIP客户端或联网系统 发现工作异常时 应立即向本 SIP监控域 的SIP服

随机推荐

  • FPGA学习回顾

    最近正在重新学习FPGA开发 把之前忽略的一些点记录下来 以便日后进行查阅 1 Output 和Output reg的区别 这个问题的回答具体可以看这篇博客 https blog csdn net crjmail article detai
  • 通信方向常用术语及缩略词

    GSM GOBLE SYSTEM FOR MOBILE COMMUNICATION全球移动通信系统 SS SWITCHING SYSTEM交换系统 BSS BASE STATION SYSTEM 基站系统 BSC BASE STATION
  • 32位和64位系统区别及int字节数

    一 64位系统和32位有什么区别 http zhidao baidu com question 100772591 html 1 64bit CPU拥有更大的寻址能力 最大支持到16GB内存 而32bit只支持4G内存 2 64位CPU一次
  • 【电商数仓】数仓搭建之数据应用(application data stpre -- ADS)层(ADS层之用户统计、行为漏斗分析、留存率,七天连续活跃人数,每分钟在线用户数、访客统计,路径分析等)

    一 用户统计 该需求为用户综合统计 其中包含若干指标 以下为对每个指标的解释说明 指标 说明 对应字段 新增用户数 统计新增注册用户人数 new user count 新增下单用户数 统计新增下单用户人数 new order user co
  • GOBY扫描篇

    喜欢大概就是 在我们俩对视的一瞬间 我突然就避开了你的视线 而当你走过去的时候 我却在你背后看了你好久 网易云热评 一 软件简介 新一代网络安全技术 通过为目标建立完整的资产数据库 实现快速的安全应急 二 下载地址 https gobies
  • ANTLR-语法树遍历机制

    文章目录 1 简介 2 主动遍历与被动遍历 3 Listener模式 3 1 使用示例 3 2 原理解析 4 Visitor模式 4 1 使用示例 4 2 原理解析 5 规则文件与Visitor对应关系 1 简介 2 主动遍历与被动遍历 P
  • R计算已知 总体标准差 ,均值 , N 求 置信区间

    葡萄酒进口商需要报告某国葡萄酒瓶中酒的平均度数 根据以往葡萄酒的经验 进口商认为酒的度数呈正态分布 总体标准差为12 进口商随机抽取了60瓶新酒 得出样本均值X 93 给出所有新酒瓶中酒的度数的95 置信区间 xbar 0 093 sigg
  • 分支定价算法求解VRPTW问题(代码非原创)

    参考文献 微信公众号 程序猿声 关于分支定价求解VRPTW的代码 A tutorial on column generation and branch and price for vehicle routing problems 框架 对于
  • CTF.show:萌新:web13

    这次过滤了更多的
  • 用javascript实现动态增加DataGrid行

  • STM32——TIM编码器接口

    文章目录 一 编码器接口简介 二 正交编码器 三 通用定时器框图 四 编码器接口基本结构 五 工作模式 六 实例 均不反相 七 实例 TI1反相 八 编码器接口测速 电路设计 关键代码 一 编码器接口简介 Encoder Interface
  • [转]scanf函数用法

    sscanf 读取格式化的字符串中的数据 swscanf 是 sscanf 的宽字符版本 swscanf 的参数是宽字符串 swscanf不处理 Unicode 全角十六进制或 兼容性区 字符 除此以外 swscanf 和 sscanf 的
  • iOS SDK开发流程

    文章目录 搭建工作区间 1 创建一个本地代码库文件夹 2 创建一个工作区间 3 创建一个项目 4 创建Framework制作的项目 5 添加项目到Workspace 编写和调试Framework 编写SDK代码 1 添加一个类 2 在类里添
  • 读取xml文件,实现JTree树形结构的构建(一)

    JTree是Swing的一个组件 树 一颗树由若干节点 通过层级关系组成 在java中JTree的节点通过DefaultMutableTreeNode类创建 该类实现TreeNode接口 目前我只会一点基础的应用 例如使用DefaultMu
  • 苹果系统itunes连iphone连不上服务器,itunes无法连接iphone的解决方法

    如果是苹果用户 那么基本上都会用到iTunes这款软件 有时候我们在用数据线将iTunes连接上电脑的时候 却发现itunes无法连接iphone 那么 itunes无法连接iphone怎么办呢 处理起来并不难 下面跟着小编一起来看看itu
  • Sping Security前后端分离两种方案

    前言 本篇文章是基于Spring Security实现前后端分离登录认证及权限控制的实战 主要包括以下四方面内容 Spring Seciruty简单介绍 通过Spring Seciruty实现的基于表单和Token认证的两种认证方式 自定义
  • python类的定义——为什么都写了_init_()方法

    在看很多python代码中 都发现关于类的定义 很多都有 init 为什么 初次理解 写上 init 就是为了方便后面的创建实例的时候 给实例绑定上属性 也方便后续类中方法的定义 简言之 就是方便我们后续代码的编写 所以 应该学会掌握 此处
  • unity build 报错 The name 'XXX' does not exist in the current context

    unity build 报错 The name XXX does not exist in the current context The type or namespace name XXX could not be found are
  • 嗅探HTTP网页用户账户密码

    嗅探HTTP网页 一 测试基础 1 ARP基础 使用mac地址和ip地址进行通信的局域网协议 2 HTTP 一种上网 网页请求通信协议 该协议以明文传输 即在传输时不对数据进行加密 因为http的不安全性 所以在局域网环境中 可以通过ARP
  • Android平台GB28181设备接入端如何实现本地录像?

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