Android平台RTMP推送或GB28181设备接入端如何实现采集audio音量放大?

2023-10-26

我们在做Android平台RTMP推送和GB28181设备对接的时候,遇到这样的问题,有的设备,麦克风采集出来的audio,音量过高或过低,特别是有些设备,采集到的麦克风声音过低,导致播放端听不清前端采集的audio,这时候,就需要针对采集到的audio,做音量放大处理。

先说如何采集,android平台通用的做法是采集audiorecord,设置audio的采样率和channels,为了便于数据进行二次处理,或者同时投递给多个实例,我们的做法,是把采集到的audio,回调上来,然后再设置到jni层:

void CheckInitAudioRecorder() {
  if (audioRecord_ == null) {
    audioRecord_ = new NTAudioRecordV2(this);
  }

  if (audioRecord_ != null) {
    Log.i(TAG, "CheckInitAudioRecorder call audioRecord_.start()+++...");

    audioRecordCallback_ = new NTAudioRecordV2CallbackImpl();

    audioRecord_.AddCallback(audioRecordCallback_);

    audioRecord_.Start(16000, 1);

    Log.i(TAG, "CheckInitAudioRecorder call audioRecord_.start()---...");
  }
}

audio回调处理:

class NTAudioRecordV2CallbackImpl implements NTAudioRecordV2Callback {
  @Override
  public void onNTAudioRecordV2Frame(ByteBuffer data, int size, int sampleRate, int channel, int per_channel_sample_number) {

    if ((isPushingRtmp || isRTSPPublisherRunning) && publisherHandle != 0) {
      libPublisher.SmartPublisherOnPCMData(publisherHandle, data, size, sampleRate, channel, per_channel_sample_number);
    }
  }
}

如何实现audio音量放大?

输入音量的调节,需要注意的是,处理音频音量时要尽可能线性,以防止溢出。我们针对jni层的设计如下:

/**
	 * 设置输入音量, 这个接口一般不建议调用, 在一些特殊情况下可能会用, 一般不建议放大音量
	 *
	 * @param index: 一般是0和1, 如果没有混音的只用0, 有混音的话, 0,1分别设置音量
	 *
	 * @param volume: 音量,默认是1.0,范围是[0.0, 5.0], 设置成0静音, 1音量不变
	 *
	 * @return {0} if successful
	 */
	public native int SmartPublisherSetInputAudioVolume(long handle, int index, float volume);

调用逻辑如下:

in_audio_volume_selector_ = (Spinner) findViewById(R.id.in_audio_volume_selector);

        final String[] in_audio_volume_sel = new String[]{"0", "0.2", "0.5", "0.8", "1", "1.5", "2", "2.5", "3", "3.5", "4", "4.5", "5"};
        ArrayAdapter<String> adapter_in_audio_volume = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, in_audio_volume_sel);

        adapter_in_audio_volume.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        in_audio_volume_selector_.setAdapter(adapter_in_audio_volume);

        in_audio_volume_selector_.setSelection(4, true);

        in_audio_volume_selector_.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> parent, View view,
                                       int position, long id) {
                Log.i(TAG, "Currently audio volume choosing: " + in_audio_volume_sel[position]);

                in_audio_volume_ = Float.parseFloat(in_audio_volume_sel[position]);

                Log.i(TAG, "Choose audio volume=" + in_audio_volume_);

                if (isPushingRtmp || isRTSPPublisherRunning) {
                    if (libPublisher != null && publisherHandle != 0) {
                        libPublisher.SmartPublisherSetInputAudioVolume(publisherHandle, 0, in_audio_volume_);
                    }
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });

感兴趣的开发者,可以参考实现,需要注意的是,audio采集可能不限于麦克风,也可能是第三方数据采集源,所以接口设计的时候,尽量考虑在jni层针对数据源做处理,此外,除了音量放大外,还可以做音量缩小,或者实时静音。

 

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

