Search in sources :

Example 26 with IScope

use of org.red5.server.api.scope.IScope in project bigbluebutton by bigbluebutton.

the class FlashToSipAudioStream method start.

public void start(IBroadcastStream broadcastStream, IScope scope) throws StreamException {
    if (log.isDebugEnabled())
        log.debug("startTranscodingStream({},{})", broadcastStream.getPublishedName(), scope.getName());
    mInputListener = new IStreamListener() {

        public void packetReceived(IBroadcastStream broadcastStream, IStreamPacket packet) {
            IoBuffer buf = packet.getData();
            if (buf != null)
                buf.rewind();
            if (buf == null || buf.remaining() == 0) {
                log.debug("skipping empty packet with no data");
                return;
            }
            if (packet instanceof AudioData) {
                byte[] data = SerializeUtils.ByteBufferToByteArray(buf);
                // Remove the first byte as it is the codec id.
                transcoder.handlePacket(data, 1, data.length - 1);
            }
        }
    };
    broadcastStream.addStreamListener(mInputListener);
    rtpSender = new RtpStreamSender(srcSocket, connInfo);
    rtpSender.connect();
    transcoder.start();
}
Also used : IStreamListener(org.red5.server.api.stream.IStreamListener) AudioData(org.red5.server.net.rtmp.event.AudioData) IBroadcastStream(org.red5.server.api.stream.IBroadcastStream) IStreamPacket(org.red5.server.api.stream.IStreamPacket) IoBuffer(org.apache.mina.core.buffer.IoBuffer)

Example 27 with IScope

use of org.red5.server.api.scope.IScope in project bigbluebutton by bigbluebutton.

the class ConnectionInvokerService method sendBroadcastMessage.

private void sendBroadcastMessage(final BroadcastClientMessage msg) {
    if (log.isTraceEnabled()) {
        Gson gson = new Gson();
        String json = gson.toJson(msg.getMessage());
        log.trace("Handle broadcast message: " + msg.getMessageName() + " msg=" + json);
    }
    Runnable sender = new Runnable() {

        public void run() {
            IScope meetingScope = getScope(msg.getMeetingID());
            if (meetingScope != null) {
                List<Object> params = new ArrayList<Object>();
                params.add(msg.getMessageName());
                params.add(msg.getMessage());
                if (log.isTraceEnabled()) {
                    Gson gson = new Gson();
                    String json = gson.toJson(msg.getMessage());
                    log.trace("Broadcast message: " + msg.getMessageName() + " msg=" + json);
                }
                ServiceUtils.invokeOnAllScopeConnections(meetingScope, "onMessageFromServer", params.toArray(), null);
            }
        }
    };
    /**
     * We need to add a way to cancel sending when the thread is blocked.
     * Red5 uses a semaphore to guard the rtmp connection and we've seen
     * instances where our thread is blocked preventing us from sending messages
     * to other connections. (ralam nov 19, 2015)
     */
    long endNanos = System.nanoTime() + SEND_TIMEOUT;
    Future<?> f = runExec.submit(sender);
    try {
        // Only wait for the remaining time budget         
        long timeLeft = endNanos - System.nanoTime();
        f.get(timeLeft, TimeUnit.NANOSECONDS);
    } catch (ExecutionException e) {
        log.warn("ExecutionException while sending broadcast message[" + msg.getMessageName() + "]");
    } catch (InterruptedException e) {
        log.warn("Interrupted exception while sending broadcast message[" + msg.getMessageName() + "]");
        Thread.currentThread().interrupt();
    } catch (TimeoutException e) {
        log.warn("Timeout exception while sending broadcast message[" + msg.getMessageName() + "]");
        f.cancel(true);
    }
}
Also used : ArrayList(java.util.ArrayList) Gson(com.google.gson.Gson) IScope(org.red5.server.api.scope.IScope) ISharedObject(org.red5.server.api.so.ISharedObject) ExecutionException(java.util.concurrent.ExecutionException) TimeoutException(java.util.concurrent.TimeoutException)

Example 28 with IScope

use of org.red5.server.api.scope.IScope in project bigbluebutton by bigbluebutton.

the class ParticipantsService method userEmojiStatus.

public void userEmojiStatus(Map<String, String> msg) {
    IScope scope = Red5.getConnectionLocal().getScope();
    String meetingId = scope.getName();
    String userId = (String) msg.get("userId");
    String emojiStatus = (String) msg.get("emojiStatus");
    if (StringUtils.isEmpty(emojiStatus)) {
        log.warn("Invalid EmojiStatus from client: meetingId=" + meetingId + ", userId=" + userId + ",emoji=" + emojiStatus);
        // Set emojiStatus=none if passed is null.
        emojiStatus = "none";
    }
    red5InGW.userEmojiStatus(meetingId, userId, emojiStatus);
}
Also used : IScope(org.red5.server.api.scope.IScope)

Example 29 with IScope

use of org.red5.server.api.scope.IScope in project bigbluebutton by bigbluebutton.

the class ParticipantsService method ejectUserFromMeeting.

public void ejectUserFromMeeting(Map<String, String> msg) {
    IScope scope = Red5.getConnectionLocal().getScope();
    String meetingId = scope.getName();
    String userId = (String) msg.get("userId");
    String ejectedBy = (String) msg.get("ejectedBy");
    red5InGW.ejectUserFromMeeting(meetingId, userId, ejectedBy);
}
Also used : IScope(org.red5.server.api.scope.IScope)

Example 30 with IScope

use of org.red5.server.api.scope.IScope in project bigbluebutton by bigbluebutton.

the class ParticipantsService method shareWebcam.

public void shareWebcam(String stream) {
    IScope scope = Red5.getConnectionLocal().getScope();
    String meetingId = scope.getName();
    String userId = getBbbSession().getInternalUserID();
    red5InGW.shareWebcam(meetingId, userId, stream);
}
Also used : IScope(org.red5.server.api.scope.IScope)

Aggregations

IScope (org.red5.server.api.scope.IScope)27 IConnection (org.red5.server.api.IConnection)9 ISharedObject (org.red5.server.api.so.ISharedObject)5 ArrayList (java.util.ArrayList)4 Gson (com.google.gson.Gson)3 ExecutionException (java.util.concurrent.ExecutionException)2 TimeoutException (java.util.concurrent.TimeoutException)2 HashMap (java.util.HashMap)1 IoBuffer (org.apache.mina.core.buffer.IoBuffer)1 AudioStream (org.red5.app.sip.AudioStream)1 IContext (org.red5.server.api.IContext)1 IServiceCapableConnection (org.red5.server.api.service.IServiceCapableConnection)1 IBroadcastStream (org.red5.server.api.stream.IBroadcastStream)1 IStreamListener (org.red5.server.api.stream.IStreamListener)1 IStreamPacket (org.red5.server.api.stream.IStreamPacket)1 AudioData (org.red5.server.net.rtmp.event.AudioData)1 IProviderService (org.red5.server.stream.IProviderService)1