检查 VideoDisplay 视频在 flex 中不为空

Check VideoDisplay video is not null in flex

我有数据网格,其中包含具有视频数据的行数。

<s:DataGrid id="movieGrid" dataProvider="{movieData}" selectionChange="setSource(event)" />

在第 select 行获取视频 url 并在 VideoDisplay 中播放。

private function setSource(event:GridSelectionEvent):void
{
    if(videoDisplay!=null)
    {

        var movie:String = movieGrid.selectedItem.flvLink;
        videoDisplay.source = movie;
     }
}

在播放时 select 它将播放视频。

videoDisplay.play();

视频显示:

<s:VideoDisplay id="videoDisplay"  autoPlay="false" />

现在 moveData 值来自服务器请求。

问题:
以上效果很好,但是, flvlink的部分内容不对,没有视频。
现在我点击那个有错误 link 的行,然后再次点击右边的 link 行然后它在视频显示中有错误。

TypeError: Error #1009: Cannot access a property or method of a null object reference.

如何,我可以跳过这个错误吗?无论如何我可以得到 link 是否有视频文件。如果不是,则不将源应用到视频显示?

编辑:

错误出现在 videoDisplay videoPlayer.displayObject class。其中 displayObject 为空。

该错误被触发是因为在尝试加载损坏的视频文件(或任何其他非视频内容)后 VideoDisplay.videoObjectnull

因此,为了避免这种情况,您可以通过代码控制一个 VideoDisplay 对象,并在每次 videoObject 为 null 时重新初始化它。

为此,举个例子:

<s:DataGrid id="movieGrid" dataProvider="{movieData}" selectionChange="playVideo(event)" /> 
<s:Group id="videoDisplayContainer" />

private var videoDisplay:VideoDisplay;

private function initVideoDisplay(): void 
{
    videoDisplay = new VideoDisplay();
    videoDisplay.autoPlay = false;
    videoDisplay.percentWidth = 100;
    videoDisplay.percentHeight = 100;
    videoDisplayContainer.addElement(videoDisplay);
}

protected function playVideo(event:GridSelectionEvent):void
{   
    if(!videoDisplay || !videoDisplay.videoObject){
        initVideoDisplay();
    }
    var movie:String = movieGrid.selectedItem.flvLink;
    try {
        videoDisplay.source = movie;
    } catch(e:Error){
    }
}

希望能帮到你。