我有datagrid,其中包含有视频数据的行数。
<s:DataGrid id="movieGrid" dataProvider="{movieData}" selectionChange="setSource(event)" />
选择行获取视频网址并在VideoDisplay中播放。
private function setSource(event:GridSelectionEvent):void
{
if(videoDisplay!=null)
{
var movie:String = movieGrid.selectedItem.flvLink;
videoDisplay.source = movie;
}
}
在播放时选择它会播放视频。
videoDisplay.play();
的VideoDisplay:
<s:VideoDisplay id="videoDisplay" autoPlay="false" />
现在,moveData值来自服务器请求。
问题:
以上效果不错,但是,
一些flvlink是错误的,没有视频。
现在我点击那个链接错误的行再次点击右侧链接行然后它在视频显示中出错。
TypeError:错误#1009:无法访问空对象引用的属性或方法。
怎么样,我可以跳过这个错误。无论如何我可以得到该链接有视频文件。如果没有那么不将源应用于视频显示?
修改
错误来自videoPlayer.displayObject
班级的videoDisplay
。其中displayObject
为空。
答案 0 :(得分:2)
在尝试加载损坏的视频文件(或任何其他非视频内容)后VideoDisplay.videoObject
为null
时,会触发该错误。
为避免这种情况,您可以按代码控制VideoDisplay
对象,并在videoObject
为空时每次重新初始化。
为此,请举例:
<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){
}
}
希望可以提供帮助。