Package org.red5.server.stream
Class ServerStream
java.lang.Object
org.red5.server.stream.AbstractStream
org.red5.server.stream.ServerStream
- All Implemented Interfaces:
IBroadcastStream,IPlaylist,IServerStream,IStream,IConsumer,IFilter,IMessageComponent,IPipeConnectionListener,IProvider,IPushableConsumer
public class ServerStream
extends AbstractStream
implements IServerStream, IFilter, IPushableConsumer, IPipeConnectionListener
An implementation for server side stream.
- Author:
- The Red5 Project, Steven Gong ([email protected]), Paul Gregoire ([email protected])
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected IPlaylistControllerActual playlist controllerprotected IPlayItemCurrent itemprivate intCurrent item indexprotected IPlaylistControllerDefault playlist controllerprivate booleanRandom flag stateprivate booleanRepeat flag stateprivate booleanRewind flag stateprotected CopyOnWriteArrayList<IPlayItem>List of items in this playlistprivate CopyOnWriteArraySet<IStreamListener>Listeners to get notified about received packets.private StringLive broadcasting scheduled job nameprivate static final org.slf4j.Loggerprivate IMessageInputMessage inputprivate IMessageOutputMessage outputprivate RTMPMessageNext RTMP messageprivate longNext msg's timestampprivate IProviderServiceProvider serviceprotected StringStream published nameprivate WeakReference<IRecordingListener>Recording listenerprivate ISchedulingServiceScheduling serviceprivate longServer start timestampprivate StringVOD scheduled job nameprivate longVOD start timestampprivate static final longFields inherited from class org.red5.server.stream.AbstractStream
creationTime, lock, stateFields inherited from interface org.red5.server.messaging.IPushableConsumer
KEY -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidAdd an item to the list.voidAdd an item to specific index.voidaddStreamListener(IStreamListener listener) Add a listener to be notified about received packets.voidclose()Close this stream.private booleanGet currently playing itemintGet currently playing item index.getItem(int index) Get the item according to the index.getItems()intReturn number of items in listprotected RTMPMessageGetter for next RTMP message.Get the provider corresponding to this stream.Get stream publish name.Get the filename the stream is being saved as.Return registered stream listeners.booleanCheck if the playlist has more items after the currently playing one.booleanisRandom()Whether items are randomly played.booleanisRepeat()Whether repeat playing an item.booleanisRewind()Whether rewind the list.protected voidMove to the next item updating the currentItemIndex.protected voidMove to the previous item updating the currentItemIndex.voidnextItem()Go for next item decided by controller logic.protected voidNotifies handler on stream broadcast stopprotected voidNotifies handler on stream broadcast startprivate voidNotifies handler on stream recording stopprotected voidPlay next item on item endvoidonOOBControlMessage(IMessageComponent source, IPipe pipe, OOBControlMessage oobCtrlMsg) voidPipe connection event handler.voidpause()Toggles the paused state.protected voidPlay a specific IPlayItem.voidGo for the previous played item.private voidpushMessage(IMessage message) Push messagevoidpushMessage(IPipe pipe, IMessage message) Pushes message through pipevoidRemove all items.voidremoveItem(int index) Remove an item from list.voidremoveStreamListener(IStreamListener listener) Remove a listener from being notified about received packets.voidSave the broadcast stream as a file.protected voidPull the next message from IMessageInput and schedule it for push according to the timestamp.voidseek(int position) Seek to a given position in the stream.private voidSend reset messageprivate voidsendVODInitCM(IMessageInput msgIn, int start) Send VOD initialization control messageprivate voidsendVODSeekCM(IMessageInput msgIn, int position) Send VOD seek control messagevoidsetItem(int index) Set the current item for playing.voidsetPlaylistController(IPlaylistController controller) Set list controller.voidsetPublishedName(String name) voidsetRandom(boolean random) Set whether items should be randomly played.voidsetRepeat(boolean repeat) Set whether repeat playing an item.voidsetRewind(boolean rewind) Set whether rewind the list.voidstart()Start this server-side streamprotected voidBegin VOD broadcastingvoidstop()Stop this server-side streamvoidStops any currently active recording.toString()Methods inherited from class org.red5.server.stream.AbstractStream
getAbsoluteStartTimeMs, getCodecInfo, getCreationTime, getMetaData, getName, getScope, getState, getStreamAwareHandler, setCodecInfo, setMetaData, setName, setScope, setStateMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface org.red5.server.api.stream.IBroadcastStream
getMetaDataMethods inherited from interface org.red5.server.api.stream.IStream
getCodecInfo, getCreationTime, getName, getScope
-
Field Details
-
log
private static final org.slf4j.Logger log -
WAIT_THRESHOLD
private static final long WAIT_THRESHOLD- See Also:
-
publishedName
Stream published name -
controller
Actual playlist controller -
defaultController
Default playlist controller -
isRewind
private boolean isRewindRewind flag state -
isRandom
private boolean isRandomRandom flag state -
isRepeat
private boolean isRepeatRepeat flag state -
items
List of items in this playlist -
currentItemIndex
private int currentItemIndexCurrent item index -
currentItem
Current item -
msgIn
Message input -
msgOut
Message output -
providerService
Provider service -
scheduler
Scheduling service -
liveJobName
Live broadcasting scheduled job name -
vodJobName
VOD scheduled job name -
vodStartTS
private long vodStartTSVOD start timestamp -
serverStartTS
private long serverStartTSServer start timestamp -
nextTS
private long nextTSNext msg's timestamp -
nextRTMPMessage
Next RTMP message -
listeners
Listeners to get notified about received packets. -
recordingListener
Recording listener
-
-
Constructor Details
-
ServerStream
public ServerStream()Constructs a new ServerStream.
-
-
Method Details
-
addItem
Add an item to the list. -
addItem
Add an item to specific index. -
removeItem
public void removeItem(int index) Remove an item from list.- Specified by:
removeItemin interfaceIPlaylist- Parameters:
index- Index in list
-
removeAllItems
public void removeAllItems()Remove all items.- Specified by:
removeAllItemsin interfaceIPlaylist
-
getItemSize
public int getItemSize()Return number of items in list- Specified by:
getItemSizein interfaceIPlaylist- Returns:
- Number of items in list
-
getItems
-
getCurrentItemIndex
public int getCurrentItemIndex()Get currently playing item index.- Specified by:
getCurrentItemIndexin interfaceIPlaylist- Returns:
- Currently playing item index.
-
getCurrentItem
Get currently playing item- Specified by:
getCurrentItemin interfaceIPlaylist- Returns:
- Item
-
getItem
Get the item according to the index. -
previousItem
public void previousItem()Go for the previous played item.- Specified by:
previousItemin interfaceIPlaylist
-
hasMoreItems
public boolean hasMoreItems()Check if the playlist has more items after the currently playing one.- Specified by:
hasMoreItemsin interfaceIPlaylist- Returns:
true
if more items are available,false
otherwise
-
nextItem
public void nextItem()Go for next item decided by controller logic. -
setItem
public void setItem(int index) Set the current item for playing. -
isRandom
public boolean isRandom()Whether items are randomly played. -
setRandom
public void setRandom(boolean random) Set whether items should be randomly played. -
isRewind
public boolean isRewind()Whether rewind the list. -
setRewind
public void setRewind(boolean rewind) Set whether rewind the list. -
isRepeat
public boolean isRepeat()Whether repeat playing an item. -
setRepeat
public void setRepeat(boolean repeat) Set whether repeat playing an item. -
setPlaylistController
Set list controller.- Specified by:
setPlaylistControllerin interfaceIPlaylist- Parameters:
controller- Playlist controller
-
saveAs
Save the broadcast stream as a file.- Specified by:
saveAsin interfaceIBroadcastStream- Parameters:
name- The path of the file relative to the scope.isAppend- Whether to append to the end of file.- Throws:
IOException- File could not be created/written to.
-
getSaveFilename
Get the filename the stream is being saved as.- Specified by:
getSaveFilenamein interfaceIBroadcastStream- Returns:
- The filename relative to the scope or
null
if the stream is not being saved.
-
getProvider
Get the provider corresponding to this stream. Provider objects are object that- Specified by:
getProviderin interfaceIBroadcastStream- Returns:
- the provider
-
getPublishedName
Get stream publish name. Publish name is the value of the first parameter had been passed toNetStream.publish
on client side in SWF.- Specified by:
getPublishedNamein interfaceIBroadcastStream- Returns:
- Stream publish name
-
setPublishedName
- Specified by:
setPublishedNamein interfaceIBroadcastStream- Parameters:
name- Set stream publish name
-
start
public void start()Start this server-side stream -
stop
public void stop()Stop this server-side stream -
stopRecording
public void stopRecording()Stops any currently active recording. -
pause
public void pause()Toggles the paused state.- Specified by:
pausein interfaceIServerStream
-
seek
public void seek(int position) Seek to a given position in the stream.- Specified by:
seekin interfaceIServerStream- Parameters:
position- new playback position in milliseconds
-
close
public void close()Close this stream. -
onOOBControlMessage
- Specified by:
onOOBControlMessagein interfaceIMessageComponent- Parameters:
source- Message component sourcepipe- Connection pipeoobCtrlMsg- Out-of-band control message
-
pushMessage
Pushes message through pipe- Specified by:
pushMessagein interfaceIPushableConsumer- Parameters:
pipe- Pipemessage- Message- Throws:
IOException- if message could not be written
-
onPipeConnectionEvent
Pipe connection event handler. There are two types of pipe connection events so far, provider push connection event and provider disconnection event. Pipe events handling is the most common way of working with pipes.- Specified by:
onPipeConnectionEventin interfaceIPipeConnectionListener- Parameters:
event- Pipe connection event context
-
play
Play a specific IPlayItem. The strategy for now is VOD first, Live second.- Parameters:
item- Item to play
-
onItemEnd
protected void onItemEnd()Play next item on item end -
pushMessage
Push message- Parameters:
message- Message- Throws:
IOException
-
sendResetMessage
private void sendResetMessage()Send reset message -
startBroadcastVOD
protected void startBroadcastVOD()Begin VOD broadcasting -
notifyBroadcastClose
protected void notifyBroadcastClose()Notifies handler on stream broadcast stop -
notifyRecordingStop
private void notifyRecordingStop()Notifies handler on stream recording stop -
notifyBroadcastStart
protected void notifyBroadcastStart()Notifies handler on stream broadcast start -
scheduleNextMessage
protected void scheduleNextMessage()Pull the next message from IMessageInput and schedule it for push according to the timestamp. -
doPushMessage
private boolean doPushMessage() -
getNextRTMPMessage
Getter for next RTMP message.- Returns:
- Next RTMP message
-
sendVODInitCM
Send VOD initialization control message- Parameters:
msgIn- Message inputstart- Start timestamp
-
sendVODSeekCM
Send VOD seek control message- Parameters:
msgIn- Message inputposition- New timestamp to play from
-
moveToNext
protected void moveToNext()Move to the next item updating the currentItemIndex. -
moveToPrevious
protected void moveToPrevious()Move to the previous item updating the currentItemIndex. -
addStreamListener
Description copied from interface:IBroadcastStreamAdd a listener to be notified about received packets.- Specified by:
addStreamListenerin interfaceIBroadcastStream- Parameters:
listener- the listener to add
-
getStreamListeners
Description copied from interface:IBroadcastStreamReturn registered stream listeners.- Specified by:
getStreamListenersin interfaceIBroadcastStream- Returns:
- the registered listeners
-
removeStreamListener
Description copied from interface:IBroadcastStreamRemove a listener from being notified about received packets.- Specified by:
removeStreamListenerin interfaceIBroadcastStream- Parameters:
listener- the listener to remove
-
toString
-