The priorityClass element controls how one media element interrupts the playback of another element and the playback state of the interrupted media element. If you simply want to configure one element to interrupt playback of another, you can use an excl or seq element with a begin attribute set to start one element while another element is playing.
The priorityClass element, however, enables you to
specify whether the interrupted element stops, pauses, or can never
be interrupted. If a media element is set to
Pause when interrupted, it will continue to stream
from the point at which it was paused when the element that
interrupted it ends. If it is set to
Stop, it will not
stream when the element that interrupted it ends. Using the
priorityClass element, you can also specify whether an
interruption is deferred until the current media element
finishes or ignored altogether. Furthermore, the child elements in
a priorityClass element and the priorityClass
elements contained within an excl element container are
prioritized by the order in which they are listed in the playlist.
The ability to adjust the priority further enables you to control
the behavior of child elements.
Keep the following points in mind when working with priorityClass elements:
Stop. In this case, if one media element interrupts another element, the interrupted element stops and does not resume.
The following example features each of the three attributes that are exclusive to the priorityClass element: peers, higher, and lower. In practical use, you would probably choose a simpler playlist design, but this example illustrates how the priorityClass element and its attributes control the interruption and flow of a playlist.
The playlist consists of three priorityClass elements
contained within an excl element. Since its begin
attribute is set to 0 seconds (
0s), the media
element named media1 plays first. After 10 seconds, media2
interrupts media1. Media2 is within the same priorityClass
element as media1, meaning that they are peers. Because the
peers attribute of media1's priorityClass is set to
Stop, media1 stops when media2 interrupts it.
The media element named media4 is set to begin four
seconds into the playlist. However, the lower attribute of
the priorityClass element named Priority1 is set to
Defer. Therefore, because media4 is in a lower-ranking
priorityClass element (Priority3) than the media
elements in Priority1, media4 cannot start until all the
media elements in Priority1 finish.
Ten seconds after media4 begins, the media element named
media3 begins (because its begin attribute is set to
media4.begin+10s). The element named media3 is in the
priorityClass element named Priority2, which has a higher
priority than Priority3. Because the higher attribute in
Priority3 is set to
Pause, media4 pauses until media3
has finished playing. After media3 is finished, media4 continues
playing back from the point at which it was paused.
<?wsx version='1.0'?> <smil> <excl> <priorityClass id="Priority1" peers="Stop" lower="Defer"> <media id="media1" src="Media1.wmv" begin="0s"/> <media id="media2" src="Media2.wmv" begin="media1.begin+10s"/> </priorityClass> <priorityClass id="Priority2"> <media id="media3" src="Media3.wmv" begin="media4.begin+10s"/> </priorityClass> <priorityClass id="Priority3" higher="Pause"> <media id="media4" src="Media4.wmv" begin="4s"/> </priorityClass> </excl> </smil>
There are many ways to use priorityClass elements in
playlists to insert ads or other digital media content. In the
following example playlist, script commands embedded in a stream
from an encoder (which is the media element named media1)
trigger different media elements in the playlist. The
begin attributes of the advertisements in the playlist have
Ad3Event. When the server detects a FIRE_EVENT
script command that has a value that matches one of the
begin attribute values, the corresponding media
element interrupts the live stream. Playback returns to the encoder
stream (media1) after the element finishes because the peers
attribute of media1 is set to
Pause. For example, if a
script command contains the text strings FIRE_EVENT and
Ad2Event, media1 pauses and Ad2 plays back. When Ad2 is completed,
media1 resumes playback.
<?wsx version='1.0'?> <smil> <excl> <priorityClass peers="Pause"> <media id="media1" src="http://encoder/livestream:1000" begin="0s"/> <media id="Ad1" src="Comml1.wma" begin="Ad1Event"/> <media id="Ad2" src="Comml2.wma" begin="Ad2Event"/> <media id="Ad3" src="Comml3.wma" begin="Ad3Event"/> </priorityClass> </excl> </smil>
When switching from a live encoder stream, you can precede the FIRE_EVENT command with a CUE_EVENT command. When the server receives this command, it prepares the media element specified in the script command and buffers the beginning portion of the content. This way, when the FIRE_EVENT command is received, the switch to the media element is seamless. For example, sending the script command type CUE_EVENT and value Ad2Event prepares the file Comm2.wma for broadcast.
Attributes modify the properties of a playlist element. You can use the following optional attributes with a priorityClass element.
|syncEvent||Provides a string used to trigger the beginning or end of an element in a wrapper playlist. For more information, see syncEvent attribute.|
|higher||Controls how child elements within a priorityClass element behave when interrupted by child elements in higher priority priorityClass elements. For more information, see higher attribute.|
|id||Provides a name for the priorityClass element that can be referenced by other elements. For more information, see id attribute.|
|lower||Controls how child elements within a priorityClass element behave when interrupted by child elements in lower priority priorityClass elements. For more information, see lower attribute.|
|peers||Controls how child elements behave when interrupted by child elements within the same priorityClass element. For more information, see peers attribute.|