docs: public synchronized String publish(SdpType sdpType, String sdpString, boolean doLoopback,
  			MediaElement loopbackAlternativeSrc, MediaType loopbackConnectionType) {
  		registerOnIceCandidateEventListener(this.getOwner().getParticipantPublicId());
  		if (doLoopback) {
  			if (loopbackAlternativeSrc == null) {
  				connect(this.getEndpoint(), loopbackConnectionType);
  			} else {
  				connectAltLoopbackSrc(loopbackAlternativeSrc, loopbackConnectionType);
  			}
  		} else {
  			innerConnect();
  		}
  		String sdpResponse = null;
  		switch (sdpType) {
  		case ANSWER:
  			sdpResponse = processAnswer(sdpString);
  			break;
  		case OFFER:
  			sdpResponse = processOffer(sdpString);
  			break;
  		default:
  			throw new OpenViduException(Code.MEDIA_SDP_ERROR_CODE, "Sdp type not supported: " + sdpType);
  		}
  		gatherCandidates();
  		this.createdAt = System.currentTimeMillis();
  		return sdpResponse;
  	}