Examples of IRTMPEvent


Examples of org.red5.server.net.rtmp.event.IRTMPEvent

    if (!reader.hasMoreTags()) {
      return null;
    }
    ITag tag = reader.readTag();

    IRTMPEvent msg;
    switch (tag.getDataType()) {
      case TYPE_AUDIO_DATA:
        msg = new AudioData(tag.getBody());
        break;
      case TYPE_VIDEO_DATA:
        msg = new VideoData(tag.getBody());
        break;
      case TYPE_INVOKE:
        msg = new Invoke(tag.getBody());
        break;
      case TYPE_NOTIFY:
        msg = new Notify(tag.getBody());
        break;
      default:
        log.warn("Unexpected type? " + tag.getDataType());
        msg = new Unknown(tag.getDataType(), tag.getBody());
        break;
    }
    msg.setTimestamp(tag.getTimestamp());
    //msg.setSealed(true);
    return msg;
  }
View Full Code Here

Examples of org.red5.server.net.rtmp.event.IRTMPEvent

   * @param message          RTMP message
   * @return <tt>true</tt> indicates success and <tt>false</tt>
   * indicates buffer is full.
   */
  public boolean putMessage(RTMPMessage message) {
    IRTMPEvent body = message.getBody();
    if (!(body instanceof IStreamData)) {
      throw new RuntimeException("expected IStreamData but got " + body);
    }

    int size = ((IStreamData) body).getData().limit();
View Full Code Here

Examples of org.red5.server.net.rtmp.event.IRTMPEvent

   * @return <tt>null</tt> if buffer is empty.
   */
  public RTMPMessage takeMessage() {
    RTMPMessage message = messageQueue.poll();
    if (message != null) {
      IRTMPEvent body = message.getBody();
      if (!(body instanceof IStreamData)) {
        throw new RuntimeException("expected IStreamData but got "
            + body);
      }

View Full Code Here

Examples of org.red5.server.net.rtmp.event.IRTMPEvent

    } else if (message instanceof StatusMessage) {
      StatusMessage statusMsg = (StatusMessage) message;
      data.sendStatus(statusMsg.getBody());
    } else if (message instanceof RTMPMessage) {
      RTMPMessage rtmpMsg = (RTMPMessage) message;
      IRTMPEvent msg = rtmpMsg.getBody();
      Header header = new Header();
      int timestamp = streamTracker.add(msg);
      if (timestamp < 0) {
        log.warn("Skipping message with negative timestamp.");
        return;
      }
      header.setTimerRelative(streamTracker.isRelative());
      header.setTimer(timestamp);

      switch (msg.getDataType()) {
        case Constants.TYPE_STREAM_METADATA:
          Notify notify = new Notify(((Notify) msg).getData()
              .asReadOnlyBuffer());
          notify.setHeader(header);
          notify.setTimestamp(header.getTimer());
View Full Code Here

Examples of org.red5.server.net.rtmp.event.IRTMPEvent

  }

  /** {@inheritDoc} */
    public void messageReceived(RTMPConnection conn, ProtocolState state, Object in) throws Exception {

    IRTMPEvent message = null;
    try {

      final Packet packet = (Packet) in;
      message = packet.getMessage();
      final Header header = packet.getHeader();
      final Channel channel = conn.getChannel(header.getChannelId());
      final IClientStream stream = conn.getStreamById(header
          .getStreamId());

      if (log.isDebugEnabled()) {
        log.debug("Message recieved");
        log.debug("Stream Id: " + header);
        log.debug("Channel: " + channel);
      }

      // Thread local performance ? Should we benchmark
      Red5.setConnectionLocal(conn);

      // XXX: HACK HACK HACK to support stream ids
      BaseRTMPHandler.setStreamId(header.getStreamId());

      // Increase number of received messages
      conn.messageReceived();

      //if (message instanceof IRTMPEvent) {
      message.setSource(conn);
      //}

      switch (header.getDataType()) {
        case TYPE_CHUNK_SIZE:
          onChunkSize(conn, channel, header, (ChunkSize) message);
          break;

        case TYPE_INVOKE:
        case TYPE_FLEX_MESSAGE:
          onInvoke(conn, channel, header, (Invoke) message, (RTMP) state);
          if(message.getHeader().getStreamId()!=0
              && ((Invoke)message).getCall().getServiceName()==null
              && ACTION_PUBLISH.equals(((Invoke)message).getCall().getServiceMethodName())) {
            if (stream != null) {
              // Only dispatch if stream really was created
              ((IEventDispatcher) stream).dispatchEvent(message);
            }
          }
          break;

        case TYPE_NOTIFY: // just like invoke, but does not return
          if (((Notify) message).getData() != null && stream != null) {
            // Stream metadata
            ((IEventDispatcher) stream).dispatchEvent(message);
          } else {
            onInvoke(conn, channel, header, (Notify) message, (RTMP) state);
          }
          break;
         
        case TYPE_FLEX_STREAM_SEND:
          if (stream != null) {
            ((IEventDispatcher) stream).dispatchEvent(message);
          }
          break;
         
        case TYPE_PING:
          onPing(conn, channel, header, (Ping) message);
          break;

        case TYPE_BYTES_READ:
          onStreamBytesRead(conn, channel, header,
              (BytesRead) message);
          break;

        case TYPE_AUDIO_DATA:
        case TYPE_VIDEO_DATA:
          // log.info("in packet: "+source.getSize()+"
          // ts:"+source.getTimer());

          // NOTE: If we respond to "publish" with "NetStream.Publish.BadName",
          // the client sends a few stream packets before stopping. We need to
          // ignore them.
          if (stream != null)
            ((IEventDispatcher) stream).dispatchEvent(message);
          break;
        case TYPE_FLEX_SHARED_OBJECT:
        case TYPE_SHARED_OBJECT:
          onSharedObject(conn, channel, header,
              (SharedObjectMessage) message);
          break;
        default:
          log.debug("Unknown type: {}", header.getDataType());
      }
      if (message instanceof Unknown) {
        log.info("{}", message);
      }
    } catch (RuntimeException e) {
      // TODO Auto-generated catch block
      log.error("Exception", e);
    }
    if (message != null) {
      message.release();
    }
  }
View Full Code Here

Examples of org.red5.server.net.rtmp.event.IRTMPEvent

    StreamCodecInfo info = null;
    if (codecInfo instanceof StreamCodecInfo) {
      info = (StreamCodecInfo) codecInfo;
    }

    IRTMPEvent rtmpEvent;
    try {
      rtmpEvent = (IRTMPEvent) event;
    } catch (ClassCastException e) {
      log.error("Class cast exception in event dispatch", e);
      return;
    }
    int eventTime = -1;
    // If this is first packet save it's timestamp
    if (firstPacketTime == -1) {
      firstPacketTime = rtmpEvent.getTimestamp();
    }
    if (rtmpEvent instanceof AudioData) {
      if (info != null) {
        info.setHasAudio(true);
      }
      if (rtmpEvent.getHeader().isTimerRelative()) {
        audioTime += rtmpEvent.getTimestamp();
      } else {
        audioTime = rtmpEvent.getTimestamp();
      }
      eventTime = audioTime;
    } else if (rtmpEvent instanceof VideoData) {
      IVideoStreamCodec videoStreamCodec = null;
      if (videoCodecFactory != null && checkVideoCodec) {
        videoStreamCodec = videoCodecFactory
            .getVideoCodec(((VideoData) rtmpEvent).getData());
        if (codecInfo instanceof StreamCodecInfo) {
          ((StreamCodecInfo) codecInfo)
              .setVideoCodec(videoStreamCodec);
        }
        checkVideoCodec = false;
      } else if (codecInfo != null) {
        videoStreamCodec = codecInfo.getVideoCodec();
      }

      if (videoStreamCodec != null) {
        videoStreamCodec.addData(((VideoData) rtmpEvent).getData());
      }

      if (info != null) {
        info.setHasVideo(true);
      }
      if (rtmpEvent.getHeader().isTimerRelative()) {
        videoTime += rtmpEvent.getTimestamp();
      } else {
        videoTime = rtmpEvent.getTimestamp();
      }
      eventTime = videoTime;
    } else if (rtmpEvent instanceof Invoke) {
      if (rtmpEvent.getHeader().isTimerRelative()) {
        dataTime += rtmpEvent.getTimestamp();
      } else {
        dataTime = rtmpEvent.getTimestamp();
      }
      return;
    } else if (rtmpEvent instanceof Notify) {
      if (rtmpEvent.getHeader().isTimerRelative()) {
        dataTime += rtmpEvent.getTimestamp();
      } else {
        dataTime = rtmpEvent.getTimestamp();
      }
      eventTime = dataTime;
    }

    if (rtmpEvent instanceof IStreamData
View Full Code Here

Examples of org.red5.server.net.rtmp.event.IRTMPEvent

     */
    public ByteBuffer encodePacket(RTMP rtmp, Packet packet) {

    final Header header = packet.getHeader();
    final int channelId = header.getChannelId();
    final IRTMPEvent message = packet.getMessage();
    ByteBuffer data;

    if (message instanceof ChunkSize) {
      ChunkSize chunkSizeMsg = (ChunkSize) message;
      rtmp.setWriteChunkSize(chunkSizeMsg.getSize());
    }

    try {
      data = encodeMessage(rtmp, header, message);
    } finally {
      message.release();
    }

    if (data.position() != 0) {
      data.flip();
    } else {
View Full Code Here

Examples of org.red5.server.net.rtmp.event.IRTMPEvent

    this.mrtmpManager = mrtmpManager;
  }

  @Override
  public void messageReceived(RTMPConnection conn, ProtocolState state, Object in) throws Exception {
    IRTMPEvent message = null;
    final Packet packet = (Packet) in;
    message = packet.getMessage();
    final Header header = packet.getHeader();
    final Channel channel = conn.getChannel(header.getChannelId());

    // Increase number of received messages
    conn.messageReceived();

    if (header.getDataType() == TYPE_BYTES_READ) {
      // TODO need to sync the bytes read on edge and origin
      onStreamBytesRead(conn, channel, header,
          (BytesRead) message);
    }

    if (header.getDataType() == TYPE_INVOKE) {
      final IServiceCall call = ((Invoke) message).getCall();
      final String action = call.getServiceMethodName();
      if (call.getServiceName() == null &&
          !conn.isConnected() &&
          action.equals(ACTION_CONNECT)) {
        handleConnect(conn, channel, header, (Invoke) message, (RTMP) state);
        return;
      }
    }

    switch (header.getDataType()) {
      case TYPE_CHUNK_SIZE:
      case TYPE_INVOKE:
      case TYPE_FLEX_MESSAGE:
      case TYPE_NOTIFY:
      case TYPE_AUDIO_DATA:
      case TYPE_VIDEO_DATA:
      case TYPE_FLEX_SHARED_OBJECT:
      case TYPE_SHARED_OBJECT:
      case TYPE_BYTES_READ:
        forwardPacket(conn, packet);
        break;
      case TYPE_PING:
        onPing(conn, channel, header, (Ping) message);
        break;

      default:
        if (log.isDebugEnabled()) {
          log.debug("Unknown type: "+header.getDataType());
        }
    }
    if (message instanceof Unknown) {
      log.info(message.toString());
    }
    if (message != null) {
      message.release();
    }   
  }
View Full Code Here

Examples of org.red5.server.net.rtmp.event.IRTMPEvent

      // Do not unsubscribe as this kills VOD seek while in buffer
      // this.pipe.unsubscribe(this);
      return null;
    }
    ITag tag = reader.readTag();
    IRTMPEvent msg = null;
    int timestamp = tag.getTimestamp();
    switch (tag.getDataType()) {
      case Constants.TYPE_AUDIO_DATA:
        msg = new AudioData(tag.getBody());
        break;
      case Constants.TYPE_VIDEO_DATA:
        msg = new VideoData(tag.getBody());
        break;
      case Constants.TYPE_INVOKE:
        msg = new Invoke(tag.getBody());
        break;
      case Constants.TYPE_NOTIFY:
        msg = new Notify(tag.getBody());
        break;
      default:
        log.warn("Unexpected type? " + tag.getDataType());
        msg = new Unknown(tag.getDataType(), tag.getBody());
        break;
    }
    msg.setTimestamp(timestamp);
    RTMPMessage rtmpMsg = new RTMPMessage();
    rtmpMsg.setBody(msg);
    return rtmpMsg;
  }
View Full Code Here

Examples of org.red5.server.net.rtmp.event.IRTMPEvent

    }

    buf.flip();

    try {
      final IRTMPEvent message = decodeMessage(rtmp, packet.getHeader(), buf);
      packet.setMessage(message);

      if (message instanceof ChunkSize) {
        ChunkSize chunkSizeMsg = (ChunkSize) message;
        rtmp.setReadChunkSize(chunkSizeMsg.getSize());
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.