【发布时间】:2012-01-15 14:07:01
【问题描述】:
编辑 如果有人至少可以告诉我在流断开连接时如何接收事件,那就太好了。
这个控件的文档简直太可怕了。我有一个具有实时视频流的应用程序,我正在寻找一种方法来使 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 从这些问题中恢复?任何帮助表示赞赏,谢谢。
【问题讨论】:
标签: apache-flex live-streaming flex-spark videodisplay