Android平台RTMP推送或GB28181设备接入端如何实现采集audio音量放大? 的相关文章

  • 运动估计与运动补偿

    运动估计与运动补 偿 改正 2010 11 17 10 29 29 运动补偿是通过先前的局部图像来预测 补偿当前的局部图像 它是减少帧序列冗余信息的有效方法 运动估计是从视频序列中抽取运动信息的一整套技术 运动估计与运动补偿技术 MPEG
  • WebRTC实现多人视频聊天

    写在前面 实现房间内人员的视频聊天 由于并未很完善 所以需要严格按照步骤来 当然基于此完善 就是时间的问题了 架构 整个设计架构如下 图片来自于参考博文 我使用的是第一种Mesh 架构 无需任何流媒体服务器 直接利用成熟的WebRTC 协议
  • RTSP和RTP、RTCP协议介绍

    一 RTSP 1 简介 RTSP Real Time Stream Protocol 协议是一个基于文本的多媒体播放控制协议 属于应用层 RTSP以客户端方式工作 对流媒体提供播放 暂停 后退 前进等操作 它主要用来控制具有实时特性的数据的
  • 如何快速实现Android平台前端设备接入能力

    技术背景 SIP 会话初始化协议 是在 IP网络上进行多媒体通信的应用层控制协议 以几种RFC的形式提供 其中最重要的是包含核心协议规范的RFC3261 该协议用于创建 修改和终止与一个或多个参与者的会话 通过会话 我们了解了一组进行通信的
  • Red5应用开发(二)直播串流与录制

    环境 操作系统 win10 1803 Eclipse版本 4 7 3a Oxygen J2EE版本 Red5 Server版本 1 0 8 Release 环境搭建参考前一篇文章 Red5应用开发 一 开发环境搭建 后续不再涉及red5 f
  • 国家开源软件资源库

    http yp oss org cn software show cat php cat id 5 基本信息 成熟度 Dimdim 2009 05 19 1 2 3 4 5 6 7
  • 交换机端口镜像及Wireshake抓包

    1 首先配置交换机 先将交换机断开与其他交换机连接的网线 保证电脑端只与这一个交换机通信 2 之前配置过交换机的 如果记得IP 可以直接通过交换机的IP进行登录 3 如果忘记交换机的IP 则可以重置 交换机上有一个reset按键 重置后 我
  • Android平台GB28181设备接入模块分辨率发生变化怎么办?

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

    搭建环境为Centos 7 2 64bit 一 安装gcc编译器 yum install gcc c 二 安装live555 wget http www live555 com liveMedia public live555 latest
  • RTP和RTCP详解

    1 RTP和RTCP详解 文章目录 1 RTP和RTCP详解 1 1 概述 1 2 RTP协议详解 1 3 RTCP协议详解 1 1 概述 在流媒体相关的领域 我们进场会看到RTP RTCP 其用于流式传输的最常见的码流传输协议 位于传输层
  • 视频中的I帧、B帧、P帧

    视频文件都是一帧一帧存储的 为了使文件的大小减小 通常会对文件进行压缩 mpeg4 MP4 文件中的每一帧开始都是固定的 00 00 01 b6 那么在接下来的每一帧分别是什么帧呢 I帧 B帧 P帧 一般在这固定帧的后面2bit就是标志是什
  • RTP时间戳概念

    RTP协议不依赖于底层协议 由于UDP包的快速 时实性高的特点 它通常和UDP结合在一起 作为UDP的上层载体数据的形式传播 typedef struct rtp header t uint32 t v 2 protocol version
  • Android平台一对一音视频通话方案对比:WebRTC VS RTMP VS RTSP

    一对一音视频通话使用场景 一对一音视频通话都需要稳定 清晰和流畅 以确保良好的用户体验 常用的使用场景如下 社交应用 社交应用是一种常见的使用场景 用户可以通过音视频通话进行面对面的交流 在线教育 老师和学生可以通过音视频通话功能进行实时互
  • 基于SRS的视频直播服务器搭建

    srs提供的一个demo实例 包括实时流的rtmp播放 hls播放 视频会议 ffmpeg视频变换 jwplayer播放 OSMF播放 vlc播放等等功能 下面是在Centos 6 x环境下的编译搭建流程 1 下载或更新源码或者使用git更
  • 公网可用的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帧
  • 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
  • 海康、大华IpCamera RTSP地址和格式

    大家注意 我下面文章描述的都是海康老款摄像机的RTSP规则 现在新的DS 系列 摄像机型号为DS 开头的 的摄像机RTSP规则为 http blog csdn net xiejiashu article details 71786187 海
  • 深入理解Google Cast(一)基本概念

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

