我有数据,它包含有视频数据的行数。
<s:DataGrid id="movieGrid" dataProvider="{movieData}" selectionChange="setSource(event)" />在VideoDisplay中选择行、获取视频url和播放。
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 of videoDisplay类。其中displayObject的值为空。
发布于 2015-12-25 06:12:42
引发此错误的原因是,在尝试加载损坏的视频文件(或其他任何非视频内容)后,VideoDisplay.videoObject是null。
因此,为了避免这种情况,您可以通过代码控制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){
}
}希望能帮上忙。
https://stackoverflow.com/questions/34452706
复制相似问题