Kurento,一对多;能够改变来源
Kurento, One to many; being able to change the source
我只需要让一位演示者向许多观众流式传输,但在某些时候,这些观众中的一位可以成为演示者,而无需断开整个管道。
这可能吗?我正在查看文档和示例,但在任何地方都看不到这个用例
回答我自己的问题,您可以使用 "DispatcherOneToMany",然后在您想要切换 "Presenter" 角色时更改调度程序的来源。它就像一个魅力。
创建调度程序并向其添加新客户端的示例:
private void start(final WebSocketSession session, JsonObject jsonMessage)
{
// ---- Media pipeline
log.info("[Handler::start] Adding a new client!");
final UserSession user = new UserSession();
users.put(session.getId(), user);
if(pipeline==null){
log.info("[Handler::start] Create Media Pipeline");
pipeline = kurento.createMediaPipeline();
dispatcher = new DispatcherOneToMany.Builder(pipeline).build();
}
final WebRtcEndpoint webRtcEp = new WebRtcEndpoint.Builder(pipeline).build();
user.setWebRtcEndpoint(webRtcEp);
HubPort hubPort = new HubPort.Builder(dispatcher).build();
user.setHubPort(hubPort);
hubPort.connect(webRtcEp);
webRtcEp.connect(hubPort);
if(users.size()==1) {
log.info("[Handler::start] It's first user, then set it as source");
dispatcher.setSource(hubPort);
}
[...]
然后根据需要切换源,为此目的添加一条新消息并按以下方式进行:
UserSession user = users.get(sessionId);
if (user != null) {
log.info("[Handler::presenterSwitch] Switching presenter to: {} ", sessionId);
dispatcher.setSource(user.getHubPort());
}else{
log.error("[Handler::presenterSwitch] Trying to switch to an no-existent session: {}", sessionId);
}
我希望这对某人有所帮助,编码愉快。
我只需要让一位演示者向许多观众流式传输,但在某些时候,这些观众中的一位可以成为演示者,而无需断开整个管道。
这可能吗?我正在查看文档和示例,但在任何地方都看不到这个用例
回答我自己的问题,您可以使用 "DispatcherOneToMany",然后在您想要切换 "Presenter" 角色时更改调度程序的来源。它就像一个魅力。
创建调度程序并向其添加新客户端的示例:
private void start(final WebSocketSession session, JsonObject jsonMessage)
{
// ---- Media pipeline
log.info("[Handler::start] Adding a new client!");
final UserSession user = new UserSession();
users.put(session.getId(), user);
if(pipeline==null){
log.info("[Handler::start] Create Media Pipeline");
pipeline = kurento.createMediaPipeline();
dispatcher = new DispatcherOneToMany.Builder(pipeline).build();
}
final WebRtcEndpoint webRtcEp = new WebRtcEndpoint.Builder(pipeline).build();
user.setWebRtcEndpoint(webRtcEp);
HubPort hubPort = new HubPort.Builder(dispatcher).build();
user.setHubPort(hubPort);
hubPort.connect(webRtcEp);
webRtcEp.connect(hubPort);
if(users.size()==1) {
log.info("[Handler::start] It's first user, then set it as source");
dispatcher.setSource(hubPort);
}
[...]
然后根据需要切换源,为此目的添加一条新消息并按以下方式进行:
UserSession user = users.get(sessionId);
if (user != null) {
log.info("[Handler::presenterSwitch] Switching presenter to: {} ", sessionId);
dispatcher.setSource(user.getHubPort());
}else{
log.error("[Handler::presenterSwitch] Trying to switch to an no-existent session: {}", sessionId);
}
我希望这对某人有所帮助,编码愉快。