Class StreamService

java.lang.Object
org.red5.server.stream.StreamService
All Implemented Interfaces:
IScopeService, IStreamService

public class StreamService extends Object implements IStreamService
Stream service
  • Field Details

    • urlKeys

      private static String[] urlKeys
    • log

      private static org.slf4j.Logger log
    • simplePlayback

      private ThreadLocal<Boolean> simplePlayback
      Use to determine playback type.
  • Constructor Details

    • StreamService

      public StreamService()
  • Method Details

    • createStream

      public Number createStream()
      Create a stream and return a corresponding id.
      Specified by:
      createStream in interface IStreamService
      Returns:
      ID of created stream
    • createStream

      public Number createStream(Number streamId)
      Create a stream and return a corresponding id.
      Specified by:
      createStream in interface IStreamService
      Parameters:
      streamId - Stream id
      Returns:
      ID of created stream
    • initStream

      public void initStream(Number streamId)
      Called by FMS.
      Specified by:
      initStream in interface IStreamService
      Parameters:
      streamId - Stream id
    • initStream

      public void initStream(Number streamId, Object idk)
      Called by FMS.
      Specified by:
      initStream in interface IStreamService
      Parameters:
      streamId - Stream id
      idk - I dont know what this is yet
    • closeStream

      public void closeStream()
      Close stream
    • closeStream

      public void closeStream(IConnection conn, Number streamId)
      Close stream. This method can close both IClientBroadcastStream (coming from Flash Player to Red5) and ISubscriberStream (from Red5 to Flash Player). Corresponding application handlers (streamSubscriberClose, etc.) are called as if close was initiated by Flash Player. It is recommended to remember stream id in application handlers, ex.:
       public void streamBroadcastStart(IBroadcastStream stream) {
           super.streamBroadcastStart(stream);
           if (stream instanceof IClientBroadcastStream) {
               int publishedStreamId = ((ClientBroadcastStream) stream).getStreamId();
               Red5.getConnectionLocal().setAttribute(PUBLISHED_STREAM_ID_ATTRIBUTE, publishedStreamId);
           }
       }
       
       public void streamPlaylistItemPlay(IPlaylistSubscriberStream stream, IPlayItem item, boolean isLive) {
           super.streamPlaylistItemPlay(stream, item, isLive);
           Red5.getConnectionLocal().setAttribute(WATCHED_STREAM_ID_ATTRIBUTE, stream.getStreamId());
       }
       
      When stream is closed, corresponding NetStream status will be sent to stream provider / consumers. Implementation is based on Red5's StreamService.close()
      Specified by:
      closeStream in interface IStreamService
      Parameters:
      conn - client connection
      streamId - stream ID (number: 1,2,...)
    • releaseStream

      public void releaseStream(String streamName)
      Called by FME.
      Specified by:
      releaseStream in interface IStreamService
      Parameters:
      streamName - stream name
    • deleteStream

      public void deleteStream(Number streamId)
      Close the stream if not been closed. Deallocate the related resources.
      Specified by:
      deleteStream in interface IStreamService
      Parameters:
      streamId - Stream id
    • deleteStream

      public void deleteStream(IStreamCapableConnection conn, Number streamId)
      Delete stream
      Specified by:
      deleteStream in interface IStreamService
      Parameters:
      conn - Stream capable connection
      streamId - Stream id
    • pauseRaw

      public void pauseRaw(Boolean pausePlayback, int position)
      Undocumented Flash Plugin 10 call, assuming to be the alias to pause(boolean, int)
      Specified by:
      pauseRaw in interface IStreamService
      Parameters:
      pausePlayback - Pause or resume flash
      position - Pause position
    • pause

      public void pause(Boolean pausePlayback, int position)
      Pause at given position. Required as "pausePlayback" can be "null" if no flag is passed by the client
      Specified by:
      pause in interface IStreamService
      Parameters:
      pausePlayback - Pause playback or not
      position - Pause position
    • play

      public void play(String name, int start, int length, Object reset)
      Plays back a stream based on the supplied name, from the specified position for the given length of time.
      Parameters:
      name - - The name of a recorded file, or the identifier for live data. If
      start - - The start time, in seconds. Allowed values are -2, -1, 0, or a positive number. The default value is -2, which looks for a live stream, then a recorded stream, and if it finds neither, opens a live stream. If -1, plays only a live stream. If 0 or a positive number, plays a recorded stream, beginning start seconds in.
      length - - The duration of the playback, in seconds. Allowed values are -1, 0, or a positive number. The default value is -1, which plays a live or recorded stream until it ends. If 0, plays a single frame that is start seconds from the beginning of a recorded stream. If a positive number, plays a live or recorded stream for length seconds.
      reset - - Whether to clear a playlist. The default value is 1 or true, which clears any previous play calls and plays name immediately. If 0 or false, adds the stream to a playlist. If 2, maintains the playlist and returns all stream messages at once, rather than at intervals. If 3, clears the playlist and returns all stream messages at once.
    • play

      public void play(String name, int start, int length, boolean flushPlaylist)
      Publishes stream from given position for given amount of time
      Specified by:
      play in interface IStreamService
      Parameters:
      name - Stream published name
      start - Start position
      length - Playback length
      flushPlaylist - Flush playlist?
    • play

      public void play(String name, int start, int length)
      Play stream with name from start position and for given amount if time
      Specified by:
      play in interface IStreamService
      Parameters:
      name - Stream name
      start - Start position
      length - Playback length
    • play

      public void play(String name, int start)
      Play stream with name from start position
      Specified by:
      play in interface IStreamService
      Parameters:
      name - Stream name
      start - Start position
    • play

      public void play(String name)
      Play stream with name
      Specified by:
      play in interface IStreamService
      Parameters:
      name - Stream name
    • play

      public void play(Boolean dontStop)
      Play stream without initial stop
      Specified by:
      play in interface IStreamService
      Parameters:
      dontStop - Stoppage flag
    • play2

      public void play2(String oldStreamName, int start, String transition, int length, double offset, String streamName)
      Dynamic streaming play method. This is a convenience method.
      Parameters:
      oldStreamName - old
      start - start pos
      transition - type of transition
      length - length to play
      offset - offset
      streamName - stream name
    • play2

      public void play2(ObjectMap params)
      Dynamic streaming play method. This is a convenience method.
      Parameters:
      params - play parameters
    • play2

      public void play2(Map<String,?> playOptions)
      Dynamic streaming play method. The following properties are supported on the play options:
       streamName: String. The name of the stream to play or the new stream to switch to.
       oldStreamName: String. The name of the initial stream that needs to be switched out. This is not needed and ignored 
                       when play2 is used for just playing the stream and not switching to a new stream.
       start: Number. The start time of the new stream to play, just as supported by the existing play API. and it has the 
                      same defaults. This is ignored when the method is called for switching (in other words, the transition 
                      is either NetStreamPlayTransition.SWITCH or NetStreamPlayTransitions.SWAP)
       len: Number. The duration of the playback, just as supported by the existing play API and has the same defaults.
       transition: String. The transition mode for the playback command. It could be one of the following:
            NetStreamPlayTransitions.RESET
            NetStreamPlayTransitions.APPEND
            NetStreamPlayTransitions.SWITCH
            NetStreamPlayTransitions.SWAP
       
      NetStreamPlayTransitions:
            APPEND : String = "append" - Adds the stream to a playlist and begins playback with the first stream.
            APPEND_AND_WAIT : String = "appendAndWait" - Builds a playlist without starting to play it from the first stream.
            RESET : String = "reset" - Clears any previous play calls and plays the specified stream immediately.
            RESUME : String = "resume" - Requests data from the new connection starting from the point at which the previous connection ended.
            STOP : String = "stop" - Stops playing the streams in a playlist.
            SWAP : String = "swap" - Replaces a content stream with a different content stream and maintains the rest of the playlist.
            SWITCH : String = "switch" - Switches from playing one stream to another stream, typically with streams of the same content.
       
      Parameters:
      playOptions - play options
      See Also:
    • publish

      public void publish(Boolean dontStop)
      Publish
      Specified by:
      publish in interface IStreamService
      Parameters:
      dontStop - Whether need to stop first
    • parseQueryParameters

      private Map<String,String> parseQueryParameters(String name)
    • parsePathSegments

      public Map<String,String> parsePathSegments(String name)
    • publish

      public void publish(String name, String mode)
      Publishes stream with given name and mode We have added "synchronized" because this method can be called exactly with the same names at the same time It creates an extra zombi scope that is not deleted anytime. By synching this method, we prevent this problem.
      Specified by:
      publish in interface IStreamService
      Parameters:
      name - Stream published name
      mode - Stream publishing mode
    • publish

      public void publish(String name)
      Publishes stream with given name
      Specified by:
      publish in interface IStreamService
      Parameters:
      name - Stream published name
    • seek

      public void seek(int position)
      Seek to position
      Specified by:
      seek in interface IStreamService
      Parameters:
      position - Seek position
    • receiveVideo

      public void receiveVideo(boolean receive)
      Can recieve video?
      Specified by:
      receiveVideo in interface IStreamService
      Parameters:
      receive - Boolean flag
    • receiveAudio

      public void receiveAudio(boolean receive)
      Can recieve audio?
      Specified by:
      receiveAudio in interface IStreamService
      Parameters:
      receive - Boolean flag
    • getBroadcastScope

      public IBroadcastScope getBroadcastScope(IScope scope, String name)
      Return broadcast scope object for given scope and child scope name.
      Parameters:
      scope - Scope object
      name - Child scope name
      Returns:
      Broadcast scope
    • sendNSFailed

      public void sendNSFailed(IConnection conn, String errorCode, String description, String name, Number streamId)
      Send NetStream.Play.Failed to the client.
      Parameters:
      conn -
      errorCode -
      description -
      name -
      streamId -
    • sendNSStatus

      private void sendNSStatus(IConnection conn, String statusCode, String description, String name, Number streamId)
      Send NetStream.Status to the client.
      Parameters:
      conn -
      statusCode - see StatusCodes class
      description -
      name -
      streamId -
    • sendNetStreamStatus

      public static void sendNetStreamStatus(IConnection conn, String statusCode, String description, String name, String status, Number streamId)
      Send NetStream.Status to the client.
      Parameters:
      conn - connection
      statusCode - NetStream status code
      description - description
      name - name
      status - The status - error, warning, or status
      streamId - stream id