原理解析

安装完服务器
下载好代码之后就运行了
hello world 用的是 springboot

这个例子使用的是 js 前端和媒体服务器
前端将采集到的数据发往媒体服务器,经媒体服务器之后再转发回来
完成转发就需要WebRtcEndpoint 媒体元素 组成的媒体通道,该通道是双向全双工的

官方给的实例图

视频的开始需要传输信令,
信令的协议是kurento的协议
信令的传输方式是websocket


看图分析

webRtcPeer 建立对等链接
generateoffer 生成提议
sdp 会话描述,就是视频相关的参数
传输sessionid 建立媒体管道
sdpAnswer 应答提议
每次特定的协商只生成一个提议和应答
ice进行穿透
这个ice 穿透到现在还不是很理解
它只能对最外层NAT穿透
ice的大概 是先进行穿透,不成则进行中继,
这里有选择的余地,可以配置不使用ice,直接指定媒体服务器的地址给双方,
这个想法不知道可不可行,后面会进行验证的
进行传输

start之后的操作

建立通信管道

final MediaPipeline pipeline = kurento.createMediaPipeline();final WebRtcEndpoint webRtcEp =new WebRtcEndpoint.Builder(pipeline).build();webRtcEp.connect(webRtcEp);

这里封装的是

public MediaPipeline createMediaPipeline() {return new AbstractBuilder<MediaPipeline>(MediaPipeline.class, manager).build();}

这里就不看源码了,有时间在看吧,先搞原理

然后对客户端进行监听

]addMediaFlowInStateChangeListener

交换双方的SDP

String webrtcSdpAnswer = webRtcEp.processOffer(webrtcSdpOffer);
sendMessage(session, webrtcSdpAnswer);

进行穿透处理

webRtcEp.gatherCandidates();
这里会吧ice的结果,放到一个候选资源了,要是实现的直接与媒体服务器通信的话,应该会在这里动手

客户端的逻辑

也就是js啦
使用的websocket
单页应用程序体系结构(SPA),类似vue的组件吧,一个页面就是一个组件
kurento-client.js:Kurento JavaScript客户端的实现
kurento-utils.js:Kurento实用程序库旨在简化浏览器中的WebRTC管理 ,
对原生的封一层,这就尴尬了,要想看具体干啥就要点进去了
adapter.js 用来屏蔽不同浏览器的差异,要是两端都是同一个浏览器 就不存在啦

start按钮里
写的也有一个监听addEventListener,监听服务端传回来的数据的把
kurentoUtils.WebRtcPeer.WebRtcPeerSendrecv 建立连接没什么好说了
就是这个工具类 ,抽时间得看眼,不然就不知道调什么方法
generateOffer 这个方法 获取sdp

ws_uri: ‘ws://’ + location.hostname + ‘:8888/kurento’,
ice_servers: undefined

md 这个请求 ice 直接没写
上面写的有地址
大概证实了 上面在ice 可以动手的 想法

pipeline = _pipeline;pipeline.create("WebRtcEndpoint", function(error, webRtc){if(error) return onError(error);setIceCandidateCallbacks(webRtcPeer, webRtc, onError)webRtc.processOffer(sdpOffer, function(error, sdpAnswer){if(error) return onError(error);webRtcPeer.processAnswer(sdpAnswer, onError);});webRtc.gatherCandidates(onError);[...]
});

创建管道,进行应答

进行连接

webRtc.connect(webRtc, function(error){if(error) return onError(error);console.log("Loopback established");
});

具体的js 的webrtc 的方法 也没来得及研究,
领导要的急,没办法啊,遇到的时候在说明每个方法的意思


写的不好,希望能给你带来一点提示吧,还请指正,转载请注明出处,谢谢


