安装完服务器
下载好代码之后就运行了
hello world 用的是 springboot
这个例子使用的是 js 前端和媒体服务器
前端将采集到的数据发往媒体服务器,经媒体服务器之后再转发回来
完成转发就需要WebRtcEndpoint 媒体元素 组成的媒体通道,该通道是双向全双工的
官方给的实例图
视频的开始需要传输信令,
信令的协议是kurento的协议
信令的传输方式是websocket
webRtcPeer 建立对等链接
generateoffer 生成提议
sdp 会话描述,就是视频相关的参数
传输sessionid 建立媒体管道
sdpAnswer 应答提议
每次特定的协商只生成一个提议和应答
ice进行穿透
这个ice 穿透到现在还不是很理解
它只能对最外层NAT穿透
ice的大概 是先进行穿透,不成则进行中继,
这里有选择的余地,可以配置不使用ice,直接指定媒体服务器的地址给双方,
这个想法不知道可不可行,后面会进行验证的
进行传输
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
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 的方法 也没来得及研究,
领导要的急,没办法啊,遇到的时候在说明每个方法的意思
写的不好,希望能给你带来一点提示吧,还请指正,转载请注明出处,谢谢