利用websocket实现语音实时对讲

这篇具有很好参考价值的文章主要介绍了利用websocket实现语音实时对讲。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

java获取pcm音频流并通过websocket发送给前端,同时接收前端发送的bytebuffer音频流并解码播放,实现语音对讲。

package com.example.audiodemo.component;


import cn.hutool.core.util.ObjectUtil;
import lombok.SneakyThrows;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.drafts.Draft_6455;
import org.java_websocket.handshake.ServerHandshake;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;


import javax.sound.sampled.*;
import javax.websocket.server.ServerEndpoint;
import java.net.URI;
import java.nio.ByteBuffer;
import java.util.concurrent.CompletableFuture;

@Component
public class AudioServer {

    protected final Logger logger = LoggerFactory.getLogger(this.getClass());
    @Bean
    public WebSocketClient webSocketClient() {


        try {
            WebSocketClient webSocketClient = new WebSocketClient(new URI("ws://" + "172.16.20.69:8080" + "/websocket/audio/123"), new Draft_6455()) {
                @SneakyThrows
                @Override
                public void onOpen(ServerHandshake handshakedata) {
                    logger.info("[websocket] 连接成功");
                }

                @Override
                public void onMessage(String s) {

                }


                @SneakyThrows
                @Override
                public void onMessage(ByteBuffer message) {
                    if (ObjectUtil.isEmpty(message)) {
                        return;
                    }
                    byte[] bytes = new byte[1024];
                    bytes = message.array();
                    AudioFormat format = new AudioFormat(44100, 16, 1, true, false);
                    SourceDataLine sourceDataLine = AudioSystem.getSourceDataLine(format);
                    sourceDataLine.open(format);
                    sourceDataLine.start();
                    byte[] finalBytes = bytes;
                    logger.info("播放中");
                    CompletableFuture.runAsync(() -> {
                        // 休眠  防止过快
                        try {
                            Thread.sleep(500);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        sourceDataLine.write(finalBytes, 0, finalBytes.length );

                    });



                };
                @Override
                public void onClose(int code, String reason, boolean remote) {
                    logger.info("[websocket] 退出连接");
                }

                @Override
                public void onError(Exception ex) {
                    logger.info("[websocket] 连接错误={}", ex.getMessage());
                }
            };
            webSocketClient.connect();
            AudioFormat audioFormat = new AudioFormat(44100, 16, 1, true, false);
            TargetDataLine targetDataLine = AudioSystem.getTargetDataLine(audioFormat);
            targetDataLine.open(audioFormat);
            targetDataLine.start();
            logger.info("录音中");
            SourceDataLine sourceDataLine = AudioSystem.getSourceDataLine(audioFormat);
            sourceDataLine.open(audioFormat);
            sourceDataLine.start();
            byte[] b = new byte[1024];//缓存音频数据
            new Thread(new Runnable() {
                @Override
                public void run() {

                    int a = 0;
                    while(a!=-1) {
                        a = targetDataLine.read(b, 0, b.length);//捕获录音数据
                        webSocketClient.send(b);
                        for (int i = 0; i < b.length; i++) {
                        }
                    }
                }
            }).start();
            return webSocketClient;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;

    }


}

 java获取pcm音频流参考以下链接内容Java编程:实时获取麦克风数据流并进行播放_浅玩电子的博客-CSDN博客_java 获取麦克风文章来源地址https://www.toymoban.com/news/detail-512793.html

到了这里,关于利用websocket实现语音实时对讲的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue中利用websocket实现实时通讯

    目录 一、webSocket是什么? 二、WebSocket 原理 三、WebSocket 特点 四、WebSocket 应用场景 五、使用步骤 1.安装相关依赖 2.在Vue组件中创建WebSocket连接 3.向服务器发送消息 4.关闭WebSocket连接 总结         WebSocket 是一种基于 TCP 协议的全双工通信协议,它可以在单个 TCP 连接上实现

    2024年02月08日
    浏览(37)
  • Vue中如何利用websocket实现实时通讯

    原理很简单,有点像VUE中的EventBus,用emit和on传来传去 首先我们可以先去自己去用node搭建一个本地服务器 步骤如下 1.新建一个app.js,然后创建pagejson.js文件,输入以下指令 npm init -y 2.下载 express包 pnpm  i  express 3.在app.js里面去进行导包创建express实例   4.重启服务器,我们可

    2023年04月08日
    浏览(34)
  • Vue使用WebSocket实现实时获取后端推送的数据。

    Vue可以使用WebSocket实现实时获取后端推送的数据。 1.在Vue项目中安装WebSocket库 可以使用npm或yarn安装WebSocket库: 2.创建WebSocket连接 在Vue组件中创建WebSocket连接,连接到后端WebSocket服务器,代码如下: 上面的代码中,使用WebSocket连接到后端WebSocket服务器,通过监听onmessage事件,

    2024年02月08日
    浏览(39)
  • Whisper 音频转文字模型体验;语音实时转录文字工具

    参考: https://github.com/openai/whisper https://blog.csdn.net/weixin_44011409/article/details/127507692 安装Whisper 和ffmpeg (# on Ubuntu or Debian sudo apt update sudo apt install ffmpeg on Windows using Chocolatey (https://chocolatey.org/) choco install ffmpeg on Windows using Scoop (https://scoop.sh/) scoop install ffmpeg)

    2024年02月11日
    浏览(36)
  • 定时音频数据采集并发送websocket实时播放

    一 定时音频数据采集并发送websocket实时播放 Recorder.js

    2024年02月02日
    浏览(30)
  • unity+webgl+websocket实时口型+二次元语音老婆

    文章开始首先感谢 B站UP: 阴沉的怪咖 提供的最初资源包 2.gif 体验地址 体验地址 www.aixmao.com 不能放视频,看效果去B站链接:B站链接_bilibili UP主提供初始代码地址: Github地址:https://github.com/zhangliwei7758/unity-AI-Chat-Toolkit Gitee地址:https://gitee.com/DammonSpace/unity-ai-chat-toolkit 2、LipSy

    2024年02月02日
    浏览(40)
  • 网站在线客服系统实时语音视频聊天实战开发,利用peerjs vue.js实现webRTC网页音视频客服系统...

    webRTC机制和peerjs库的介绍在其他博客中已经有了很多介绍,这里我直接搬运过来 WebRTC(Web Real-Time Communication)即:网页即时通信。 简单点讲,它可以实现浏览器网页与网页之间的音视频实时通信(或传输其它任何数据),目前主流浏览器都支持该API,WebRTC现在已经纳入W3C标准。

    2024年02月04日
    浏览(42)
  • 关于使用GB28181协议实现与大华摄像机的语音对讲功能小记

    目前只测试了与大华摄像机的语音对讲功能,在此记录下对接工程中遇到的问题和收获。 首先我们需要理清下思路: 第一步要熟悉语音对讲的协议流程,下图为国标28181中的参考图: 这里我们可以简化下流程,只参与与摄像机的信令交互,也就是1,2,3,4,5,14,15   17,

    2023年04月26日
    浏览(118)
  • 基于Whisper语音识别的实时视频字幕生成 (一): 流式显示视频帧和音频帧

    Whistream(微流)是基于Whisper语音识别的的在线字幕生成工具,支持rtsp/rtmp/mp4等视频流在线语音识别 whishow(微秀)是python实现的在线音视频流播放器,支持rtsp/rtmp/mp4等流式输入,也是whistream的前端。python实现原理如下: (1) SPROCESS.run() 的三个子线程负责:缓存流数据,处理音

    2024年04月13日
    浏览(40)
  • 要使用ESP32控制INMP441采集并用MAX98357播放音频实现对讲机

    要使用ESP32控制INMP441采集并用MAX98357播放音频,您需要遵循以下步骤: 1.准备所需的硬件和软件 ESP32开发板 INMP441麦克风模块 MAX98357音频放大器模块 Arduino IDE 2.将ESP32与INMP441连接 将ESP32和INMP441连接如下: ESP32 3.3V引脚 - INMP441 VCC引脚 ESP32 GND 引脚 - INMP441 GND 引脚 ESP32 GPIO22引脚 -

    2023年04月27日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包