ИЗМЕНИТЬ Если бы кто-нибудь мог хотя бы сказать мне, как получить событие, когда потоки отключаются, это было бы здорово.
Документация для этого элемента управления просто ужасна. У меня есть приложение, в котором будет транслироваться видеопоток, и я ищу способ заставить элемент управления VideoDisplay восстановить свое соединение в случае возникновения любого из этих конкретных сценариев:
- Приложение запустится, а трансляция еще не подключена.
- Приложение работает в потоковом режиме, и пользователь отключен от Интернета.
- Приложение работает в потоковом режиме, а видеосервер вылетает и перезагружается.
Я использую Wowza Media Server и Wirecast, чтобы проверить это. 1 и 3 не работают, я не уверен, что работает номер 2. Я добился работы номер 1, добавив этот очень сомнительный фрагмент кода:
protected function onMediaPlayerStateChange(event:MediaPlayerStateChangeEvent):void
{
if (event.state == MediaPlayerState.PLAYBACK_ERROR)
{
var videoSource:DynamicStreamingVideoSource = this.videoDisplay.source as DynamicStreamingVideoSource;
try
{
this.videoDisplay.source = null;
this.videoDisplay.source = videoSource;
}
catch (any:*) {}
}
}
Как видите, мне нужен блок try / catch, поскольку оба вызова source вызывают исключения, но все, что происходит до этих исключений, похоже, решает проблему №1. Это не решает проблему №3, потому что событие изменения состояния носителя, по-видимому, не происходит, когда вы останавливаете видеосервер.
Это мое контрольное объявление:
<s:VideoDisplay id="videoDisplay" click="onVideoStreamClick(event)" mediaPlayerStateChange="onMediaPlayerStateChange(event)" muted="{this.videoMuted}" top="10" width="280" height="220" autoPlay="true" horizontalCenter="0">
<s:source>
<s:DynamicStreamingVideoSource id="videoSource" streamType="live" host="{FlexGlobals.topLevelApplication.parameters.videoStreamURL}">
<s:DynamicStreamingVideoItem id="videoItemLow" streamName="{FlexGlobals.topLevelApplication.parameters.videoLow}" bitrate="{FlexGlobals.topLevelApplication.parameters.videoLowBitrate}" />
<s:DynamicStreamingVideoItem id="videoItemMedium" streamName="{FlexGlobals.topLevelApplication.parameters.videoMedium}" bitrate="{FlexGlobals.topLevelApplication.parameters.videoMediumBitrate}" />
<s:DynamicStreamingVideoItem id="videoItemHigh" streamName="{FlexGlobals.topLevelApplication.parameters.videoHigh}" bitrate="{FlexGlobals.topLevelApplication.parameters.videoHighBitrate}" />
</s:DynamicStreamingVideoSource>
</s:source>
</s:VideoDisplay>
Кто-нибудь знает, как восстановить VideoDisplay после этих проблем? Любая помощь приветствуется, спасибо.