Kurento 第一坑

Kurento 第一坑_第1张图片

原理解析

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

这个例子使用的是 js 前端和媒体服务器
前端将采集到的数据发往媒体服务器,经媒体服务器之后再转发回来
完成转发就需要WebRtcEndpoint 媒体元素 组成的媒体通道,该通道是双向全双工的
Kurento 第一坑_第2张图片
官方给的实例图

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


看图分析
Kurento 第一坑_第3张图片

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.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 第一坑)