YouTube API播放器不播放某些视频

时间:2013-07-19 08:52:56

标签: actionscript-3 flash youtube youtube-api

错误代码0在YouTube Flash API中的含义是什么?尝试使用API​​播放某些视频时会出现这种情况。其他错误代码在API Reference中解释,但不是错误代码0。

如何让YouTube播放器播放所有视频,就像在YouTube Player Demo上播放一样?

FLA和SWF文件: https://s3.amazonaws.com/YouTubeAPIError0/YouTubeAPIError0.zip

package {
    import flash.system.Security;
    import flash.display.MovieClip;
    import flash.display.Loader;
    import flash.events.Event;
    import flash.net.URLRequest;
    import fl.data.DataProvider;
    import fl.controls.ComboBox;
    import fl.controls.TextArea;

    public class YouTubeAS3 extends MovieClip {
        public var VidHolder:MovieClip;
        public var VidSelection:ComboBox;
        public var traceArea:TextArea;

        private var player:Object;
        private var loader:Loader;
        private var vidCollection:DataProvider;

        public function YouTubeAS3():void {
            Security.allowInsecureDomain("*");
            Security.allowDomain("*");

            vidCollection = new DataProvider();
            vidCollection.addItem({data:"eDdI7GhZSQA", label:"Video 1"});
            vidCollection.addItem({data:"S09F5MejfBE", label:"Video 2"});
            vidCollection.addItem({data:"QUwxKWT6m7U", label:"Video 3"});
            vidCollection.addItem({data:"TAbnQZZ6QXc", label:"Video 4"});
            vidCollection.addItem({data:"QH2-TGUlwu4", label:"Errorless Video"});

            VidSelection.dataProvider = vidCollection;
            VidSelection.addEventListener(Event.CHANGE, cueVideo);

            loader = new Loader();
            loader.contentLoaderInfo.addEventListener(Event.INIT, onLoaderInit);
            loader.load(new URLRequest("http://www.youtube.com/apiplayer?version=3"));
        }

        private function onLoaderInit(event:Event):void {
            VidHolder.addChild(loader);
            loader.content.addEventListener("onReady", onPlayerReady);
            loader.content.addEventListener("onError", onPlayerError);
            loader.content.addEventListener("onStateChange", onPlayerStateChange);
            loader.content.addEventListener("onPlaybackQualityChange", onVideoPlaybackQualityChange);
        }

        private function onPlayerReady(event:Event):void {
            traceArea.text += "player ready: " + Object(event).data + "\r";
            player = loader.content;
            player.setSize(480, 360);
            VidSelection.selectedIndex = 0;
            VidSelection.dispatchEvent(new Event(Event.CHANGE));
        }
        private function cueVideo(event:Event):void {
            traceArea.text += "switch to: " + event.target.selectedItem.label + "\r";
            player.cueVideoById(event.target.selectedItem.data);
        }

        private function onPlayerError(event:Event):void {
            traceArea.text += "player error: " + Object(event).data + "\r";
        }

        private function onPlayerStateChange(event:Event):void {
            traceArea.text += "player state: " + Object(event).data + "\r";
        }

        private function onVideoPlaybackQualityChange(event:Event):void {
            traceArea.text += "video quality: " + Object(event).data + "\r";
        }
    }
}

3 个答案:

答案 0 :(得分:4)

答案 1 :(得分:0)

我的错误状态为0 - 当视频超时时。

如果您查看开发人员工具,无论您使用哪种浏览器,都应该看到一个名为“videoplayback”的标注,该标注会超时。我让它在7.5分钟后超时,但这可能与连接有关。

此外,当前记录的错误状态中未涵盖“超时”错误。

答案 2 :(得分:0)

这是与YouTube AS3 Player API Error Code 0相同的问题......当然,这个问题也没有答案(有趣的是,相同的4个视频被用作无法播放的视频的例子)。 / p>

我唯一的建议就是在数据中寻找模式。例如,v3数据API显示您列出的所有未播放的视频都在德国被阻止,而您提供的播放的视频没有阻止。这将导致假设错误可能与区域块有关(注意区域块不同于“可嵌入”块,这是上传者可以设置的元数据)。在德国封锁的视频都是这样做的,因为Vevo不允许在那里播放,而且它们都是Vevo视频。

当然,我并不一定暗示“不可玩性”是故意的,尽管它可能是;我不知道直接文档详细说明当API(与Youtube网站相反,使用不同方法播放视频以便您无法进行任何直接比较)时会发生什么情况尝试播放区域阻止视频。也许@Dominic Orme是正确的,因为它与超时,区域阻塞引起的超时(或试图使用代理绕过区域阻塞)有关。

您可以通过查找适合该模式的其他视频来测试此理论。例如,您的代码无法播放所有Vevo视频吗?在其他国家/地区屏蔽的视频是否也无法播放?