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

news2024/11/26 4:46:23

下载地址: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.coloradmin.cn/o/2061145.html

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

相关文章

JAVA基础:字节字符转换流

前言 当我们使用流读取数据时&#xff0c;如果这个数据中含有中文&#xff0c;我们对这个数据进行操作就会出现乱码问题&#xff0c;这时候我们要使用字节字符转换流来处理一下数据。 字节字符转换流 字节字符转换流是一个过程流 字节字符转换流是一个字符流&#xff0c;所…

如何为 SEO 做关键词优化

关键词优化是一种基本的 SEO 技术&#xff0c;可以提高你的网站在搜索结果中的可见度&#xff0c;并吸引更多的访问者。 在这份关键词优化指南中&#xff0c;我们将分享在 SEO 的这一方面脱颖而出所需的知识、技巧和技巧。使用本指南可以超越您的竞争对手&#xff0c;并为您的…

一文搞懂数据标注

hihi,大家好,最近开始和内容那个团队研究SD出图了,作为家具家电行业的小牛人,除了研究SD和ComfyUI本身,需要了解算法同学如何进行模型微调的,因为用的是开源的底座,预训练部分就不深入介绍了,重点看一下二次预训练,在这个过程中有一个环节比较关注就是小规模数据集,也…

【java】RuoYi-Vue前后端分离版本-请求被拦截,怎么修改拦截过滤器,解决方案

【java】RuoYi-Vue前后端分离版本-请求被拦截&#xff0c;怎么修改拦截过滤器 它用到了一个安全管理框架Spring Security 你可以通过这篇文章《Spring Security 详解》 去了解它&#xff0c;怎么使用或者使用原理。 所有业务都受SecurityConfig配置所过滤 SecurityConfig配置…

2024年思维导图工具怎样可以轻松选择

思维导图&#xff0c;作为一种直观、有效的思维工具&#xff0c;凭借其强大的信息整理能力和创意激发潜力&#xff0c;逐渐成为了人们学习、工作和生活中不可或缺的一部分。今天&#xff0c;就让我们一起走进这个充满智慧的领域&#xff0c;探索那些2024年大家都在使用的思维导…

Cleer耳机好不好用?南卡、Cleer、飞利浦、倍思横评对比

​大家好&#xff0c;作为一位多年的数码博主和耳机发烧友&#xff0c;最近后台收到不少私信&#xff0c;都是小伙伴想让我测评一下最近很火热的开放式耳机&#xff0c;那么为了回馈大家这么久的支持&#xff0c;说做就做&#xff01;我买了最近网上很热门的几款开放式耳机&…

电线 硬线 和软线 连接

电线 硬线 和软线 连接 首先把软线&#xff0c;拧成一股&#xff0c;然后搭到硬线上回转一圈&#xff0c;这里要注意线头往反向回转&#xff0c;大家看下图中的软线&#xff0c; 再在硬线上缠绕7—8圈&#xff0c;根据线的长短&#xff0c;过长就剪去一些。 最后将硬导线往后弯…

【速览】设计模式(更新中)

目录 一、背景二、优缺点优点缺点 三、适用场景四、核心组成创建型模式 Creational Design Pattern 5结构型模式 Structural Design Patterns 7行为型模式 Behavioral Design Patterns 11’ 五、底层原理六、对比参考 一、背景 这个技术出现的背景、初衷和要达到什么样的目标或…

【Python开发实践】在线商城系统——需求及需求分析

项目背景及需求 这个练习项目的设置背景是一家图书销售公司&#xff0c;为了扩大销售渠道&#xff0c;想要开通网上商城&#xff0c;利用在线博客和电子商城来销售图书。 具体需求如下&#xff1a; 每个商品可以留言 实现在线购物车处理和订单处理 实现对产品、购物车和订单的…

python | 图片转换为 pdf 实现方法

目录 一、PIL 库简介及安装使用方法 &#xff08;一&#xff09;python 不同版本下 PIL 的使用方法 二、图片转换为 pdf 的两种实现方法 &#xff08;一&#xff09;简易版——pdf 页面尺寸跟随图片大小 &#xff08;二&#xff09;常用版——pdf 每页尺寸统一为 A4 一、P…

