编辑 如果有人至少可以告诉我在流断开连接时如何接收事件,那就太好了。
这个控件的文档简直太可怕了。我有一个具有实时视频流的应用程序,我正在寻找一种方法来使 VideoDisplay 控件在发生以下任何特定情况时恢复其连接:
- 应用程序启动并且流尚未在线。
- 该应用程序正在流式传输,并且用户已与 Internet 断开连接。
- 应用程序正在流式传输,视频服务器崩溃并重新启动。
我正在使用 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 从这些问题中恢复?任何帮助表示赞赏,谢谢。