随机推荐

  • 网管实战(6):忘记交换机密码的处理(HUAWEI S5735)

    今天拿到一台华为S5735的交换机 有密码进不去 网上找资料进入了 记录下来以备后查 利用交换机的BootROM提供了清除Console口密码的功能 在用户使用Console口登录的时候跳过密码检查 进入交换机后修改Console口密码 然
  • String类常见构造方法大全(Java)

    目录 字符串 String 1 字符串的拼接与反转 2 金额转换 字符串 StringBuilder 字符串 StringJoiner 综合练习 字符串 String 构造方法摘要 字符串的内容是不会发生改变的 他的对象在创建后不能被更改
  • sql server 备份还原(相关文章很凌乱)

    1 首先安装Microsoft SQL Server Management Studio 下载 SQL Server Management Studio SSMS SQL Server Management Studio SSMS Micr
  • 反编译--jadx的下载使用与配置

    下载与安装 git clone https github com skylot jadx git cd jadx gradlew dist 找到 jadx gui bat文件双击安装即可
  • 基于综合指标的冬小麦长势无人机遥感监测

    用于描述作物长势的指标 苗情 作物密度 叶面积指数 LAI 生物量 干物质量 光合色素含量 目前有关小麦长势监测的研究 多数是以LAI 叶片叶绿素含量 氮素含量 水分含量 生物量单个指标反映小麦长势 本文尝试将LAI 叶片叶绿素含量 氮素含
  • nvm安装与使用

    一 介绍 nvm 全称 Node Version Manager 顾名思义它是用来管理 node 版本的工具 方便切换不同版本的Node js 二 使用 nvm 的使用非常的简单 跟 npm 的使用方法类似 2 1 下载安装 首先先下载 n
  • 6.7行为型---中介者模式

    在现实生活中 常常会出现好多对象之间存在复杂的交互关系 这种交互关系常常是 网状结构 它要求每个对象都必须知道它需要交互的对象 例如 每个人必须记住他 她 所有朋友的电话 而且 朋友中如果有人的电话修改了 他 她 必须告诉其他所有的朋友修改
  • float和double的范围和精度

    float与double的范围和精度 1 范围 float和double的范围是由指数的位数来决定的 float的指数位有8位 而double的指数位有11位 分布如下 float 1bit 符号位 8bits 指数位 23bits 尾数位
  • MySQL --- 常用函数 - 字符串函数

    函数 MySQL 函数会对传递进来的参数进行处理 并返回一个处理结果 也就是返回一个值 MySQL 包含了大量并且丰富的函数 咱们讲解几十个常用的 剩下的比较罕见的函数我们可以到 MySQL 参考手册 查询 字符串函数 函数 作用 UPPE
  • STM32 Keil:warning: #223-D: function "LED_Init" declared implicitly

    include stm32f10x h include led h int main LED Init while 1 GPIO SetBits GPIOD GPIO Pin 6 运行时警告 warning 223 D function L
  • 【Android】dumpsys activity package $packagename

    具体作用后续跟进检讨补全
  • 线性代数的本质(一)

    文章目录 向量空间 向量及其性质 基与维数 向量的坐标运算 线性代数的本质 3blue1brown 高中数学A版选修4 2 矩阵与变换 线性代数及其应用 第五版 高等代数简明教程 蓝以中 向量空间 In the beginning Gran
  • 机器学习第五课--广告点击率预测项目以及特征选择的介绍

    这个项目的主要的目的是通过给定的广告信息和用户信息来预测一个广告被点击与否 如果广告有很大概率被点击就展示广告 如果概率低 就不展示 因为如果广告没有被点击 对双方 广告主 平台 来讲都没有好处 所以预测这个概率非常重要 也是此项目的目标
  • Description Resource Path Location Type Java compiler level does not match the version of the instal

    解决办法 在项目上右键Properties Project Facets 在打开的Project Facets页面中的Java下拉列表中 选择相应版本 有可能是java1 6 改成java6之类的
  • 【Python】平面多边形Wachspress坐标、中值坐标的计算及其等高线

    平面多边形Wachspress坐标 中值坐标的计算及其等高线 代码仅供参考 复杂度极高 暂时无优化 1 Wachspress坐标等高线绘制 1 1 程序 计算有向面积 def dir acr point1 point2 point3 res
  • Unity3d——ParticleSystem粒子光环

    记录一下学习的过程 首先是Inspector视窗中Particle System的属性 可以通过修改属性来改变粒子的效果 基本属性 Duration 发射器发送粒子持续的时间 比如设置为5 就是5秒后不再发送新的粒子 Looping 循环发
  • 1140: 小数点后第n位 多实例java

    import java util Scanner public class oj1 public static void main String args Scanner input new Scanner System in int t
  • 利用OpenGL设计贪吃蛇游戏

    利用OpenGL设计贪吃蛇游戏 文章目录 利用OpenGL设计贪吃蛇游戏 任务介绍 游戏玩法 开发环境 游戏实现 贪吃蛇游戏的框架搭建 主程序 游戏类 游戏对象类 工具类 着色器类 摄像机类 精灵渲染类 场景 蛇 食物的渲染 场景 蛇 食物
  • Windows 下将Python项目打包为.exe可执行文件

    Pycharm 打包为 exe 可执行文件 01 安装 PyInstaller 模块 02 打包文件 01 安装 PyInstaller 模块 Python 项目编写完成后 可以将其打包成一个 exe 可执行文件 这样即使计算机上没有Pyt
  • Android平台RTMP推送或GB28181设备接入端如何实现采集audio音量放大?

    我们在做Android平台RTMP推送和GB28181设备对接的时候 遇到这样的问题 有的设备 麦克风采集出来的audio 音量过高或过低 特别是有些设备 采集到的麦克风声音过低 导致播放端听不清前端采集的audio 这时候 就需要针对采集