C#PACS系统源码,影像存档与传输系统源码,数字化医学影像系统源码,三维重建影像PACS系统源码

C#PACS系统源码&#xff0c;影像存档与传输系统源码&#xff0c;数字化医学影像系统源码&#xff0c;三维重建影像PACS系统源码 PACS即影像存档与传输系统&#xff08;Picture Archiving and Communication System&#xff09;&#xff0c;是医学影像、数字化图像技术、计算机技…

C++遍历for_each

#include <iostream> #include <stack> #include <vector> #include <algorithm> using namespace std; //打印数组 class bianli { public:void operator()(int val){cout << val << " ";} }; void printVector(int val) {cout…

【经验分享】将ui文件转化成py代码

目录 先写一个简单的ui界面 将ui文件另存为 将UI文件转换为py代码 测试一下你生成的py文件 &#x1f31f; 嗨&#xff0c;我是命运之光&#xff01; &#x1f30d; 2024&#xff0c;每日百字&#xff0c;记录时光&#xff0c;感谢有你一路同行。 &#x1f680; 携手启航&…

第R2周:LSTM-火灾温度预测

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、什么是LSTM 1.LSTM的本质 长短时记忆网络&#xff08;Long Short-Term Memory, LSTM&#xff09;的本质是一种特殊的循环神经网络&#xff08;Recurrent…

《Cloud Native Data Center Networking》(云原生数据中心网络设计)读书笔记 -- 05网络虚拟化

本章帮助网络工程师或架构师回答如下问题&#xff1a; 什么是网络虚拟化?网络虚拟化有哪些用途?网络虚拟化领域内有哪些不同的技术方向?网络虚拟化的控制面有哪些选择?当使用 VXLAN 时如何进行桥接和路由&#xff1f; 什么是网络虚拟化&#xff1f; 网络虚拟化可以让网络…

揭秘!格行如何成为随身WiFi界的‘比亚迪’!如何成为随身WiFi热销第一名?

比亚迪把续航超过2000km的油车打入了10万元以内&#xff01;创造历史&#xff01; 为什么这么说&#xff1f;还不是因为这两辆车都搭载了比亚迪最新研发的第五代 Dmi 混动技术。这项技术有多“逆天”&#xff1f;直接创下了三项全球之最——全球最高发动机热效率、百公里最低油…

CUDA C++ 最佳实践指南

CUDA C 最佳实践指南 (nvidia.com)https://docs.nvidia.com/cuda/cuda-c-best-practices-guide/index.html#getting-started2. 异构计算 CUDA 编程涉及在两个不同的平台上同时运行代码&#xff1a;具有一个或多个 CPU 的主机系统和一个或多个支持 CUDA 的 NVIDIA GPU 设备。 …

Hermite 三次插值可编辑样条

欢迎关注更多精彩 关注我&#xff0c;学习常用算法与数据结构&#xff0c;一题多解&#xff0c;降维打击。 问题描述 利用三次样条和Hermite插值制作一个类似于ppt里的曲线工作。 基本思路 对于给定点&#xff0c;初始生成时用参数化三次函数插值的方式生成。三次样条函数插…

【Py/Java/C++三种语言详解】LeetCode743、网络延迟时间【单源最短路问题Djikstra算法】

可上 欧弟OJ系统 练习华子OD、大厂真题 绿色聊天软件戳 od1441了解算法冲刺训练&#xff08;备注【CSDN】否则不通过&#xff09; 文章目录 相关推荐阅读一、题目描述二、题目解析三、参考代码PythonJavaC 时空复杂度 华为OD算法/大厂面试高频题算法练习冲刺训练 相关推荐阅读 …

Java入门:06.Java中的方法--进阶01

1 JVM中方法的执行过程 1.1 JVM内存模型 在java程序的执行过程中会产生一些数据&#xff0c;这些数据将会存在jvm内存中。 JVM将内存分成了不同的逻辑区域&#xff0c;存储不同含义&#xff08;类别&#xff09;的数据 JVM内存模型有5种 方法区 &#xff1a; 存储类信息 堆…