在 AS3 中销毁加载的视频

Destroy loaded video in AS3

我正在 AS3 中开发一个显示 YouTube 视频的功能。它有效,但问题是如果我开始播放视频然后点击 'cacheNoir',它会删除视频,但我仍然可以听到它。我猜是因为视频没有真正销毁,那我该怎么做呢?

我的职能:

public function openVideoYoutube(url:String, largeur:int=640, hauteur:int=390):void
{
    //Charge la vidéo
    var loaderVideo:Loader=new Loader();
    loaderVideo.load(new URLRequest(url));

    //Va chercher le stage
    var stage:Stage = _app._root.stage;

    //Conteneur de la vidéo et du cache
    var conteneurVideo:MovieClip = new MovieClip;

    //Cache noir
    var cacheNoir:MovieClip = new MovieClip();
    cacheNoir.graphics.beginFill(0x000000);
    cacheNoir.graphics.drawRect(0, 0, stage.width, stage.height);
    cacheNoir.graphics.endFill();
    cacheNoir.alpha = 0.7;

    //Positionne la video
    loaderVideo.x = (stage.stageWidth-largeur)/2;
    loaderVideo.y = (stage.stageHeight - hauteur) / 2;

    //Ajoute du cache et de la vidéo
    conteneurVideo.addChild(cacheNoir);
    conteneurVideo.addChild(loaderVideo);

    //Ajoute sur le stage
    stage.addChild(conteneurVideo);

    //Change le curseur lorsque que le cache est survolé
    cacheNoir.buttonMode = true;

    //Évènement pour retirer la vidéo
    cacheNoir.addEventListener(MouseEvent.CLICK, onQuitVideoYoutube);
}       

private function onQuitVideoYoutube(pEvt:MouseEvent):void
{
    //Va chercher le stage
    var stage:Stage = _app._root.stage;

    //Retire la vidéo
    stage.removeChildAt(stage.numChildren-1);
}

我找到了解决方案。如果你这样做 loaderVideo.content,你会得到一个有很多有用方法的对象,因为它是 youtube 的 API,其中一个函数是 destroy()。查看此页面以了解所有功能: https://developers.google.com/youtube/flash_api_reference?csw=1#Functions

如果 var loaderVideo:Loader 负责视频,你能不能只使用 unload ..

在您的 函数 onQuitVideoYoutube 中类似这样的内容:loaderVideo.unload();..

此外,您应该将 loaderVideo 设为任何函数之外的 public var loaderVideo:Loader;,这样所有函数都可以重复使用它,而无需每次都创建一个新函数。对于加载,它会变得简单 loaderVideo = new Loader();

每次你创建一个 var ABC = new someThing 来在内存中创建一个新的实例,你以后的代码甚至可能不会谈论你认为你的 Flash 正在访问的 someThing。因此,做一件事并始终重复使用它,然后您就知道在做什么。

示例设置...

public var _stage           : Stage = _app._root.stage;
public var loaderVideo      : Loader;
public var cacheNoir        : MovieClip;
public var conteneurVideo   : MovieClip = new MovieClip(); //make NEW here only after that its always re-used

public function openVideoYoutube(url:String, largeur:int=640, hauteur:int=390) : void
{
    //Charge la vidéo
    loaderVideo = new Loader();
    loaderVideo.load(new URLRequest(url));

    //Va chercher le stage
    ///var stage:Stage = _app._root.stage;

    //Conteneur de la vidéo et du cache
    ///var conteneurVideo:MovieClip = new MovieClip;

    //Cache noir
    cacheNoir = new MovieClip();
    cacheNoir.graphics.beginFill(0x000000);
    cacheNoir.graphics.drawRect(0, 0, stage.width, stage.height);
    cacheNoir.graphics.endFill();
    cacheNoir.alpha = 0.7;

    //Positionne la video
    loaderVideo.x = (stage.stageWidth-largeur)/2;
    loaderVideo.y = (stage.stageHeight - hauteur) / 2;

    //Ajoute du cache et de la vidéo
    conteneurVideo.addChild(cacheNoir);
    conteneurVideo.addChild(loaderVideo);

    //Ajoute sur le stage
    _stage.addChild(conteneurVideo);

    //Change le curseur lorsque que le cache est survolé
    cacheNoir.buttonMode = true;

    //Évènement pour retirer la vidéo
    cacheNoir.addEventListener(MouseEvent.CLICK, onQuitVideoYoutube);
}       

private function onQuitVideoYoutube(pEvt:MouseEvent) : void
{
    //Va chercher le stage
    ///var stage:Stage = _app._root.stage;

    //Retire la vidéo
    loaderVideo.unload();
    _stage.removeChildAt(_stage.numChildren-1);


}