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设备接入端如何实现本地录像? 的相关文章

  • NV21、NV12、YV12、RGB565、YUV等颜色编码格式区别和接口设计探讨

    NV21 NV12 YV12 RGB565 YUV扫盲 NV21 NV12 YV12 RGB565 YUV分别是不同的颜色编码格式 这些颜色编码格式各有特点 适用于不同的应用场景 选择合适的颜色编码格式取决于具体的需求和环境 NV21 NV
  • rtmp/rtsp/hls公网真正可用的测试地址

    相信大家在调试播放器的时候 都有这样的困惑 很难找到合适的公有测试源 以下是大牛直播SDK GitHub地址 整理的真正可用的直播地址源 其中 rtmp和rtsp的url 用我们播放器验证通过 1 rtmp 58 200 131 2 193
  • FFmpeg入门详解之92:Live555学习之(一)-------Live555的基本介绍

    Live555学习之 一 Live555的基本介绍 前一阵子 因为项目需要 研究了一下Live555开源框架 研究的不是很深入 基本上把Live555当做API用了一下 但是毕竟也是本人看的第一个开源框架 在此记录总结一下 Live555是
  • RTSP和RTP、RTCP协议介绍

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

    WebRTC建立会话流程总结 了解如何运行PeerConnection Demo后 熟悉运行流程可以做为深入学习WebRTC的切入点 本节重点解释客户端双方建立会话时交互的主要信令 控制会话的文本协议 和与信令相关的 WebRTC API
  • 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
  • Red5应用开发(二)直播串流与录制

    环境 操作系统 win10 1803 Eclipse版本 4 7 3a Oxygen J2EE版本 Red5 Server版本 1 0 8 Release 环境搭建参考前一篇文章 Red5应用开发 一 开发环境搭建 后续不再涉及red5 f
  • 【无标题】ZLM和wvp配置

    ZLM配置 wvp对zlm要求的配置只有一个 具体值随便设置 以9080为例 http port 9080 wvp配置 确保media gt ip为zlm的IP media gt port为刚才配置的9080 其他wvp配置参考配置说明按需
  • GB28181平台如何接入无人机实现智能巡检?

    大家都知道 无人机巡检系统 有效解决了传统巡查工作空间和时间局限问题 降低人力工作成本 有效替代人工巡检工作模式 智能巡检系统通过人工智能技术和机械智能技术完美结合 在工业等场景下 应用非常广泛 本文旨在讲如何实现无人机 如大疆无人机 数据
  • FFmpeg学习(11)——视频转码之-crf参数详解

    什么是固定码率因子crf Constant Rate Factor 固定码率因子 CRF 是 x264 和 x265 编码器的默认质量 和码率控制 设置 取值范围是 0 到 51 这其中越低的值 结果质量越好 同时输出文件越大 越高的值意味
  • Andorid平台GB28181设备接入端如何生成黑帧并推送至国标平台

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

    相关协议规范 GB T28181 2016公共安全视频监控联网系统 信息传输 交换 控制技术要求相关的传输要求如下 5 1 网络传输协议要求 联网系统网络层应支持IP协议 传输层应支持 TCP和 UDP协议 5 2 媒体传输协议要求 视音频
  • 前端实现预览功能,播放rtsp视频流(node.js+ffmpeg+flv.js)

    实现思路 获取摄像头rtsp流 通过node js ffmpeg转码 通过哔哩哔哩flv js播放 1 获取摄像机RTSP流 之前文章有说明不多阐述 2 配置流媒体服务器 1 下载安装node js 运行node js 网上教程很多自行下载
  • 深入理解Google Cast(三)探寻原理

    如何开发一个receiver application 先来简单说一下这个话题 Receiver本质就是一个网页 由html CSS和jacascript开发 如果要自定义receiver application 需要在 Google Cas
  • Android前端音视频数据接入GB28181平台意义

    技术背景 在我们研发Android平台GB28181前端音视频接入模块之前 业内听到最多的是 如何用Android或者Windows端 在没有国标IPC设备的前提下 模拟GB28181的信令和媒体流交互流程 实现GB28181整体方案的测试
  • 格式工厂5.10.0版本安装

    目前格式工厂有很多 大多都可以进行视频转换 之前遇到一个用ffmpeg拉流保存的MP4在vlc和迅雷都无法正常播放的问题 发现视频长度不对 声音也不对 最后换到了格式工厂的格式播放器是可以正常播放的 格式工厂下载之家的地址 https ww
  • GB28181控制、传输流程和协议接口之注册

    注册和注销基本要求 SIP客户端 网关 SIP设备 联网系统等 SIP代理 SIP UA 使用IETFRFC3261中定义的方法 15 GB T28181 2016Register进行注册和注销 注册和注销时应进行认证 认证方式应支持数字摘
  • 最新VLC命令行参数大全(一)

    用法 vlc 选项 流 您可以在命令行中指定多个流 它们将被加入播放列表队列 指定的首个项目将被首先播放 选项风格 选项 用于设置程序执行期间的全局选项 选项 单字母版本的全局 选项 选项 仅对此选项之前的单条流生效 且优先级高于先前的设置
  • 深入理解Google Cast(一)基本概念

    什么是google cast google cast允许用户将手机上的内容投影到TV上 然后用户可以将手机作为遥控器来控制TV上的媒体播放 Google cast SDK用于扩展你的app 使其支持google cast功能 一个Cast

随机推荐

  • 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服务的时候 早已经实现了本地录像功能 本地录像功能 我们实现的主要