精华内容
下载资源
问答
  • java实现视频通话

    千次阅读 2019-07-25 19:34:16
    首先来确定一下基本思路 一、显示阶段 1、打开摄像头,获得一张BufferedImage1,并获得他的宽、高 2、根据宽,高实例化一个BufferedImage2 3、把BufferedImage1上的每一个像素点画到BufferedImage2上 ...

            首先来确定一下基本思路

      一、显示阶段

          1、打开摄像头,获得一张BufferedImage1,并获得他的宽、高

          2、根据宽,高实例化一个BufferedImage2

          3、把BufferedImage1上的每一个像素点画到BufferedImage2上

          4、把BufferedImage2画到窗体上

    二、发送阶段

          1、BufferedImage的本质是一个二维数组,我们把二维数组写到输出流,发送

    三、接受阶段

          把数组字节流转换为一张图片,画到窗体上

     

    发送端:

    	        //打开默认摄像头,webcam 是一个Webcam类,需要大家提前下载好
                    webcam=Webcam.getDefault();
    		webcam.setViewSize(WebcamResolution.VGA.getSize());
    		webcam.open();
    
                      while(true) {
    			//从摄像头获取一张图片
    			BufferedImage img=webcam.getImage();/
    			if(img!=null) {
    				//字节数组输出流
    				ByteArrayOutputStream bos=new ByteArrayOutputStream();
                                    //获得他的宽 、高
    				int width=img.getWidth();
    				int height=img.getHeight();
    				
    				//处理后的照片
    				BufferedImage img2=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
    				Graphics g2=img2.getGraphics();
    				for(int i=0;i<width;i+=special) {//把img的每个颜色转移到img2上
    					for(int j=0;j<height;j+=special) {
    						int rgb=img.getRGB(i, j);
    						Color c=new Color(rgb);
    					
    						g2.setColor(new Color(c.getRed(),c.getGreen(),c.getBlue()));
    						g2.drawLine(i, j,i, j);
    					}
    			}
    				
    				//把图片写入bos输出流
    				try {
                                            //ImageIO可以直接把img写到bos中
    					ImageIO.write(img,"jpg",bos);
    					g.drawImage(img2 ,0 , 0, null);//把img2画到窗体上
    					
    					byte[] bytes=bos.toByteArray();//直接把数组输出流转给换位数组
    					//此处是我自己的方法,把bytes发送给对方
                                            sa=SendApp.getInstance();
    					sa.sendVideoData(bytes);
    					
    					
    				} catch (IOException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    				
    		  }
    			
    	   }

     

    接收端

    private void DrawCapture(byte[] buffer) {
    		
    		//字节数组输入流
    		ByteArrayInputStream bis=new ByteArrayInputStream(buffer);
    		
    		try {
    			//直接将字节数组输入流转换为依照图片
    			BufferedImage recvImg=ImageIO.read(bis);
    			VideoMessage.g.drawImage(recvImg, 0, 500, null);
    
    
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		
    	}

     

     

     

    展开全文
  • java 基于websocket实现视频聊天,解压项目到对应位置部署到tomcat8即可使用
  • Java 锁的实现方式, 比较? AQS实现原理?公平非公平实现原理? CAS 实现原理 volatile 实现原理, 单例模式 java 内存模型, gc 调优的经历. cms gc 的几个阶段, 为什么会出现 stop the world. 常见可优化参数有哪些. 为...

    阿里

    • mq 消息可靠性,幂等如何保证
    • 分布式锁的实现方案比较,为什么选择 zookeeper, zookeeper 一致性协议原理
    • 线程池参数,阻塞队列实现
    • 一致性 Hash解决什么问题, 如何实现? 虚拟节点的作用?
    • Java 锁的实现方式, 比较? AQS实现原理?公平非公平实现原理?
    • CAS 实现原理
    • volatile 实现原理, 单例模式
    • java 内存模型, gc 调优的经历. cms gc 的几个阶段, 为什么会出现 stop the world. 常见可优化参数有哪些.
    • 为什么需要优化 gc, gc 会导致什么问题.
    • mysql 事务隔离级别. mvcc 实现原理
    • mysql 索引原理. 为什么使用 B+树. 及何时无法使用索引?
    • mysql 架构, 引擎层和 server层 各自负责什么.
    • hashmap 及 concurrenthashmap 实现原理
    • Spring aop原理,如何定义新的spring xml 标签
    • 合并两个有序链表
    • 如何设计一个大型活动的安保系统(开放题)

    美团

    • 数据库和缓存的一致性问题。先更新数据库,再更新缓存,若更新完数据库了,还没有更新缓存,此时有请求过来了,访问到了缓存中的数据,怎么办?

    • 聚簇索引/非聚簇索引,mysql索引底层实现,为什么不用B-tree,为什么不用hash,叶子结点存放的是数据还是指向数据的内存地址,使用索引需要注意的几个地方

    • mysql默认的事务隔离级别,mvcc,rr怎么实现的,rc如何实现的

    • mysql间隙锁有没有了解,死锁有没有了解,写一段会造成死锁的sql语句,死锁发生了如何解决,mysql有没有提供什么机制去解决死锁

    • 谈下对GC的了解,何为垃圾,有哪些GC算法,有哪些垃圾回收器,cms和g1的区别,emm,还有一个直击灵魂的问题,看过cms的源码吗

    • 有没有排查过线上oom的问题,如何排查的

    • 有没有使用过jvm自带的工具,如何使用的

    • 假设有下图所示的一个full gc 的图,纵向是内存使用情况,横向是时间,你如何排查这个full gc的问题,怎么去解决你说出来的这些问题
      在这里插入图片描述

    • 说说对java中集合类的理解,项目中用过哪些,哪个地方用的,如何使用的

    • 对CAS的理解,CAS带来的问题,如何解决这些问题

    • volatile底层、synchronized底层、锁升级的过程、MESI

    • ehcache支持哪些缓存

    • juc有研究没有,讲一讲

    • 聊项目,画项目架构图,画一个用户从发起请求 到接收到响应 中间经过哪些服务 每个服务做什么事情 的流程图

    • 讲项目中的难点、挑战,如何解决的,项目这一块会问的特别细

    • 如何保证RocketMQ 消息的顺序性,如何解决重复消费问题

    • 项目中如何保证接口的幂等操作

    • 讲一讲对redis 的了解,项目中如何使用的,哪个地方使用的,为什么要使用

    • 哨兵机制、redis两种备份方式的区别,项目中用的哪种,为什么

    • 讲一讲对分布式锁的了解

    • 项目中系统监控怎么做的

    • 如何理解Spring中的AOP 和 IOC,以及DI,读过Spring源码没有

    • 读过MyBatis源码没有

    • 说一个你了解最多的框架,说出你的理解

    • 如何理解分布式事务,为什么会出现这个问题,如何去解决,了解哪些分布式事务中间件

    • 聊一聊对分库分表的理解

    • hystrix功能 & 在项目中怎么使用的 & hystrix 怎么检测断路器是否要开启/关闭 & hystrix 实现原理,除hystrix之外的其他熔断限流中间件有了解没有,了解多少说多少

    • dubbo有了解没有

    • 怎么理解java 中和 mysql 中的乐观锁、悲观锁

    • 一致性hash

    最后

    权威指南-第一本Docker书

    引领完成Docker的安装、部署、管理和扩展,让其经历从测试到生产的整个开发生命周期,深入了解Docker适用于什么场景。并且这本Docker的学习权威指南介绍了其组件的基础知识,然后用Docker构建容器和服务来完成各种任务:利用Docker为新项目建立测试环境,演示如何使用持续集成的工作流集成Docker,如何构建应用程序服务和平台,如何使用Docker的API,如何扩展Docker。

    总共包含了:简介、安装Docker、Docker入门、使用Docker镜像和仓库、在测试中使用Docker、使用Docker构建服务、使用Fig编配Docke、使用Docker API、获得帮助和对Docker进行改进等9个章节的知识。

    image

    image

    image

    image

    关于阿里内部都在强烈推荐使用的“K8S+Docker学习指南”—《深入浅出Kubernetes:理论+实战》、《权威指南-第一本Docker书》,看完之后两个字形容,爱了爱了!

    如果你也爱了,点击这里免费下载:“K8S+Docker”学习指南

    点击这里免费下载:“K8S+Docker”学习指南

    展开全文
  • java视频聊天

    2015-12-08 18:01:29
    Jitsi Android是一个Android(Jitsi)项目:港最功能丰富的沟通与支持加密的音频/视频、聊天和存在对SIP和XMPP。 # #与IntelliJ使用 1。确保你有(Java)和Android SDK安装在您的系统和(IntelliJ)是最新的版本(13.0.2)。 ...
  • 基于Java实现语音通话,可实现 1对1通话(明确对方IP地址)或者群通话(不需要知道对方IP地址),希望能帮到更多小伙伴,直接运行main方法就可以,总共三个文件,有问题留言交流。
  • Java实现在线视频通话

    万次阅读 2018-12-13 17:13:26
    以下都属于个人笔记 nginx -rtmp https://stackoverflow.com/questions/37442819/unknown-directive-rtmp-in-etc-nginx-nginx-conf76
    展开全文
  • 在国内我找到了一个比較好音视频通信解决方式(百度下载官方Anychat for Android 的demo),该案例提供了纯Java语言接口供我们调用,随后我參照官方android demo程序和开发文档并结合自己的见解写了一个android音频...

    近期学习Android平台下跨平台音视频通信开发,尽管网上有非常多开源项目供我们參考学习。但音视频效果非常一般,还有非常多不稳定的因素,毕竟是开源嘛。在国内我找到了一个比較好音视频通信解决方式(百度下载官方Anychat for Android 的demo),该案例提供了纯Java语言接口供我们调用,随后我參照官方android demo程序和开发文档并结合自己的见解写了一个android音频通信软件。200行以内代码就搞定了(难以相信吧)。

    事实上我仅仅是调用其相关API就可以实现。下面是我自己写的Java代码,以备大家互相学习:

    1./**

    2. * Android**天

    3. * 1、初始化SDK 2、连接server、 3、用户登录。4、进入房间;5、打开本地视频;6、请求对方视频

    4. */

    5.public class VideoChatActivity extends Activity implements AnyChatBaseEvent

    6.{

    7. private AnyChatCoreSDK anychat; // 核心SDK

    8. private SurfaceView remoteSurfaceView; // 对方视频

    9. private SurfaceView localSurfaceView; // 本地视频

    10. private ConfigEntity configEntity;

    11. private boolean bSelfVideoOpened = false; // 本地视频是否已打开

    12. private boolean bOtherVideoOpened = false; // 对方视频是否已打开

    13. private TimerTask mTimerTask; // 定时器

    14. private Timer mTimer = new Timer(true);

    15. private Handler handler; // 用Handler来不间断刷新即时视频

    16. private List userlist = new ArrayList();//保存在线用户列表

    17. private int userid; // 用户ID

    18. @Override

    19. public void onCreate(Bundle savedInstanceState)

    20. {

    21. super.onCreate(savedInstanceState);

    22. setContentView(R.layout.activity_video_chat);

    23. remoteSurfaceView = (SurfaceView) findViewById(R.id.surface_remote);

    24. localSurfaceView = (SurfaceView) findViewById(R.id.surface_local);

    25. configEntity = ConfigService.LoadConfig(this);//载入视频通话设置

    26. loginSystem();// 初始化SDK 连接server

    27. mTimerTask = new TimerTask(){

    28. public void run(){

    29. Message mesasge = new Message();

    30. handler.sendMessage(mesasge);

    31. }

    32. };

    33. mTimer.schedule(mTimerTask, 1000, 100);

    34. handler = new Handler(){

    35. @Override

    36. public void handleMessage(Message msg){

    37. VideoChat();// 不间断显示即时视频通话画面

    38. super.handleMessage(msg);

    39. }

    40. };

    41. }

    42. // 初始化SDK 连接server

    43. private void loginSystem(){

    44. if (anychat == null){

    45. anychat = new AnyChatCoreSDK();

    46. anychat.SetBaseEvent(this); // 设置基本事件回调函数

    47. if (configEntity.useARMv6Lib != 0) // 使用ARMv6指令集

    48. anychat.SetSDKOptionInt(AnyChatDefine.

    49. BRAC_SO_CORESDK_USEARMV6LIB, 1);

    50. anychat.InitSDK(android.os.Build.VERSION.SDK_INT, 0); // 初始化SDK

    51. }

    52. anychat.Connect("demo.anychat.cn", 8906);// 连接server

    53. }

    54. // 显示即时视频通话画面

    55. public void VideoChat(){

    56. if (!bOtherVideoOpened){

    57. if (anychat.GetCameraState(userid) == 2

    58. && anychat.GetUserVideoWidth(userid) != 0){

    59. SurfaceHolder holder = remoteSurfaceView.getHolder();

    60. holder.setFormat(PixelFormat.RGB_565);

    61. holder.setFixedSize(anychat.GetUserVideoWidth(userid),

    62. anychat.GetUserVideoHeight(userid));

    63. Surface s = holder.getSurface(); // 获得视频画面

    64. anychat.SetVideoPos(userid, s, 0, 0, 0, 0); // 调用API显示视频画面

    65. bOtherVideoOpened = true;

    66. }

    67. }

    68. if (!bSelfVideoOpened){

    69. if (anychat.GetCameraState(-1) == 2

    70. && anychat.GetUserVideoWidth(-1) != 0){

    71. SurfaceHolder holder = localSurfaceView.getHolder();

    72. holder.setFormat(PixelFormat.RGB_565);

    73. holder.setFixedSize(anychat.GetUserVideoWidth(-1),

    74. anychat.GetUserVideoHeight(-1));

    75. Surface s = holder.getSurface();

    76. anychat.SetVideoPos(-1, s, 0, 0, 0, 0);

    77. bSelfVideoOpened = true;

    78. }

    79. }

    80. }

    81. public void OnAnyChatConnectMessage(boolean bSuccess){

    82. if (!bSuccess){

    83. Toast.makeText(VideoChatActivity.this, "连接server失败。自己主动重连。请稍后...", Toast.LENGTH_SHORT).show();

    84. }

    85. anychat.Login("android", ""); // server连接成功 用户登录

    86. }

    87. public void OnAnyChatLoginMessage(int dwUserId, int dwErrorCode){

    88. if (dwErrorCode == 0) {

    89. Toast.makeText(this, "登录成功!", Toast.LENGTH_SHORT).show();

    90. anychat.EnterRoom(1, ""); // 用户登录成功 进入房间

    91. ApplyVideoConfig();

    92. } else {

    93. Toast.makeText(this, "登录失败。错误代码:" + dwErrorCode, Toast.LENGTH_SHORT).show();

    94. }

    95. }

    96. public void OnAnyChatEnterRoomMessage(int dwRoomId, int dwErrorCode){

    97. if (dwErrorCode == 0) { // 进入房间成功 打开本地音视频

    98. Toast.makeText(this, "进入房间成功", Toast.LENGTH_SHORT).show();

    99. anychat.UserCameraControl(-1, 1); // 打开本地视频

    100. anychat.UserSpeakControl(-1, 1); // 打开本地音频

    101. } else {

    102. Toast.makeText(this, "进入房间失败,错误代码:" + dwErrorCode, Toast.LENGTH_SHORT).show();

    103. }

    104. }

    105. public void OnAnyChatOnlineUserMessage(int dwUserNum, int dwRoomId){

    106. if (dwRoomId == 1){

    107. int user[] = anychat.GetOnlineUser();

    108. if (user.length != 0){

    109. for (int i = 0; i < user.length; i++){

    110. userlist.add(user[i]+"");

    111. }

    112. String temp =userlist.get(0);

    113. userid = Integer.parseInt(temp);

    114. anychat.UserCameraControl(userid, 1);// 请求用户视频

    115. anychat.UserSpeakControl(userid, 1); // 请求用户音频

    116. }

    117. else {

    118. Toast.makeText(VideoChatActivity.this, "当前没有在线用户", Toast.LENGTH_SHORT).show();

    119. }

    120. }

    121. }

    122. public void OnAnyChatUserAtRoomMessage(int dwUserId, boolean bEnter){

    123. if (bEnter) {//新用户进入房间

    124. userlist.add(dwUserId+"");

    125. }

    126. else { //用户离开房间

    127. if (dwUserId == userid)

    128. {

    129. Toast.makeText(VideoChatActivity.this, "视频用户已下线", Toast.LENGTH_SHORT).show();

    130. anychat.UserCameraControl(userid, 0);// 关闭用户视频

    131. anychat.UserSpeakControl(userid, 0); // 关闭用户音频

    132. userlist.remove(userid+""); //移除该用户

    133. if (userlist.size() != 0)

    134. {

    135. String temp =userlist.get(0);

    136. userid = Integer.parseInt(temp);

    137. anychat.UserCameraControl(userid, 1);// 请求其它用户视频

    138. anychat.UserSpeakControl(userid, 1); // 请求其它用户音频

    139. }

    140. }

    141. else {

    142. userlist.remove(dwUserId+""); //移除该用户

    143. }

    144. }

    145. }

    146. public void OnAnyChatLinkCloseMessage(int dwErrorCode){

    147. Toast.makeText(VideoChatActivity.this, "连接关闭,error:" + dwErrorCode, Toast.LENGTH_SHORT).show();

    148. }

    149. @Override

    150. protected void onDestroy(){ //程序退出

    151. anychat.LeaveRoom(-1); //离开房间

    152. anychat.Logout(); //注销登录

    153. anychat.Release(); //释放资源

    154. mTimer.cancel();

    155. super.onDestroy();

    156. }

    157. // 依据配置文件配置视频參数

    158. private void ApplyVideoConfig(){

    159. if (configEntity.configMode == 1) // 自己定义视频參数配置

    160. {

    161. // 设置本地视频编码的码率(假设码率为0,则表示使用质量优先模式)

    162. anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_BITRATECTRL,configEntity.videoBitrate);

    163. if (configEntity.videoBitrate == 0)

    164. {

    165. // 设置本地视频编码的质量

    166. anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_QUALITYCTRL,configEntity.videoQuality);

    167. }

    168. // 设置本地视频编码的帧率

    169. anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_FPSCTRL,configEntity.videoFps);

    170. // 设置本地视频编码的关键帧间隔

    171. anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_GOPCTRL,configEntity.videoFps * 4);

    172. // 设置本地视频採集分辨率

    173. anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_WIDTHCTRL,configEntity.resolution_width);

    174. anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_HEIGHTCTRL,configEntity.resolution_height);

    175. // 设置视频编码预设參数(值越大,编码质量越高,占用CPU资源也会越高)

    176. anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_PRESETCTRL,configEntity.videoPreset);

    177. }

    178. // 让视频參数生效

    179. anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_APPLYPARAM,configEntity.configMode);

    180. // P2P设置

    181. anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_NETWORK_P2PPOLITIC,configEntity.enableP2P);

    182. // 本地视频Overlay模式设置

    183. anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_OVERLAY,configEntity.videoOverlay);

    184. // 回音消除设置

    185. anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_AUDIO_ECHOCTRL,configEntity.enableAEC);

    186. // 平台硬件编码设置

    187. anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_CORESDK_USEHWCODEC,configEntity.useHWCodec);

    188. // 视频旋转模式设置

    189. anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_ROTATECTRL,configEntity.videorotatemode);

    190. // 视频平滑播放模式设置

    191. anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_STREAM_SMOOTHPLAYMODE,configEntity.smoothPlayMode);

    192. // 视频採集驱动设置

    193. anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_CAPDRIVER,configEntity.videoCapDriver);

    194. // 本地视频採集偏色修正设置

    195. anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_FIXCOLORDEVIA,configEntity.fixcolordeviation);

    196. // 视频显示驱动设置

    197. anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_VIDEOSHOW_DRIVERCTRL,configEntity.videoShowDriver);

    198. }

    199.}

    复制代码

    该Android音视频解决方式还有文字聊天、发送文件、P2P连接等很有用的功能。

    对给开发商,高速实现类似QQ聊天,语音和视频通信是令人兴奋的事情。

    版权声明:本文博客原创文章。博客,未经同意,不得转载。

    展开全文
  • 可以参考新的文章:WebRTC续集这两天终于是抽了时间把WebRTC搞定了,去年就想弄的,但是确实没时间,而且那时候JavaEE的WebSocket还没有规范,网上也都是用的Tomcat自己的WebSocket实现的,或者还使用了一些ajax辅助...
  • Java实现一个视频聊天软件

    千次阅读 2021-02-23 10:50:46
    这里写自定义目录标题网络的连接服务器连接部分客户端连接部分socket模块如何改变文本的样式传输视频模块发送文字代码一边传输视频一边发送文字创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表...
  • 基于Chrome、Java、WebSocket、WebRTC实现浏览器视频通话 基于Chrome、Java、WebSocket、WebRTC实现浏览器视频通话
  • 基于Java WebSocket 做信令服务器,使用webrtc浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。从而实现视频通话。下载启动 输入http://localhost 就可使用
  • Java使用websocket和WebRTC实现视频通话

    万次阅读 2017-03-11 12:08:55
    费了一番功夫研读了例子的python端的源代码,决定用Java实现,Tomcat7之后开始支持WebSocket,打算用WebSocket代替Google App Engine Channel API实现前后台的通讯,在整个例子中Java+WebSocket起到的作用是负责...
  • 通过java的opencv获取图像,通过java sound api读取音频,通过socket实现客户端点对点音视频通信 使用java swing开发客户端,源码中client是客户端,server是服务端,需要现开启服务端再开客户端
  • java多人视频聊天室

    热门讨论 2013-06-16 00:46:37
    java代码实现多线程聊天室,分服务器端与客户端
  • Java+WebSocket+WebRTC实现视频通话实例

    万次阅读 2016-05-20 12:33:41
    ...Java+WebSocket+WebRTC实现视频通话实例 时间 2012-11-04 21:04:55 洗尽铅华 原文 http://blog.csdn.net/leecho571/article/details/8146525 主题 WebSocket Java 介绍
  • 近来来储备知识,小弟已经在做视频聊天功能,现在是用opencv,现在主要是安装opencv之后,调取数据,程序老是说没有找到opencv的库,网上说opencv一定要放在c盘的根目录;请问各位大神,有没有这方面做好的经验,传授...
  • NULL 博文链接:https://fanxiaojun.iteye.com/blog/1817672
  • 这是一款基于java环境的webrtc音视频通话demo,本人已经亲自试验过,使用前请先阅读readme,如果有报错可上网查询,极有可能是端口问题
  • Java socket 封装了传输层的实现细节,开发人员可以基于 socket 实现应用层。本文介绍了 Java socket 简单用法。1. 传输层协议传输层包含了两种协议,分别是 TCP (Transmission Control Protocol,传输控制协议) 和 ...
  • 最近学习Android平台下跨平台音视频通信开发,在国内我找到了一个比较好音视频通信解决方案,该案例提供了纯Java语言接口供我们调用,随后我参照官方android demo程序和开发文档并结合自己的见解写了一个android音频...
  • java webrtc 视频通话

    2021-05-16 18:53:55
    最新的webrtc视频会议的实现java, webrtc html5, one to many
  • 利用集成环信的sdk实现视频功能,实现中间遇到了很多坑,不过都解决掉了,对部分页面和代码进行了优化
  • WEBRTC多人视频通话demo

    2019-05-07 15:13:29
    WEBRTC多人视频通话,可以支持多人视频通话,目前是三人的,因为视频通话的信令用到的是websocket,所以代码里面也放入了单独websocket通信的demo,解释比较详细
  • 需要使用端口,域名访问时,必须对tomcat做自签名证书,如果只是在本地使用localhost访问,就不需要做自签名证书了。 项目地址:https://shiping.lipingoomoney.cn:8443/rtcdemo/

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,789
精华内容 2,715
关键字:

java实现视频通话

java 订阅
友情链接: 31856matlabvc.rar