Package org.red5.server.net.rtmp.codec
Class RTMPProtocolEncoder
java.lang.Object
org.red5.server.net.rtmp.codec.RTMPProtocolEncoder
- All Implemented Interfaces:
IEventEncoder,Constants
RTMP protocol encoder encodes RTMP messages and packets to byte buffers.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate longTolerance (in milliseconds) for late media on streams.private booleanWhether or not to allow dropper determination code.private booleanIndicates if we should drop live packets with future timestamp (i.e, when publisher bandwidth is limited) - EXPERIMENTALprivate longHighest tardiness level before dropping key framesprotected org.slf4j.Loggerprivate longMiddle tardiness level, between base and this value disposable frames will be dropped.Fields inherited from interface org.red5.server.net.rtmp.message.Constants
HANDSHAKE_SIZE, HEADER_CONTINUE, HEADER_NEW, HEADER_SAME_SOURCE, HEADER_TIMER_CHANGE, MEDIUM_INT_MAX, SO_CLIENT_CLEAR_DATA, SO_CLIENT_DELETE_DATA, SO_CLIENT_INITIAL_DATA, SO_CLIENT_SEND_MESSAGE, SO_CLIENT_STATUS, SO_CLIENT_UPDATE_ATTRIBUTE, SO_CLIENT_UPDATE_DATA, SO_CONNECT, SO_DELETE_ATTRIBUTE, SO_DISCONNECT, SO_SEND_MESSAGE, SO_SET_ATTRIBUTE, SOURCE_TYPE_LIVE, SOURCE_TYPE_VOD, TYPE_ABORT, TYPE_AGGREGATE, TYPE_AUDIO_DATA, TYPE_BYTES_READ, TYPE_CHUNK_SIZE, TYPE_CLIENT_BANDWIDTH, TYPE_EDGE_ORIGIN, TYPE_FLEX_MESSAGE, TYPE_FLEX_SHARED_OBJECT, TYPE_FLEX_STREAM_SEND, TYPE_INVOKE, TYPE_NOTIFY, TYPE_PING, TYPE_SERVER_BANDWIDTH, TYPE_SHARED_OBJECT, TYPE_STREAM_METADATA, TYPE_VIDEO_DATA -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate intcalculateHeaderSize(Header header, Header lastHeader) Calculate number of bytes necessary to encode the header.protected booleandropMessage(int channelId, IRTMPEvent message) Determine if this message should be dropped.org.apache.mina.core.buffer.IoBufferEncodes object with given protocol state to byte bufferorg.apache.mina.core.buffer.IoBufferencodeAggregate(Aggregate aggregate) Encodes Aggregate event to byte buffer.org.apache.mina.core.buffer.IoBufferencodeAudioData(AudioData audioData) Encodes AudioData event to byte buffer.org.apache.mina.core.buffer.IoBufferencodeBytesRead(BytesRead bytesRead) Encodes BytesRead event to byte buffer.org.apache.mina.core.buffer.IoBufferencodeChunkSize(ChunkSize chunkSize) Encodes ChunkSize event to byte buffer.private org.apache.mina.core.buffer.IoBufferencodeClientBW(ClientBW clientBW) Encode client-side bandwidth event.protected voidencodeCommand(org.apache.mina.core.buffer.IoBuffer out, ICommand command) Encode command event and fill given byte buffer.protected org.apache.mina.core.buffer.IoBufferencodeCommand(Notify invoke) Encode notification event.org.apache.mina.core.buffer.IoBufferEncodes Flex message event.org.apache.mina.core.buffer.IoBufferorg.apache.mina.core.buffer.IoBufferencodeHeader(Header header, Header lastHeader) Encode RTMP header.voidencodeHeader(Header header, Header lastHeader, org.apache.mina.core.buffer.IoBuffer buf) Encode RTMP header into given IoBuffer.org.apache.mina.core.buffer.IoBufferencodeInvoke(Invoke invoke) Encodes Invoke event to byte buffer.org.apache.mina.core.buffer.IoBufferencodeMessage(Header header, IRTMPEvent message) Encode message.org.apache.mina.core.buffer.IoBufferencodeNotify(Notify notify) Encodes Notify event to byte buffer.org.apache.mina.core.buffer.IoBufferencodePacket(Packet packet) Encode packet.org.apache.mina.core.buffer.IoBufferencodePing(Ping ping) Encodes Ping event to byte buffer.private org.apache.mina.core.buffer.IoBufferencodeServerBW(ServerBW serverBW) Encode server-side bandwidth event.org.apache.mina.core.buffer.IoBufferencodeStreamMetadata(Notify metaData) org.apache.mina.core.buffer.IoBufferencodeUnknown(Unknown unknown) Encodes Unknown event to byte buffer.org.apache.mina.core.buffer.IoBufferencodeVideoData(VideoData videoData) Encodes VideoData event to byte buffer.protected StatusObjectgenerateErrorResult(String code, Throwable error) Generate error object to return for given exception.longprivate bytegetHeaderType(Header header, Header lastHeader) Determine type of header to use.voidsetBaseTolerance(long baseTolerance) voidsetDropEncoded(boolean dropEncoded) voidsetDropLiveFuture(boolean dropLiveFuture) Setter for dropLiveFutureprivate void
-
Field Details
-
log
protected org.slf4j.Logger log -
baseTolerance
private long baseToleranceTolerance (in milliseconds) for late media on streams. A set of levels based on this value will be determined. -
midTolerance
private long midToleranceMiddle tardiness level, between base and this value disposable frames will be dropped. Between this and highest value regular interframes will be dropped. -
highestTolerance
private long highestToleranceHighest tardiness level before dropping key frames -
dropLiveFuture
private boolean dropLiveFutureIndicates if we should drop live packets with future timestamp (i.e, when publisher bandwidth is limited) - EXPERIMENTAL -
dropEncoded
private boolean dropEncodedWhether or not to allow dropper determination code.
-
-
Constructor Details
-
RTMPProtocolEncoder
public RTMPProtocolEncoder()
-
-
Method Details
-
encode
Encodes object with given protocol state to byte buffer- Parameters:
message- Object to encode- Returns:
- IoBuffer with encoded data
- Throws:
Exception- Any decoding exception
-
encodePacket
Encode packet.- Parameters:
packet- RTMP packet- Returns:
- Encoded data
-
dropMessage
Determine if this message should be dropped. If the traffic from server to client is congested, then drop LIVE messages to help alleviate congestion. - determine latency between server and client using ping - ping timestamp is unsigned int (4 bytes) and is set from value on sender 1st drop disposable frames - lowest mark 2nd drop interframes - middle 3rd drop key frames - high mark- Parameters:
channelId- the channel IDmessage- the message- Returns:
- true to drop; false to send
-
getHeaderType
Determine type of header to use.- Parameters:
header- RTMP message headerlastHeader- Previous header- Returns:
- Header type to use.
-
calculateHeaderSize
Calculate number of bytes necessary to encode the header.- Parameters:
header- RTMP message headerlastHeader- Previous header- Returns:
- Calculated size
-
encodeHeader
Encode RTMP header.- Parameters:
header- RTMP message headerlastHeader- Previous header- Returns:
- Encoded header data
-
encodeHeader
public void encodeHeader(Header header, Header lastHeader, org.apache.mina.core.buffer.IoBuffer buf) Encode RTMP header into given IoBuffer.- Parameters:
header- RTMP message headerlastHeader- Previous headerbuf- Buffer to write encoded header to
-
encodeMessage
Encode message.- Parameters:
header- RTMP message headermessage- RTMP message (event)- Returns:
- Encoded message data
-
encodeServerBW
Encode server-side bandwidth event.- Parameters:
serverBW- Server-side bandwidth event- Returns:
- Encoded event data
-
encodeClientBW
Encode client-side bandwidth event.- Parameters:
clientBW- Client-side bandwidth event- Returns:
- Encoded event data
-
encodeChunkSize
Encodes ChunkSize event to byte buffer.- Specified by:
encodeChunkSizein interfaceIEventEncoder- Parameters:
chunkSize- ChunkSize event- Returns:
- Byte buffer
-
encodeNotify
Encodes Notify event to byte buffer.- Specified by:
encodeNotifyin interfaceIEventEncoder- Parameters:
notify- Notify event- Returns:
- Byte buffer
-
encodeInvoke
Encodes Invoke event to byte buffer.- Specified by:
encodeInvokein interfaceIEventEncoder- Parameters:
invoke- Invoke event- Returns:
- Byte buffer
-
encodeCommand
Encode notification event.- Parameters:
invoke- Notification event- Returns:
- Encoded event data
-
encodeCommand
Encode command event and fill given byte buffer.- Parameters:
out- Buffer to fillcommand- Command event
-
encodePing
Encodes Ping event to byte buffer.- Specified by:
encodePingin interfaceIEventEncoder- Parameters:
ping- Ping event- Returns:
- Byte buffer
-
encodeBytesRead
Encodes BytesRead event to byte buffer.- Specified by:
encodeBytesReadin interfaceIEventEncoder- Parameters:
bytesRead- BytesRead event- Returns:
- Byte buffer
-
encodeAggregate
Encodes Aggregate event to byte buffer.- Specified by:
encodeAggregatein interfaceIEventEncoder- Parameters:
aggregate- Aggregate event- Returns:
- Byte buffer
-
encodeAudioData
Encodes AudioData event to byte buffer.- Specified by:
encodeAudioDatain interfaceIEventEncoder- Parameters:
audioData- AudioData event- Returns:
- Byte buffer
-
encodeVideoData
Encodes VideoData event to byte buffer.- Specified by:
encodeVideoDatain interfaceIEventEncoder- Parameters:
videoData- VideoData event- Returns:
- Byte buffer
-
encodeUnknown
Encodes Unknown event to byte buffer.- Specified by:
encodeUnknownin interfaceIEventEncoder- Parameters:
unknown- Unknown event- Returns:
- Byte buffer
-
encodeStreamMetadata
-
generateErrorResult
Generate error object to return for given exception.- Parameters:
code- callerror- error- Returns:
- status object
-
encodeFlexMessage
Encodes Flex message event.- Parameters:
msg- Flex message event- Returns:
- Encoded data
-
encodeFlexStreamSend
-
updateTolerance
private void updateTolerance() -
setBaseTolerance
public void setBaseTolerance(long baseTolerance) -
setDropLiveFuture
public void setDropLiveFuture(boolean dropLiveFuture) Setter for dropLiveFuture- Parameters:
dropLiveFuture- drop live data with future times
-
setDropEncoded
public void setDropEncoded(boolean dropEncoded) -
getBaseTolerance
public long getBaseTolerance()
-