音频采集spring_ws_webrtc (html采集麦克风转gb711并发送广播播放)完整案例

下载地址:http://www.gxcode.top/code
在这里插入图片描述

项目说明

 springboot+webscoekt+webrtc
项目通过前端webrtc采集麦克风声音,通过websocket发送后台,然后处理成g711-alaw字节数据发生给广播UDP并播放。
后台处理项目使用线程池(5个线程)接受webrtc数据并处理g711-alaw字节数组放到Map容器中,在开一个线程实时获取Map容器中数据通过UDP发送。
项目采集采集麦克风数据稳定,个人已测试放心可用。

设置方法:

1、地址栏输入chrome://flags/, 搜索unsafely
2、enabled 并填入要授信的域名
3、按浏览器提示重启浏览器

使用说明:

1.WebRtcWSServer类onMessage接受webrtc.html采集客户数据-->>MyTask类下run()生成的,每一包数据存放D:\home\0 目录下2.WebRtcWSServer类下把pcm存到一个文件中用于测试看采集的数据是否正确,D:\home\2 目录下
try {Path path = Paths.get(localUrl);byte[] fileBytes = Files.readAllBytes(path);FileWriteUt.byteWriteToPcm(fileBytes);
} catch (IOException e) {e.printStackTrace();
}3.WebSocketUtilPro中获取每包pcm转gb711数据包,都存放到D:\home\2 目录下
public void run() {while(WebSocketUtilPro.mapBoolean.get("79")!=null && WebSocketUtilPro.mapBoolean.get("79")) {st = System.currentTimeMillis();if(mapBytes.get(drillDeviceId)!=null && mapBytes.get(drillDeviceId).size()>0){Map<Integer, Map<Long,byte[]>> sortMap = sortMapByKey(mapBytes.get(drillDeviceId));List<Integer> keysToRemove = new ArrayList<>();for (Integer key : sortMap.keySet()) {Map<Long,byte[]> bytes = sortMap.get(key);bytes = sortMapByKey1(bytes);for (Long aLong : bytes.keySet()) {byte[] aByte = bytes.get(aLong);//方式1:这里把录音文件保存本地 FileWriteUt.byteWriteToG711(aByte); //方式; 2:把录音字节数据发送广播udp播放。}System.out.println(">>>>>>>>>>>>>第" + key +"包,数据发送完,耗时"+(System.currentTimeMillis()-st)+"ms" );keysToRemove.add(key);}// 删除需要删除的键for (Integer key : keysToRemove) { mapBytes.get(drillDeviceId).remove(key); }}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/877600.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mac如何恢复被同名替换掉的文件夹 mac文件被替换如何恢复

Mac系统一直以高性能遥遥领先其他的Windows系统&#xff0c;因此&#xff0c;Mac虽然价格远远高出其他的笔记本电脑&#xff0c;但是还是受到了一众用户的青睐。使用mac时&#xff0c;我们也经常会将一个文件命名为已经有了相同文件的文件名&#xff0c;且保存到同一个目标地址…

SQL - 内置函数

处理数值数据的函数 round(3.555,2) //四舍五入&#xff0c;第二个参数为精度值&#xff0c;为3.56 truncate(3.999,2) //用来截断数字&#xff0c;第二个参数为保留位数&#xff0c;为3.99 ceiling(7.1) //上限函数&#xff0c;返回不小于数字的最小整数&#xff0c;为8 foolr…

MATLAB-PSO-BiTCN-BiLSTM-Attention多变量分类

一、数据集 数据特征&#xff1a;12个多分类&#xff1a;4分类 ​ 二、PSO-BiTCN-BiLSTM-Attention网络 PSO-BiTCN-BiLSTM-Attention 网络是一种结合了多种深度学习技术和优化算法的复杂模型&#xff0c;用于处理时序数据任务&#xff0c;如时间序列预测、分类或其他相关问题…

白骑士的HTML教学实战项目篇 4.1 创建个人网站

创建个人网站不仅是展示自己作品、技能和兴趣的理想方式&#xff0c;也是实践HTML、CSS、JavaScript等前端技术的绝佳机会。在本篇博客中&#xff0c;我们将带你一步步构建一个功能齐全、视觉美观的个人网站。从最初的网站规划与设计&#xff0c;到实现页面导航与布局&#xff…

【Linux】——进程概念(万字解读)

一 冯诺依曼体系结构 在此之前&#xff0c;我们先要理解我们计算机的冯诺依曼体系结构&#xff0c;因为是进程的基础 我们所有的操作其实都是基于这样一个模型&#xff0c;比如你在qq上&#xff0c;和别人发送消息&#xff0c;这个消息肯定是先通过输入设备进行输入&#xf…

一个注解轻松搞定审计日志服务!

【审计日志】&#xff0c;简单的说就是系统需要记录谁&#xff0c;在什么时间&#xff0c;对什么数据&#xff0c;做了什么样的更改&#xff01;任何一个 IT 系统&#xff0c;如果要过审&#xff0c;这项任务基本上也是必审项&#xff01; 实现【审计日志】这个需求&#xff0…

整体思想以及取模

前言&#xff1a;一开始由于失误&#xff0c;误以为分数相加取模不能&#xff0c;但是其实是可以取模的 这个题目如果按照一般方法&#xff0c;到达每个节点再进行概率统计&#xff0c;但是不知道为什么只过了百分之十五的测试集 题目地址 附上没过关的代码 #include<bits…

Vue3知识干货分享

在 Vue 3 中&#xff0c;setup 函数的写法有两种主要方式&#xff1a;一种是使用 <script setup> 标签&#xff0c;另一种是写在 export default 对象中作为 setup 函数。它们之间的区别如下&#xff1a; <script setup> 标签 位置&#xff1a;使用 <script set…

联想闪电鲨移动硬盘文件没删除却消失了怎么办

在日常的数据存储与管理中&#xff0c;移动硬盘作为便携且容量可观的存储设备&#xff0c;深受用户青睐。然而&#xff0c;当您发现联想闪电鲨移动硬盘中的文件突然消失&#xff0c;而您确信并未进行删除操作时&#xff0c;这无疑会令人感到困惑与焦虑。本文旨在为您揭开这一谜…

vue-element-admin——<keep-alive>不符合预期缓存的原因

vue-element-admin——<keep-alive>不符合预期缓存的原因 本文章&#xff0c;以现在中后台开发用的非常多的开源项目vue-element-admin为案例。首先&#xff0c;列出官方文档与缓存<keep-alive>相关的链接&#xff08;请认真阅读&#xff0c;出现缓存<keep-ali…

在IEDA里打包Maven项目记录

之前在网上查找到的方式发现比较繁琐&#xff0c;所以把自己的解决办法记录一下分享给兄弟们 <plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>3.2.4</vers…

集合及数据结构第一节————初识集合框架和数据结构

系列文章目录 集合及数据结构第一节————初识集合框架和数据结构 初始集合框架和数据结构 什么是集合框架&#xff1f;集合框架的重要性背后所涉及的数据结构以及算法数据结构的基本概念和术语逻辑结构和物理结构数据类型 文章目录 系列文章目录集合及数据结构第一节——…

文件的读写(标准库函数与系统调用函数),文件描述符的复制

文件描述符 为了解决内核对象在可访问性与安全”性之间的矛盾&#xff0c;Unix系统通过所谓的文件描述符&#xff0c;将位于内核空间中的文件表项间接地提供给运行于用户空间中的程序代码。为了便于管理在系统中运行的各个进程&#xff0c;内核会维护一张存有各进程信息的列表&…

浮点数计算

看这么一小段内容&#xff1a; Test public void testDouble() {double a 0.0000010;double b 10.0;log.info("a * b {}", a * b); } 想要的是通过计算a*b后获取到的值应该是0.00001&#xff0c;但是实际上算出来的值是&#xff1a; a * b 9.999999999999999E…

C++智能指针配合STL模板类

代码 #include <unordered_map> #include <set> #include <memory> class ResID { public:using SP std::shared_ptr<ResID>;ResID() default;ResID(const std::string& id, const std::string& type): m_id(id), m_type(type){}public:~Re…

HoloLens 坐标系统 Coordinate systems

Hololens 和 Unity 空间坐标系统-CSDN博客文章浏览阅读79次。这意味着&#xff0c;在 X、Y 或 Z 轴上相距 2 个单位的物体&#xff0c;在混合现实中的渲染效果是相距 2 米。虽然左手坐标和右手坐标是最常见的系统&#xff0c;但 3D 软件中也会使用其他坐标系。例如&#xff0c;…

Veritas NBU8.3.0.2 安装部署环境备份实施介绍(篇一)

1、本次有两台NBU服务器&#xff0c;都是Windows Server 2016 Standard 2、一台作为Master Server角色&#xff0c;另外一台则作为Media Server角色 3、两台服务器均已加入域并关闭防火墙 4、后期备份客户端会有Linux和Windows系统&#xff0c;也会对接VCenter无代理备份虚拟…

springboot controller参数中如何传递字符串数组

在Spring Boot的Controller中&#xff0c;接收字符串数组作为参数可以通过以下几种方式实现&#xff0c;取决于传递数组的方式&#xff08;比如通过请求参数、路径变量、或者请求体&#xff09;。以下是常见的方法&#xff1a; 1. 通过请求参数传递字符串数组 你可以通过Requ…

xss靶场详解

目录 1.第一题 2.第二题 3.第三题 4.第四题 5.第五题 6.第六题 7.第七题 8.第八题 1.第一题 在源码script标签里边&#xff0c;innerhtml是用于访问或修改 HTML 元素内的 HTML 内容的&#xff0c;这里是访问spaghet这个元素的&#xff0c;并通过括号里面的东西搜索当前…

图搜v1.1.3 - 图库几千张图片再也不怕了

图搜是一款使用先进的自然语言处理技术的相册搜索助手&#xff0c;支持通过简单的描述来搜索相册中的图片&#xff0c;如“草丛中的猫”或“公园里的狗”。这款应用完全免费、无需内购&#xff0c;且完全离线使用&#xff0c;保证了用户数据的安全与私密性。它的高效索引系统确…