Server-Side Communication ActionScript > Stream.play |
![]() ![]() ![]() |
Stream.play
Availability
Flash Communication Server MX.
Usage
Stream.play(streamName
, [startTime
,length
,reset
,remoteConnection]
)
Parameters
streamName
The name of any published live stream, recorded stream (FLV file), or MP3 file.
To play back FLV files, the default Flash file format for recorded streams, specify the name of the stream (for example, "myVideo"
). To play back MP3 files that you've stored on the server, or the ID3 tags of MP3 files, you must precede the stream name with mp3:
or id3:
(for example, "mp3:bolero"
or "id3:bolero"
). For more information on playing MP3 files, see Developing Communication Applications Help.
startTime
The start time of the stream playback, in seconds. If no value is specified, it is set to -2. If startTime
is -2, the server tries to play a live stream with the name specified in streamName
. If no live stream is available, the server tries to play a recorded stream with the name specified in streamName
. If no recorded stream is found, the server creates a live stream with the name specified in streamName
and waits for someone to publish to that stream. If startTime
is -1, the server attempts to play a live stream with the name specified in streamName
and waits for a publisher if no specified live stream is available. If startTime
is greater than or equal to 0, the server plays the recorded stream with the name specified in streamName
, starting from the time given. If no recorded stream is found, the play
method is ignored. If a negative value other than -1 is specified, the server interprets it as -2. This is an optional parameter.
length
The length of play, in seconds. For a live stream, a value of -1 plays the stream as long as the stream exists. Any positive value plays the stream for the corresponding number of seconds. For a recorded stream, a value of -1 plays the entire file, and a value of 0 returns the first video frame. Any positive number plays the stream for the corresponding number of seconds. By default, the value is -1. This is an optional parameter.
reset
A Boolean value, or number, that flushes the playing stream. If reset
is false
(0
), the server maintains a playlist, and each call to Stream.play
is appended to the end of the playlist so that the next play does not start until the previous play finishes. You can use this technique to create a dynamic playlist. If reset
is true
(1), any playing stream stops, and the playlist is reset. By default, the value is true
.
You can also specify a number value of 2
or 3
for the reset
parameter, which is useful when playing recorded stream files that contain message data. These values are analogous to false
(0
) and true
(1
), respectively: a value of 2
maintains a playlist, and a value of 3
resets the playlist. However, the difference is that specifying either 2
or 3
for reset
returns all messages in the specified recorded stream at once, rather than at the intervals which the messages were originally recorded (the default behavior).
For more information on Flash Communication Server logging see Flash Communication Server TechNote 16464 on the Macromedia Flash Communication Server Support Center, www.macromedia.com/support/flashcom/ts/documents/flashcom_logging.htm.
remoteConnection
A reference to a NetConnection object that is used to connect to a remote server. The requested stream plays from the remote server if this parameter is provided. This parameter is optional.
Returns
A Boolean value: true
if the Stream.play
call is accepted by the server and added to the playlist; false
otherwise. The Stream.play
method can fail if the server fails to find the stream or if an error occurs. To get information about the Stream.play
call, you can define a Stream.onStatus
handler to catch the play status or error.
If the streamName
parameter is false
, the stream stops playing. A Boolean value of true
is returned if the stop succeeds; false
otherwise.
Description
Method; controls the data source of a stream with an optional start time, duration, and reset flag to flush any previously playing stream. The Stream.play
method also has a parameter that lets you reference a NetConnection object to play a stream from another server. The Stream.play
method allows you to do the following:
![]() |
Chain streams between servers. |
![]() |
Create a hub to switch between live streams and recorded streams. |
![]() |
Combine different steams into a recorded stream. |
You can combine multiple streams to create a playlist for clients. The server-side Stream.play
method behaves a bit differently than the NetStream.play
method on the client side. A play
call on the server is similar to a publish
call on the client. It controls the source of the data that is coming into a stream. When you call Stream.play
on the server, the server becomes the publisher. Because the server has a higher priority than the client, the client is forced to unpublish from the stream if the server calls a play
method on the same stream.
In general, if any recorded streams are included in a server playlist, you cannot play the server stream as a live stream.
Note: A stream that plays from a remote server by means of the NetConnection object is a live stream.
If you require a value to begin a stream, you may need to change the Application.xml file's "Enhanced seeking" flag at the server. "Enhanced seeking" is a Boolean flag in the Application.xml file. By default, this flag is set to false
. When a play occurs, the server seeks to the closest video keyframe possible and starts from that keyframe. For example, if you want to play at time 15, and there are keyframes only at time 11 and time 17, seeking will start from time 17 instead of time 15. This is an approximate seeking method that works well with compressed streams.
If the flag is set to true
, some compression is invoked on the server. Using the previous example, if the flag is set to true
, the server creates a keyframebased on the preexisting keyframe at time 11for each keyframe from 11 through 15. Even though a keyframe does not exist at the seek time, the server generates a keyframe, which involves some processing time on the server.
Example
This example illustrates how streams can be chained between servers:
application.myRemoteConn = new NetConnection(); application.myRemoteConn.onStatus = function(info){ trace("Connection to remote server status " + info.code + "\n"); // tell all the clients for (var i = 0; i < application.clients.length; i++){ application.clients[i].call("onServerStatus", null, info.code, info.description); } }; // Use the NetConnection object to connect to a remote server application.myRemoteConn.connect(rtmp://movie.com/movieApp); // Setup the server stream application.myStream = Stream.get("foo"); if (application.myStream){ application.myStream.play("Movie1", 0, -1, true, application.myRemoteConn); }
The following example shows Stream.play
used as a hub to switch between live streams and recorded streams:
// Set up the server stream application.myStream = Stream.get("foo"); if (application.myStream){ // this server stream will play "Live1", // "Record1", and "Live2" for 5 seconds each application.myStream.play("Live1", -1, 5); application.myStream.play("Record1", 0, 5, false); application.myStream.play("Live2", -1, 5, false); }
The following example combines different streams into a recorded stream:
// Set up the server stream application.myStream = Stream.get("foo"); if (application.myStream){ // Like the previous example, this server stream // will play "Live1", "Record1", and "Live2" // for 5 seconds each. But this time, // all the data will be recorded to a recorded stream "foo". application.myStream.record(); application.myStream.play("Live1", -1, 5); application.myStream.play("Record1", 0, 5, false); application.myStream.play("Live2", -1, 5, false); }
The following example uses Stream.play
to stop playing the stream foo
:
application.myStream.play(false);
The following example creates a playlist of three MP3 files (beethoven.mp3
, mozart.mp3
, and chopin.mp3
) and plays each file in turn over the live stream foo
:
application.myStream = Stream.get("foo"); if(application.myStream) { application.myStream.play("mp3:beethoven", 0); application.myStream.play("mp3:mozart", 0, false); application.myStream.play("mp3:chopin.mp3", 0, false); }
In the following example, data messages in the recorded stream file log.flv
are returned at the intervals which they were originally recorded.
application.myStream = Stream.get("data"); if (application.myStream) { application.myStream.play("log", 0, -1); }
In the following example, data messages in the recorded stream file log.flv
are returned all at once, rather than at the intervals which they were originally recorded.
application.myStream = Stream.get("data"); if (application.myStream) { application.myStream.play("log", 0, -1, 2); }
![]() ![]() ![]() |