如何使用swf vpaid?

Posted

技术标签:

【中文标题】如何使用swf vpaid?【英文标题】:How to use swf vpaid? 【发布时间】:2017-03-02 20:49:02 【问题描述】:

VPAID可以是js或者swf。

如果我有js那么一切都很简单,我就这样做:

var script = document.createElement('script');
script.onload = onLoad;
script.src = "https://somedomain.net/vpaid.js";
document.getElementsByTagName('head')[0].appendChild(script);

并且在JS文件加载的时候会调用onLoad。

function onLoad() 
    var adUnit = getVPAIDAd();

现在我有一个带有一些 API 的 adUnit:

adUnit.initAd
adUnit.handshakeVersion
...

还有另一种控制广告的方法。

但如果我有 swf,那么我不知道该怎么办。

我有网址:

https://somedomain.net/vpaid.swf

我可以使用 swfobject 创建对象:

swfobject.embedSWF(
    "https://somedomain.net/vpaid.swf",
    "myContent", "640", "480", "9.0.0"
);

但我不知道如何获得 AdUnit。我想从这个 swf 中获取 AdUnit,并且我希望这个 AdUnit 具有相同的 API:

adUnit.initAd
adUnit.handshakeVersion
...

但我不知道该怎么做:(。

【问题讨论】:

【参考方案1】:

您需要实现自己的 AS3/Flash 播放器才能这样做。

播放器将通过flash.external.ExternalInterface 接收 VPAID 资源 URL,或者您将整个解析后的 VAST 交给 Flash 播放器(我更愿意这样做)。

AS3 示例:

/**
 * Setup listeners
 */
private function setup():void 
    ExternalInterface.addCallback("player_load", load);
    ExternalInterface.addCallback("player_exec", execute);


/**
 * Hand over VAST
 */       
private function load(data:*):void 
    try 
        var result:* = _internalPlayer.load(new VAST(data.vast));
        callExternal(data.callback, result);
     catch(e.*) 
        callExternal(data.callback, e);
    


/**
 * Implement something to control the player from JS via ExternalInterface
 */
private function execute(data:*):* 
    try 
        var result:* = new Command(data.command).execute();
        callExternal(data.callback, result);
     catch(e.*) 
        callExternal(data.callback, e);
    


private function callExternal(target:String, args:*):void 
    if(ExternalInterface.available)
        ExternalInterface.call(target, args);
    else
        trace('ExternalInterface unavailable');

JS 示例:

embedded_swf['player_load'](
    'vast': vast, // parsed VAST
    'callback': 'window.player.events.backchannel' // some available method to send success/error messages to
);
[...]
embedded_swf['player_exec'](
    'command': 
        'command': 'play',
        'target': 'ad.id.1' // some identifier flash-player can work with
    ,
    'callback': 'window.player.events.backchannel'
);

当然,这只是您如何做到这一点的一个示例,而这只是要做的事情的一小部分。但我希望它会有所帮助。

祝你有美好的一天。

【讨论】:

以上是关于如何使用swf vpaid?的主要内容,如果未能解决你的问题,请参考以下文章

text 放大VPAID视频播放器/ jwplayer

text 放大VPAID视频播放器/ jwplayer

如何使用 swf 作为缩略图

2020年后如何在react js中使用swf

如何使用 php readfile 将 swf 加载到另一个 swf 并保留 url 参数?

如何使用 wxMediaCtrl 在 wxwidgets 中播放 SWF 文件