Kurento 第一坑相关推荐

  1. sanic学习踩坑记录:第一坑——sanic_jinja2应用报错ModuleNotFoundError: No module named ‘AppName‘

    刚开始学习使用sanic,发现有一些坑,随手记录一下:以供后来者共同学习,避免踩坑: # 使用的软件版本 python 3.8.10 sanic 21.9.3 sanic-jinja2 0.10.0 ...

  2. unity3d打包到安卓平台报错BuildPlayerWindow+BuildMethodEXception:x error(新手第一坑)

    1,今天打包到安卓平台的时候遇到了这个错,然后去百度,全部都没有个可以解决的方法,后来看着看着,发现是自己搜错东西了,很明显,BuildPlayerWindow+BuildMethodEXceptio ...

  3. 【干货】极简体验+免费真的万能嘛?北森Saas第一坑:免费

    小咖注:这个时代 极简体验 和 免费,已经成了互联网必杀"秘笈".而互联网发展到今天从来都没有一种唯一的方法论,因为面向的人群,需求,场景都是在变化的. 至今,我有一件事情搞不明白 ...

  4. Redis 集群部署及踩过的坑

    本文目标 要在单台机器上搭建Redis集群,方式是通过不同的TCP端口启动多个实例,然后组成集群,同时记录在搭建过程中踩过的坑. 安装准备 centos版本:6.7 redis版本:3.2.3 安装方 ...

  5. iptables踩坑记

    1:第一坑:众所周知nf_conntrack,下面会有介绍补坑方法. 2:连环坑: 要解决第一个坑,需要修改内核参数,如: net.netfilter.nf_conntrack_tcp_timeout ...

  6. SDWebImage 在Swift中遇坑解决

    首先SDWebImag的优点自行百度,大家都是懒人. 至于为啥不用swift的库.我怕swift升级后又是一堆红.不过如果你要使用Swift库Kingfisher是不错的选择 SDWebImage地址 ...

  7. 【转】ABAP的坑2

    如果说工作区域.变量未清空是ABAP第一坑的话,那么FOR ALL ENTRIES的坑大概能算得上第二大坑了. FOR ALL ENTRIES有三个需要注意的地方. 1.使用前必须判断内表是否为空 如 ...

  8. 【转】ABAP的坑1

    ABAP第一坑的是:工作区域未清空 先看一段代码: 我期望的结果是 而实际上程序运行出来的结果是 为啥错了呢?就是因为工作区域未清空,加上一句CLEAR,欧了 知识点: 内表(ITAB)和工作区域(W ...

  9. mysql sock golang_golang thrift 总结一下网络上的一些坑

    我们以hello world来大概分析一下golang中的thrift包,并且扒一扒网络上有关thrift的一些坑 查看源码,服务器定义如下:(详见simple_server.go文件) type T ...

最新文章

  1. 一篇了解NLP中的注意力机制
  2. html 自动跳转5秒,html 实现5秒倒计时跳转首页
  3. DarkTrack 4 Alien Version Released RAT 下载地址视频教程
  4. centos7已有数据硬盘挂载_实战2T以上盘GPT分区工具使用挂载教程
  5. 分布式理论、架构设计(自定义RPC)
  6. java 数组的拷贝 对象数组的拷贝 System.arraycopy函数
  7. 导致Android手机崩溃的壁纸,使用错误的壁纸会使你的Android手机崩溃
  8. 双卡项目如何在状态栏显示或隐藏G,3G以及卡1和卡2的信号标识
  9. scala基础之泛型详解
  10. python如何运用ols_python - 如何在python中使用OLSResults.f_test与实验组进行测试 - SO中文参考 - www.soinside.com...
  11. Oracle标准成本差异,标准成本与实际成本比较
  12. 礼物:《红孩儿引擎内功心法修练与Cocos2d-x》之结点系统(场景,层,精灵)
  13. 【组队学习】【37期】组队学习内容详情
  14. 计算机编程语言排行榜—TIOBE世界编程语言排行榜(2020年4月份最新版)
  15. Android 接口测方法
  16. 数据结构之树家族介绍
  17. Gnuplot 绘图
  18. 计算机考研地域重要还是学校,考研选城市还是选大学?想知道考研学校重要还是地域重要...
  19. ajax 微信code获取_微信网页授权——获取code、access_token、openid,及跨域问题解决...
  20. 前端地图分类(包括坐标系,GIS基础知识,2D与3D地图结构划分)

热门文章

  1. 问题“ConnectionString属性尚未初始化”之解决办法
  2. Java 中 switch 的用法
  3. windows 中NET 命令的使用
  4. 如何登录锐捷设备(路由篇)
  5. 软考高级软件架构师学习笔记一(软件架构设计)
  6. 计算机网络 之网关的作用
  7. 应广单片机例程EERPOM页写中一个BUG
  8. MySQL inet aton函数_MySQL INET_ATON()用法及代码示例
  9. Redis源码分析之PSYNC同步
  10. 图像几何校正-- -- -- 投影变换