in openmeetings-mediaserver/src/main/java/org/apache/openmeetings/mediaserver/KStream.java [120:175]
public void startBroadcast(final StreamDesc sd, final String sdpOffer, Runnable then) {
if (outgoingMedia != null) {
release(false);
}
hasAudio = sd.has(Activity.AUDIO);
hasVideo = sd.has(Activity.VIDEO);
hasScreen = sd.has(Activity.SCREEN);
sipClient = OmFileHelper.SIP_USER_ID.equals(sd.getClient().getUserId());
if ((sdpOffer.indexOf("m=audio") > -1 && !hasAudio)
|| (sdpOffer.indexOf("m=video") > -1 && !hasVideo && StreamType.SCREEN != streamType))
{
log.warn("Broadcast started without enough rights, sid {}, uid {}", sid, uid);
return;
}
if (StreamType.SCREEN == streamType) {
type = Type.SCREEN;
} else {
if (hasAudio && hasVideo) {
type = Type.AUDIO_VIDEO;
} else if (hasVideo) {
type = Type.VIDEO_ONLY;
} else {
type = Type.AUDIO_ONLY;
}
}
switch (type) {
case AUDIO_VIDEO:
profile = MediaProfileSpecType.WEBM;
break;
case AUDIO_ONLY:
profile = MediaProfileSpecType.WEBM_AUDIO_ONLY;
break;
case SCREEN, VIDEO_ONLY:
default:
profile = MediaProfileSpecType.WEBM_VIDEO_ONLY;
break;
}
pipeline = kHandler.createPipiline(Map.of(TAG_ROOM, String.valueOf(getRoomId()), TAG_STREAM_UID, sd.getUid()), new Continuation<Void>() {
@Override
public void onSuccess(Void result) throws Exception {
if (sipClient) {
addSipProcessor(1);
} else {
outgoingMedia = createEndpoint(sd.getSid(), sd.getUid(), true);
internalStartBroadcast(sd, sdpOffer);
notifyOnNewStream(sd);
}
then.run();
}
@Override
public void onError(Throwable cause) throws Exception {
log.warn("Unable to create pipeline {}", KStream.this.uid, cause);
}
});
}