java版本使用springboot vue websocket webrtc实现视频通话
创始人
2024-11-19 06:08:11
0

使用java版本 websocket webrtc实现视频通话

  • 原理简单解释
  • 使用技术
  • 搭建websocket环境依赖
  • 最终演示效果

原理简单解释

​ 浏览器提供获取屏幕、音频等媒体数据的接口,

​ 双方的媒体流数据通过Turn服务器传输

websocket传递信令服务

使用技术

  1. java jdk17
  2. springboot 3.2.2
  3. websocket
  4. 前端使用 vue

搭建websocket环境依赖

	                      org.springframework.boot             spring-boot-starter-web                               org.springframework.boot             spring-boot-starter-websocket                                org.springframework.boot             spring-boot-starter-test             test               

websocket的配置类

package com.example.webrtc.config;  import com.example.webrtc.Interceptor.AuthHandshakeInterceptor; import com.example.webrtc.Interceptor.MyChannelInterceptor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.messaging.converter.MessageConverter; import org.springframework.messaging.handler.invocation.HandlerMethodArgumentResolver; import org.springframework.messaging.handler.invocation.HandlerMethodReturnValueHandler; import org.springframework.messaging.simp.config.ChannelRegistration; import org.springframework.messaging.simp.config.MessageBrokerRegistry; import org.springframework.web.socket.config.annotation.*; import org.springframework.web.socket.server.standard.ServerEndpointExporter;  import java.util.List;  @Configuration @EnableWebSocketMessageBroker public class WebSocketConfig extends WebSocketMessageBrokerConfigurationSupport implements WebSocketMessageBrokerConfigurer {     private static final Logger log = LoggerFactory.getLogger(WebSocketConfig.class);      @Autowired     private AuthHandshakeInterceptor authHandshakeInterceptor;       @Autowired     private MyChannelInterceptor myChannelInterceptor;      @Bean     public ServerEndpointExporter serverEndpointExporter(){         return new ServerEndpointExporter();     }      @Override     public void registerStompEndpoints(StompEndpointRegistry registry) {         registry.addEndpoint("/chat-websocket")                 .setAllowedOriginPatterns("*")                 .addInterceptors(authHandshakeInterceptor)                 .setAllowedOriginPatterns("*")              //   .setHandshakeHandler(myHandshakeHandler)                 .withSockJS();     }      @Override     public void configureWebSocketTransport(WebSocketTransportRegistration registry) {             registry.setMessageSizeLimit(Integer.MAX_VALUE);             registry.setSendBufferSizeLimit(Integer.MAX_VALUE);             super.configureWebSocketTransport(registry);     }      @Override     public void configureMessageBroker(MessageBrokerRegistry registry) {         //客户端需要把消息发送到/message/xxx地址         registry.setApplicationDestinationPrefixes("/webSocket");         //服务端广播消息的路径前缀,客户端需要相应订阅/topic/yyy这个地址的消息         registry.enableSimpleBroker("/topic", "/user");         //给指定用户发送消息的路径前缀,默认值是/user/         registry.setUserDestinationPrefix("/user/");     }       @Override     public void configureClientInboundChannel(ChannelRegistration registration) {         registration.interceptors(myChannelInterceptor);     }      @Override     public void configureClientOutboundChannel(ChannelRegistration registration) {         WebSocketMessageBrokerConfigurer.super.configureClientOutboundChannel(registration);     }      @Override     public void addArgumentResolvers(List argumentResolvers) {         WebSocketMessageBrokerConfigurer.super.addArgumentResolvers(argumentResolvers);     }      @Override     public void addReturnValueHandlers(List returnValueHandlers) {         WebSocketMessageBrokerConfigurer.super.addReturnValueHandlers(returnValueHandlers);     }      @Override     public boolean configureMessageConverters(List messageConverters) {         return WebSocketMessageBrokerConfigurer.super.configureMessageConverters(messageConverters);     }  } 

控制层 WebSocketController

package com.example.webrtc.controller;  import com.example.webrtc.config.Message; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.messaging.handler.annotation.MessageMapping; import org.springframework.messaging.simp.SimpMessagingTemplate; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;  import java.security.Principal; import java.util.HashMap; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger;  // 私信聊天的控制器 @RestController public class WebSocketController {     @Autowired     private SimpMessagingTemplate messagingTemplate;     private AtomicInteger i=new AtomicInteger(1);     @RequestMapping("/user")     public String findUser(){         return "00"+i.decrementAndGet();     }     @MessageMapping("/api/chat")     //在springmvc 中可以直接获得principal,principal 中包含当前用户的信息     public void handleChat(Principal principal, Message messagePara) {          String currentUserName = principal.getName();         System.out.println(currentUserName);          try {             messagePara.setFrom(principal.getName());             System.out.println("from" + messagePara.getFrom());             messagingTemplate.convertAndSendToUser(messagePara.getTo(),                     "/queue/notifications",                     messagePara);         } catch (Exception e) {             // 打印异常             e.printStackTrace();         }     } }  

前端交互拨号index.vue

   {{ toUserId + '请求连接!' }}      取 消     确 定         

最终演示效果

在这里插入图片描述

具体代码查看

相关内容

热门资讯

今年以来!金杯竞技辅助,丽水都... 今年以来!金杯竞技辅助,丽水都莱脚本辅助视频,分享教程(真是是真的挂)-哔哩哔哩1、在丽水都莱脚本辅...
免费测试版!财神13辅助包最新... 免费测试版!财神13辅助包最新版本更新内容详解(辅助挂)开挂透视辅助教程(本来真的是有挂)-哔哩哔哩...
于此同时!心悦辅助器,阿拉斗牌... 于此同时!心悦辅助器,阿拉斗牌辅助,2025教程(好像真的是有挂)-哔哩哔哩阿拉斗牌辅助辅助器中分为...
一分钟揭秘!天天福建辅助器(辅... 一分钟揭秘!天天福建辅助器(辅助挂)开挂透视辅助软件(总是是有挂)-哔哩哔哩亲,关键说明,天天福建辅...
据文件显示!哥哥打大a有没有辅... 据文件显示!哥哥打大a有没有辅助,微信小程序辅助器,详细教程(竟然有挂)-哔哩哔哩哥哥打大a有没有辅...
必备攻略!友友联盟免费辅助器(... 必备攻略!友友联盟免费辅助器(辅助挂)开挂透视辅助工具(好像存在有挂)-哔哩哔哩1、金币登录送、破产...
据了解!欢乐联盟免费辅助,兴动... 据了解!欢乐联盟免费辅助,兴动互娱游戏辅助器好用吗,力荐教程(总是存在有挂)-哔哩哔哩1、兴动互娱游...
科技通报!新九游辅助(辅助挂)... 科技通报!新九游辅助(辅助挂)开挂透视辅助插件(竟然有挂)-哔哩哔哩1、新九游辅助ai辅助优化,新九...
近年来!边锋老友威海荣成辅助,... 近年来!边锋老友威海荣成辅助,开心泉州小程序有挂吗,爆料教程(果然有挂)-哔哩哔哩1、进入到开心泉州...
据玩家消息!中至江西插件,极速... 据玩家消息!中至江西插件,极速暗宝辅助,透视教程(本来是有挂)-哔哩哔哩运中至江西插件辅助工具,进入...