Skip to content

Instantly share code, notes, and snippets.

@qhwa
Last active August 29, 2015 14:02
Show Gist options
  • Select an option

  • Save qhwa/5dcb401ecd3eddec6926 to your computer and use it in GitHub Desktop.

Select an option

Save qhwa/5dcb401ecd3eddec6926 to your computer and use it in GitHub Desktop.
package com.alibaba.ad.vas.example
{
import flash.display.*;
import flash.events.*;
import flash.media.*;
import flash.net.*;
import flash.system.*;
import com.alibaba.ad.vas.toolkit.AdManager;
import com.alibaba.ad.vas.vast.model.AdUnit;
import com.alibaba.ad.vas.vpaid.IVPAID;
import com.alibaba.ad.vas.toolkit.AdsRequest;
import com.alibaba.ad.vas.events.AdEvent;
import com.alibaba.ad.vas.events.AdErrorEvent;
/**
* 这个 Demo 演示了利用 VAS 展示一个前贴非线性广告
*/
public class PrerollLinearExample extends Sprite
{
private const CONTENT_URI:String = 'http://xiaotuhe.com/shares/cec33cf01e28280faa0b/unzip/demo/bunny.flv';
/**
* 广告VAST模板地址
*/
private const AD_TAG:String = '../example/vast3-example.xml';
/**
* 这是正片视频,不是广告视频
*/
private var _contentStream:NetStream;
/**
* _adManager 是广告SDK的入口,通过 AdManager 可以
* 控制广告播放的细节,获取广告播放的各类事件。见
* 下面对 _adManager 的操作
*/
private var _adManager:AdManager;
public function PrerollLinearExample()
{
if( stage ) {
initApp();
} else {
addEventListener( Event.ADDED_TO_STAGE, initApp );
}
}
/**
* 初始化应用程序
*/
private function initApp(evt:Event = null):void
{
removeEventListener( Event.ADDED_TO_STAGE, initApp );
Security.allowDomain('*');
initContent();
initAd();
}
private function initContent():void
{
initStage();
var connection:NetConnection = new NetConnection();
connection.connect(null);
_contentStream = new NetStream(connection);
_contentStream.addEventListener( AsyncErrorEvent.ASYNC_ERROR, onContentAsyncError );
var video:Video = new Video(stage.stageWidth, stage.stageHeight);
video.attachNetStream( _contentStream );
_contentStream.play( CONTENT_URI );
_contentStream.pause();
addChild(video);
}
private function initStage():void
{
stage.align = 'left';
stage.scaleMode = 'noScale';
}
private function initAd():void
{
_adManager = new AdManager();
stage.addChild( _adManager.container );
/**
* 某些情况下,广告管理器会请求内容暂停播放
* 例如非线性浮出广告被用户点击后,变换为线
* 性视频时。
*/
_adManager.addEventListener( AdEvent.CONTENT_PAUSE_REQUESTED, onContentPauseRequest );
/**
* 某些情况下,广告管理器会请求内容继续播放
* 例如线性广告与浏览者发生交互后,切换为线
* 性广告。播放完毕后,恢复到浮出式非线性广
* 告。此时内容应该恢复播放
*/
_adManager.addEventListener( AdEvent.CONTENT_RESUME_REQUESTED, onContentResumeRequest );
/** 当广告播放发生错误时,建议清除广告 */
_adManager.addEventListener( AdErrorEvent.AD_ERROR, onAdError );
/** 当广告播放完毕后,建议清除广告 */
_adManager.addEventListener( AdEvent.ALL_ADS_COMPLETED, onAllAdsComplete );
/** 当广告被点击后,建议清除广告 */
_adManager.addEventListener( AdEvent.CLICK_THRU, onAdClicked );
/**
* 广告数据和模板都已加载,准备播放时会触发这个事件
* 如果需要知道广告播放时的一些事件,或需要和广告
* 进行通信时,可以通过这个事件获得广告内容。
*
* 大部分情况下都不需要监听这个事件。这里为了演示通
* 过 VPAID 协议控制广告的方式,加上了这个事件监听
*/
_adManager.addEventListener( AdEvent.LOADED, onAdLoaded );
// 提供一些广告位的信息,以便服务器端返回
// 合适的广告内容
var adsRequest:AdsRequest = new AdsRequest();
adsRequest.width = stage.stageWidth;
adsRequest.height = stage.stageHeight;
adsRequest.keywords = ['女装'];
adsRequest.tag = AD_TAG;
// 客户端可以调用这个接口对广告禁音
// adManager.mute();
// 客户端可以调用这个接口对广告解除禁音
// adManager.unmute();
/**
* 用 requestAds 方法,可以稍后手动调用 start 方法
* 自由控制广告出现的时机
*/
//_adManager.requestAds( adsRequest );
/**
* 用 requestAndStartAds 方法,可以自动加载并展示
* 广告,比较傻瓜式一些
*/
_adManager.requestAndStartAds( adsRequest );
}
/** VPAID 接口测试 **/
private function onAdLoaded( evt:AdEvent ):void
{
var ad:AdUnit = evt.ad;
// 只有 VPAID 互动广告才有值
if( ad.isVPAID() ) {
trace( ' ------ VPAID Ad loaded:', ad );
trace( ' - linear: ', ad.adLinear );
trace( ' - width: ', ad.adWidth );
trace( ' - height: ', ad.adHeight );
trace( ' - duration: ', ad.adDuration );
trace( ' - VPAID version:', ad.handshakeVersion('2.0') );
ad.initAd( stage.width, stage.height, 'normal', 0, '', '');
ad.startAd();
ad.addEventListener( 'AdStart', function(...args):void {
trace('~~~~ Ad Start ');
});
ad.addEventListener( 'AdRemainingTimeChange', function(...args):void {
trace('~~~~ Ad Remaining Time Change', ad.adRemainingTime );
});
ad.addEventListener( 'AdStopped', function(...args):void {
trace('~~~~ Ad Stopped' );
});
ad.addEventListener( 'AdClickThru', function(...args):void {
trace('~~~~ Ad Click Through' );
});
}
}
/**
* 所有广告都展示完毕时,会触发这个事件
* 此时可以继续播放正片或其他东西
*/
private function onAllAdsComplete(evt:Event):void
{
removeAdAndContinueContent();
}
private function onAdClicked( evt:Event ):void
{
removeAdAndContinueContent();
//建议暂停内容,等用户从广告目标页回来之后继续播放
//pauseContent();
}
private function onAdError(evt:AdErrorEvent):void
{
removeAdAndContinueContent();
}
/**
* 当发生重大错误,或广告正常播放完毕时,清除广告,继续播放正片
*/
private function removeAdAndContinueContent():void
{
_adManager.destroy();
// ...content continue
_contentStream.resume();
}
private function onContentPauseRequest(evt:AdEvent):void
{
pauseContent();
}
/**
* 暂停内容,你可以实现自己的暂停方法
*/
private function pauseContent():void
{
_contentStream.pause();
}
private function onContentResumeRequest(evt:AdEvent):void
{
resumeContent();
}
/**
* 恢复内容,你可以实现自己的恢复方法
*/
private function resumeContent():void
{
_contentStream.resume();
}
private function onContentAsyncError(evt:Event):void
{
}
}
}
<VAST version="3.0">
<Ad id="overlay-1">
<InLine>
<AdSystem>TANX</AdSystem>
<AdTitle>video</AdTitle>
<Impression>
<![CDATA[http://et.tanx.com/video/impression]]>
</Impression>
<Creatives>
<Creative>
<Linear>
<Duration>00:00:15</Duration>
<TrackingEvents>
<Tracking event="start"><![CDATA[http://et.tanx.com/video?stage=0&pid=mm_2000013007_20278042_20406044&pvid=0aeb88b3000019eb5388350900000697&dsp=2000013007&crid=11111736_20426911_0001_0&t=D&s=M&tp=P&k=689fc467055c26dc]]></Tracking>
<Tracking event="start"><![CDATA[http://10.232.136.30/log.php?cmd=start]]></Tracking>
<Tracking event="start"><![CDATA[http://10.232.136.30/log.php?cmd=start1]]></Tracking>
<Tracking event="midpoint"><![CDATA[http://et.tanx.com/video?stage=1&pid=mm_2000013007_20278042_20406044&pvid=0aeb88b3000019eb5388350900000697&dsp=2000013007&crid=11111736_20426911_0001_0&t=D&s=M&tp=P&k=689fc467055c26dc]]></Tracking>
<Tracking event="midpoint"><![CDATA[http://10.232.136.30/log.php?cmd=mid]]></Tracking>
<Tracking event="midpoint"><![CDATA[http://10.232.136.30/log.php?cmd=mid1]]></Tracking>
<Tracking event="complete"><![CDATA[http://et.tanx.com/video?stage=2&pid=mm_2000013007_20278042_20406044&pvid=0aeb88b3000019eb5388350900000697&dsp=2000013007&crid=11111736_20426911_0001_0&t=D&s=M&tp=P&k=689fc467055c26dc]]></Tracking>
<Tracking event="complete"><![CDATA[http://10.232.136.30/log.php?cmd=end]]></Tracking>
<Tracking event="complete"><![CDATA[http://10.232.136.30/log.php?cmd=end1]]></Tracking>
</TrackingEvents>
<AdParameters/>
<VideoClicks>
<ClickThrough>http://www.taobao.com</ClickThrough>
<ClickTracking><![CDATA[http://rdstat.tanx.com/trd?f=&k=a09e279ad7f7a12a&p=mm_2000013007_20278042_20406044&pvid=0aeb88b3000019eb5388350900000697&s=848x480&d=&t=1401435401]]></ClickTracking>
<ClickTracking><![CDATA[http://10.232.136.30/log.php?cmd=click]]></ClickTracking>
<ClickTracking><![CDATA[http://10.232.136.30/log.php?cmd=click1]]></ClickTracking>
</VideoClicks>
<MediaFiles>
<MediaFile id="0" delivery="progressive" type="video/m3u8" bitrate="1568" width="854" height="480"><![CDATA[http://d.tv.taobao.com/T28en3XG0aXXXXXXXX/1.m3u8]]></MediaFile>
<MediaFile id="1" delivery="progressive" type="video/mp4" bitrate="1568" width="854" height="480"><![CDATA[http://creativecenter-video.oss-cn-hangzhou.aliyuncs.com/video2001151402480588652.mp4]]></MediaFile>
<MediaFile id="2" delivery="progressive" type="video/mp4" bitrate="1138" width="568" height="320"><![CDATA[http://n.videotest.alikunlun.com/TB22HuzXXXXXXXJXXXXXXXXXXXX.mp4]]></MediaFile>
<MediaFile id="3" delivery="progressive" type="video/x-flv" bitrate="1138" width="568" height="320"><![CDATA[http://n.videotest.alikunlun.com/TB2ZaWzXXXXXXbuXXXXXXXXXXXX.flv]]></MediaFile>
<MediaFile id="4" delivery="progressive" type="video/mp4" bitrate="123" width="428" height="240"><![CDATA[http://d.tv.taobao.com/T2g_6XXyFaXXXXXXXX.mp4]]></MediaFile>
<MediaFile id="5" delivery="progressive" type="video/x-flv" bitrate="324" width="320" height="240"><![CDATA[http://d.tv.taobao.com/T25cvZXMdaXXXXXXXX.flv]]></MediaFile>
</MediaFiles>
</Linear>
</Creative>
</Creatives>
<Extensions/>
</InLine>
</Ad>
</VAST>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment