Kurento 第一坑

这里写图片描述

原理解析

安装完服务器
下载好代码之后就运行了
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 的方法 也没来得及研究,
领导要的急,没办法啊,遇到的时候在说明每个方法的意思


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


  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值