您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn.

在客户端上插入广告

03/10/2021

本文内容

azure-media-services-logo-v2.svg

本文包含有关如何在客户端上插入各种类型的广告的信息。

有关实时流式处理视频中隐藏式字幕和广告支持的详细信息,请参阅支持的隐藏式字幕和广告插入标准。

备注

Azure Media Player 目前不支持广告。

向媒体中插入广告

Azure 媒体服务通过“Windows 媒体平台:播放器框架”提供广告插入支持。 附带广告支持的播放器框架在 Windows 8、Silverlight、Windows Phone 8 和 iOS 设备上均可用。 每个播放器框架包含演示如何实现播放器应用程序的示例代码。 可插入 media:list 中的广告有三种。

线性 - 暂停主视频的全帧广告。

非线性 - 播放主视频时显示的叠加式广告,通常为放置在播放器内的一个徽标或其他静态图像。

伴随 - 在播放器之外显示的广告。

广告可置于主视频时间线中的任何一个时间点。 必须告知播放器何时播放广告以及播放哪些广告。 这使用一组标准的基于 XML 的文件来完成:视频广告服务模板 (VAST)、数字视频多广告播放列表 (VMAP)、媒体抽象排序模板 (MAST) 和数字视频播放器广告接口定义 (VPAID)。 VAST 文件用于指定要显示哪些广告。 VMAP 文件用于指定何时播放各种广告并且包含 VAST XML。 MAST 文件是对广告进行排序的另一种方法,也可以包含 VAST XML。 VPAID 文件用于定义视频播放器与广告或广告服务器之间的接口。

每种播放器框架的工作方式不同,且每种都会在其各自的文章中进行介绍。 本文介绍用于插入广告的基本机制。 视频播放器应用程序从广告服务器请求广告。 广告服务器可以通过多种方式进行响应:

返回一个 VAST 文件

返回一个 VMAP 文件 (使用嵌入的 VAST)

返回一个 MAST 文件 (使用嵌入的 VAST)

返回一个含有 VPAID 广告的 VAST 文件

使用视频广告服务模板 (VAST) 文件

VAST 文件指定要显示的广告。 以下 XML 是线性广告 VAST 文件的示例:

Atlas

Unknown

Unknown

00:00:32

通过 元素描述线性广告。 它指定广告的持续时间、跟踪事件、点击行为、点击跟踪和许多 MediaFile 元素。 在 元素内指定跟踪事件,并允许广告服务器跟踪在观看广告时发生的各种事件。 在这种情况下可跟踪开始、中点、完成和展开事件。 广告播放时发生开始事件。 已观看至少 50% 的广告时间时发生中点事件。 广告结束时发生完成事件。 用户将视频播放器展开为全屏时发生展开事件。 “点击”是使用 元素在 元素内指定的,指定用户点击广告时要显示的资源的 URI。 “点击跟踪”是在 元素中提定的,也在 元素中指定,指定用户点击广告时要请求的播放器的跟踪资源。 元素指定有关广告特定编码的信息。 如果存在多个 元素,则视频播放器可以选择适用于该平台的最佳编码。

可以按指定顺序显示线性广告。 若要执行此操作,请向 VAST 文件添加其他 元素,并使用序列属性指定顺序。 以下示例对此进行了说明:

Atlas

Unknown

Unknown

00:00:32

Atlas

Unknown

Unknown

00:00:30

非线性广告也是在元素中指定的。 以下示例演示了描述非线性广告的元素。

元素可以包含一个或多个 元素,其中每一个均可描述一个非线性广告。 元素指定非线性广告的资源。 资源可以是 、 或 。 描述非 HTML 资源,并定义指定资源显示方式的 creativeType 属性:

Image/gif、image/jpeg、image/png - 资源显示在 HTML 标记中。

应用程序/x-javascript - 资源显示在 HTML 标记中。

Application/x-shockwave-flash – 资源显示在 Flash Player 中。

IFrameResource 描述可以在 IFrame 中显示的 HTML 资源。 HTMLResource 描述可以插入网页的一段 HTML 代码。 TrackingEvents 指定跟踪事件以及事件发生时请求的 URI。 在此示例中,跟踪了 acceptInvitation 事件和折叠事件。 有关 NonLinearAds 元素及其子元素的详细信息,请参阅 IAB.NET/VAST。 请注意,TrackingEvents 元素位于 NonLinearAds 元素而非 NonLinear 元素内。

在 元素内定义伴随广告。 元素可以包含一个或多个 元素。 每个 元素均描述一个伴随广告,并且可以包含以与非线性广告相同的方式定义的 、 或 。 VAST 文件可以包含多个伴随广告,播放器应用程序可以选择最适合显示的广告。 有关 VAST 的详细信息,请参阅 VAST 3.0。

使用数字视频多广告播放列表 (VMAP) 文件

VMAP 文件支持指定发生广告中断的时间、每次中断的时长、中断期间可显示的广告数以及中断期间可显示的广告类型。 以下是定义单次广告中断的示例 VMAP 文件:

Atlas

Unknown

Unknown

00:00:32

http://MyServer.com/breakstart.gif

VMAP 文件以 元素开头,该元素包含一个或多个 元素,每一个均定义一个广告中断。 每一个广告中断均指定一个中断类型、中断 ID 和时间偏移量。 BreakType 属性指定可在中断期间播放的广告类型:线性广告、非线性广告或显示广告。 显示广告映射到 VAST 伴随广告。 可以在逗号(不含空格)分隔的列表中指定多个广告类型。 BreakID 是广告的可选标识符。 TimeOffset 指定显示广告的时间。 可以通过以下方式之一进行指定:

时间 - 采用 hh:mm:ss 或 hh:mm:ss.mmm 格式,其中 .mmm 为毫秒。 此属性的值指定从视频时间线开始到广告中断开始的一段时间。

百分比 - 采用 n% 格式,其中 n 为播放广告前要播放的视频时间线所占的百分比

开始/结束 - 指定应在播放视频之前或之后显示广告

位置 - 指定广告中断的计时未知时(例如,实时流式处理过程中)的广告中断顺序。 采用 #n 格式指定每次广告中断的顺序,其中 n 为整数 1 或更大整数。 1 表示应在第一个机会时播放广告,2 表示应在第二个机会时播放广告,以此类推。

元素中可以有一个 元素。 元素包含以下属性:

Id - 指定广告源的标识符

allowMultipleAds – 一个布尔值,指定是否可以在广告中断期间显示多个广告

followRedirects – 一个可选布尔值,指定视频播放器是否应遵循广告响应中的重定向

元素为播放器提供内联的广告响应或对广告响应的引用。 它可包含以下元素之一:

表示 VMAP 文件中嵌入了一个 VAST 广告响应

引用另一个系统中的广告响应的 URI

表示非 VAST 响应的任意字符串

在此示例中,线内广告响应是使用包含 VAST 广告响应的 元素指定的。 有关其他元素的详细信息,请参阅 VMAP。

元素还可以包含一个 元素。 元素允许跟踪广告中断的开始或结束时间,或广告中断期间是否发生了错误。 元素包含一个或多个 元素,其中每一个均指定一个跟踪事件和一个跟踪 URI。 可能的跟踪事件是:

breakStart - 跟踪广告中断的开始

breakEnd - 跟踪广告中断的完成

error - 跟踪广告中断期间发生的错误

以下示例演示指定跟踪事件的 VMAP 文件

http://MyServer.com/breakstart.gif

http://MyServer.com/breakend.gif

http://MyServer.com/error.gif

有关 元素及其子元素的详细信息,请参阅 http://iab.net/VMAP.pdf

使用媒体摘要排序模板 (MAST) 文件

MAST 文件允许指定定义何时显示广告的触发器。 以下是一个示例 MAST 文件,它包含前置式广告、中置式广告和后置式广告的触发器。

MAST 文件以 MAST 元素开头,该元素包含一个 triggers 元素。 元素包含一个或多个定义应何时播放广告的 trigger 元素。

trigger 元素包含一个 startConditions 元素,后者指定应开始播放广告的时间。 startConditions 元素包含一个或多个 元素。 每个 评估结果为 true 时,将启动或撤销一个触发器,具体取决于 是否分别包含在 startConditions 或 endConditions 元素中。 有多个 元素时,将它们视为隐式 OR,任何评估结果为 true 的条件均将导致触发器启动。 元素可以嵌套。 预设了子 元素时,将它们视为隐式 AND;若要启动触发器,则所有条件的评估结果必须为 true。 元素包含定义条件的以下属性:

type - 指定条件、事件或属性的类型

name – 要在评估过程中使用的属性或事件的名称

value – 评估属性时针对的值

operator - 要在评估期间使用的运算符:EQ(等于)、NEQ(不等于)、GTR(大于)、GEQ(大于或等于)、LT(小于)、LEQ(小于或等于)、MOD(取模)

endConditions 也包含 元素。 当某个条件的计算结果为 true 时,该触发器将重置。 元素还包含 元素,后者包含一个或多个 元素。 元素定义广告响应的 URI 和广告响应的类型。 在此示例中,向 VAST 响应提供了一个 URI。

使用视频播放器广告接口定义 (VPAID)

VPAID 是用于使可执行广告单元能够与视频播放器进行通信的 API。 这可实现高度交互的广告体验。 用户可以与广告交互;广告可以对查看者采取的操作做出响应。 例如,广告可能会显示允许用户查看详细信息或更长时间版广告的按钮。 视频播放器必须支持 VPAID API 且可执行广告必须实现该 API。 播放器从广告服务器请求广告时,服务器可能使用包含 VPAID 广告的 VAST 响应进行响应。

必须于运行时环境(例如 Adobe Flash™ 或可以在 Web 浏览器中执行的 JavaScript)中执行的代码中创建可执行广告。 当广告服务器返回包含 VPAID 广告的 VAST 响应时,元素中 apiFramework 属性的值必须为“VPAID”。 此属性指定所含广告为 VPAID 可执行广告。 类型属性必须设置为可执行文件(如“application/x-shockwave-flash”或“application/x-javascript”)的 MIME 类型。 以下 XML 代码片段演示包含 VPAID 可执行广告的 VAST 响应中的 元素。

width="640" height="480" apiFramework="VPAID">

可以使用 VAST 响应中 或 元素内的 元素来初始化可执行广告。 有关 元素的详细信息,请参阅 VAST 3.0。 有关 VPAID API 的详细信息,请参阅 VPAID 2.0。

实现带有广告支持的 Windows 或 Windows Phone 8 播放器

Microsoft 媒体平台:适用于 Windows 8 和 Windows Phone 8 的播放器框架包含示例应用程序集合,这些示例应用程序展示如何使用该框架来实现视频播放器应用程序。 可以从 适用于 Windows 8 和 Windows Phone 8 的播放器框架中下载播放器框架和示例。

打开 Microsoft.PlayerFramework.Xaml.Samples 解决方案时,将看到项目中的多个文件夹。 Advertising 文件夹包含与创建具有广告支持的视频播放器相关的示例代码。 Advertising 文件夹中有多个 XAML/cs 文件,每一个均显示如何以不同的方式插入广告。 以下列表描述了每个文件:

AdPodPage.xaml 演示如何显示广告荚。

AdSchedulingPage.xaml 演示如何安排广告。

FreeWheelPage.xaml 演示如何使用 FreeWheel 插件来安排广告。

MastPage.xaml 演示如何使用 MAST 文件来安排广告。

ProgrammaticAdPage.xaml 演示如何以编程方式将广告安排到视频中。

ScheduleClipPage.xaml 演示如何在无 VAST 文件的情况下安排广告。

VastLinearCompanionPage.xaml 演示如何插入线性广告和伴随广告。

VastNonLinearPage.xaml 演示如何插入非线性广告。

VmapPage.xaml 演示如何使用 VMAP 文件来指定广告。

每一个示例均使用由播放器框架定义的 MediaPlayer 类。 大多数示例都使用为不同广告响应格式添加支持的插件。 ProgrammaticAdPage 示例以编程方式与 MediaPlayer 实例交互。

AdPodPage 示例

此示例使用 AdSchedulerPlugin 来定义何时显示广告。 在此示例中,安排于 5 秒后播放中置式广告。 广告 Pod(按顺序播放的一组广告)是在从广告服务器返回的 VAST 文件中指定的。 在 元素中指定 VAST 文件的 URI。

AdSchedulingPage

此示例还使用 AdSchedulerPlugin。 它会安排三种广告:前置式广告、中置式广告和后置式广告。 在 元素中指定每种广告的 VAST 文件的 URI。

FreeWheelPage

此示例使用 FreeWheelPlugin,它指定一个指定 URL 的源属性,该 URL 指向一个 SmartXML 文件,该文件指定广告内容和广告安排信息。

MastPage

此示例使用允许使用 MAST 文件的 MastSchedulerPlugin。 源属性指定 MAST 文件的位置。

ProgrammaticAdPage

此示例以编程方式与 MediaPlayer 交互。 ProgrammaticAdPage.xaml 文件实例化 MediaPlayer:

ProgrammaticAdPage.xaml.cs 文件创建 AdHandlerPlugin,添加 TimelineMarker 以指定何时显示广告,为 MarkerReached 事件添加处理程序,该程序加载指定指向 VAST 文件的 URI 的 RemoteAdSource,并播放广告。

public sealed partial class ProgrammaticAdPage : Microsoft.PlayerFramework.Samples.Common.LayoutAwarePage

{

AdHandlerPlugin adHandler;

public ProgrammaticAdPage()

{

this.InitializeComponent();

adHandler = new AdHandlerPlugin();

player.Plugins.Add(new AdHandlerPlugin());

player.Markers.Add(new TimelineMarker() { Time = TimeSpan.FromSeconds(5), Type = "myAd" });

player.MarkerReached += pf_MarkerReached;

}

async void pf_MarkerReached(object sender, TimelineMarkerRoutedEventArgs e)

{

if (e.Marker.Type == "myAd")

{

var adSource = new RemoteAdSource() { Type = VastAdPayloadHandler.AdType, Uri = new Uri("http://smf.blob.core.windows.net/samples/win8/ads/vast_linear.xml") };

//var adSource = new AdSource() { Type = DocumentAdPayloadHandler.AdType, Payload = SampleAdDocument };

var progress = new Progress();

try

{

await player.PlayAd(adSource, progress, CancellationToken.None);

}

catch { /* ignore */ }

}

}

ScheduleClipPage

此示例使用 AdSchedulerPlugin 通过指定包含广告的 .wmv 文件安排中置式广告。

VastLinearCompanionPage

此示例演示如何使用 AdSchedulerPlugin 来安排中置式线性广告和伴随广告。 元素指定 VAST 文件的位置。

VastLinearNonLinearPage

此示例使用 AdSchedulerPlugin 来安排线性广告和非线性广告。 使用 元素来指定 VAST 文件位置。

VMAPPage

此示例使用 VmapSchedulerPlugin,以便使用 VMAP 文件安排广告。 在 元素的源属性中指定 VMAP 文件的 URI。

实现带有广告支持的 iOS 视频播放器

Microsoft 媒体平台:适用于 iOS 的播放器框架包含示例应用程序集合,这些示例应用程序展示如何使用该框架来实现视频播放器应用程序。 可以从 Azure 媒体播放器框架下载播放器框架和示例。 GitHub 页面具有指向 Wiki(含有关播放器框架的其他信息和播放器示例简介)的链接:Azure Media Player Wiki。

使用 VMAP 安排广告

以下示例演示如何使用 VMAP 文件安排广告。

// How to schedule an Ad using VMAP.

//First download the VMAP manifest

if (![framework.adResolver downloadManifest:&manifest withURL:[NSURL URLWithString:@"https://portalvhdsq3m25bf47d15c.blob.core.windows.net/vast/PlayerTestVMAP.xml"]])

{

[self logFrameworkError];

}

else

{

// Schedule a list of ads using the downloaded VMAP manifest

if (![framework scheduleVMAPWithManifest:manifest])

{

[self logFrameworkError];

}

}

使用 VAST 安排广告

以下示例演示如何安排后期绑定 VAST 广告。

//Example:3 How to schedule a late binding VAST ad.

// set the start time for the ad

adLinearTime.startTime = 13;

adLinearTime.duration = 0;

// Specify the URI of the VAST file

NSString *vastAd1=@"https://portalvhdsq3m25bf47d15c.blob.core.windows.net/vast/PlayerTestVAST.xml";

// Create an AdInfo object

AdInfo *vastAdInfo1 = [[[AdInfo alloc] init] autorelease];

// set URL to VAST file

vastAdInfo1.clipURL = [NSURL URLWithString:vastAd1];

// set running time of ad

vastAdInfo1.mediaTime = [[[MediaTime alloc] init] autorelease];

vastAdInfo1.mediaTime.clipBeginMediaTime = 0;

vastAdInfo1.mediaTime.clipEndMediaTime = 10;

vastAdInfo1.policy = @"policy for late binding VAST";

// specify ad type

vastAdInfo1.type = AdType_Midroll;

vastAdInfo1.appendTo=-1;

adIndex = 0;

// schedule ad

if (![framework scheduleClip:vastAdInfo1 atTime:adLinearTime forType:PlaylistEntryType_VAST andGetClipId:&adIndex])

{

[self logFrameworkError];

}

以下示例演示如何安排早期绑定 VAST 广告。

//Example:4 Schedule an early binding VAST ad

//Download the VAST file

if (![framework.adResolver downloadManifest:&manifest withURL:[NSURL URLWithString:@"https://portalvhdsq3m25bf47d15c.blob.core.windows.net/vast/PlayerTestVAST.xml"]])

{

[self logFrameworkError];

}

else

{

adLinearTime.startTime = 7;

adLinearTime.duration = 0;

// Create AdInfo instance

AdInfo *vastAdInfo2 = [[[AdInfo alloc] init] autorelease];

vastAdInfo2.mediaTime = [[[MediaTime alloc] init] autorelease];

vastAdInfo2.policy = @"policy for early binding VAST";

// specify ad type

vastAdInfo2.type = AdType_Midroll;

vastAdInfo2.appendTo=-1;

// schedule ad

if (![framework scheduleVASTClip:vastAdInfo2 withManifest:manifest atTime:adLinearTime andGetClipId:&adIndex])

{

[self logFrameworkError];

}

}

以下示例演示如何使用粗剪编辑 (RCE) 插入广告

//Example:1 How to use RCE.

// specify manifest for ad content

NSString *secondContent=@"http://wamsblureg001orig-hs.cloudapp.net/6651424c-a9d1-419b-895c-6993f0f48a26/The%20making%20of%20Microsoft%20Surface-m3u8-aapl.ism/Manifest(format=m3u8-aapl)";

// specify ad length

mediaTime.currentPlaybackPosition = 0;

mediaTime.clipBeginMediaTime = 0;

mediaTime.clipEndMediaTime = 80;

// append ad content

if (![framework appendContentClip:[NSURL URLWithString:secondContent] withMediaTime:mediaTime andGetClipId:&clipId])

{

[self logFrameworkError];

}

以下示例演示如何安排广告荚。

//Example:5 Schedule an ad Pod.

// Set start time for ad

adLinearTime.startTime = 23;

adLinearTime.duration = 0;

// Specify URL to content

NSString *adpodSt1=@"https://portalvhdsq3m25bf47d15c.blob.core.windows.net/asset-e47b43fd-05dc-4587-ac87-5916439ad07f/Windows%208_%20Cliffjumpers.mp4?st=2012-11-28T16%3A31%3A57Z&se=2014-11-28T16%3A31%3A57Z&sr=c&si=2a6dbb1e-f906-4187-a3d3-7e517192cbd0&sig=qrXYZBekqlbbYKqwovxzaVZNLv9cgyINgMazSCbdrfU%3D";

// Create an AdInfo instance

AdInfo *adpodInfo1 = [[[AdInfo alloc] init] autorelease];

// set URI to ad content

adpodInfo1.clipURL = [NSURL URLWithString:adpodSt1];

// Set ad running time

adpodInfo1.mediaTime = [[[MediaTime alloc] init] autorelease];

adpodInfo1.mediaTime.clipBeginMediaTime = 0;

adpodInfo1.mediaTime.clipEndMediaTime = 17;

adpodInfo1.policy = @"policy for ad pod 1";

// Set ad type

adpodInfo1.type = AdType_Midroll;

adpodInfo1.appendTo=-1;

adIndex = 0;

// Schedule ad

if (![framework scheduleClip:adpodInfo1 atTime:adLinearTime forType:PlaylistEntryType_Media andGetClipId:&adIndex])

{

[self logFrameworkError];

}

以下示例演示如何安排非粘性中置式广告。 不管查看器执行了什么查找,非粘性广告均仅播放一次。

//Example:6 Schedule a single non sticky mid roll Ad

// specify URL to content

NSString *oneTimeAd=@"http://wamsblureg001orig-hs.cloudapp.net/5389c0c5-340f-48d7-90bc-0aab664e5f02/Windows%208_%20You%20and%20Me%20Together-m3u8-aapl.ism/Manifest(format=m3u8-aapl)";

// create an AdInfo instance

AdInfo *oneTimeInfo = [[[AdInfo alloc] init] autorelease];

// set URL of ad

oneTimeInfo.clipURL = [NSURL URLWithString:oneTimeAd];

oneTimeInfo.mediaTime = [[[MediaTime alloc] init] autorelease];

oneTimeInfo.mediaTime.clipBeginMediaTime = 0;

oneTimeInfo.mediaTime.clipEndMediaTime = -1;

oneTimeInfo.policy = @"policy for one-time ad";

// set ad start time

adLinearTime.startTime = 43;

adLinearTime.duration = 0;

// set ad type

oneTimeInfo.type = AdType_Midroll;

// non sticky ad

oneTimeInfo.deleteAfterPlayed = YES;

// schedule ad

if (![framework scheduleClip:oneTimeInfo atTime:adLinearTime forType:PlaylistEntryType_Media andGetClipId:&adIndex])

{

[self logFrameworkError];

}

以下示例演示如何安排粘性中置式广告。 每当到达视频时间线上的指定时间点时就会显示粘性广告。

//Example:7 Schedule a single sticky mid roll Ad

NSString *stickyAd=@"http://wamsblureg001orig-hs.cloudapp.net/2e4e7d1f-b72a-4994-a406-810c796fc4fc/The%20Surface%20Movement-m3u8-aapl.ism/Manifest(format=m3u8-aapl)";

// create AdInfo instance

AdInfo *stickyAdInfo = [[[AdInfo alloc] init] autorelease];

// set URI to ad

stickyAdInfo.clipURL = [NSURL URLWithString:stickyAd];

stickyAdInfo.mediaTime = [[[MediaTime alloc] init] autorelease];

stickyAdInfo.mediaTime.clipBeginMediaTime = 0;

stickyAdInfo.mediaTime.clipEndMediaTime = 15;

stickyAdInfo.policy = @"policy for sticky mid-roll ad";

// set ad start time

adLinearTime.startTime = 64;

adLinearTime.duration = 0;

// set ad type

stickyAdInfo.type = AdType_Midroll;

stickyAdInfo.deleteAfterPlayed = NO;

// schedule ad

if (![framework scheduleClip:stickyAdInfo atTime:adLinearTime forType:PlaylistEntryType_Media andGetClipId:&adIndex])

{

[self logFrameworkError];

}

以下示例演示如何安排后置式广告。

//Example:8 Schedule Post Roll Ad

NSString *postAdURLString=@"http://wamsblureg001orig-hs.cloudapp.net/aa152d7f-3c54-487b-ba07-a58e0e33280b/wp-m3u8-aapl.ism/Manifest(format=m3u8-aapl)";

// create AdInfo instance

AdInfo *postAdInfo = [[[AdInfo alloc] init] autorelease];

postAdInfo.clipURL = [NSURL URLWithString:postAdURLString];

postAdInfo.mediaTime = [[[MediaTime alloc] init] autorelease];

postAdInfo.mediaTime.clipBeginMediaTime = 0;

// set ad length

postAdInfo.mediaTime.clipEndMediaTime = 45;

postAdInfo.policy = @"policy for post-roll ad";

// set ad type

postAdInfo.type = AdType_Postroll;

adLinearTime.duration = 0;

if (![framework scheduleClip:postAdInfo atTime:adLinearTime forType:PlaylistEntryType_Media andGetClipId:&adIndex])

{

[self logFrameworkError];

}

以下示例演示如何安排前置式广告。

//Example:9 Schedule Pre Roll Ad

NSString *adURLString = @"http://wamsblureg001orig-hs.cloudapp.net/2e4e7d1f-b72a-4994-a406-810c796fc4fc/The%20Surface%20Movement-m3u8-aapl.ism/Manifest(format=m3u8-aapl)";

AdInfo *adInfo = [[[AdInfo alloc] init] autorelease];

adInfo.clipURL = [NSURL URLWithString:adURLString];

adInfo.mediaTime = [[[MediaTime alloc] init] autorelease];

adInfo.mediaTime.currentPlaybackPosition = 0;

adInfo.mediaTime.clipBeginMediaTime = 40; //You could play a portion of an Ad. Yeh!

adInfo.mediaTime.clipEndMediaTime = 59;

adInfo.policy = @"policy for pre-roll ad";

adInfo.appendTo = -1;

adInfo.type = AdType_Preroll;

adLinearTime.duration = 0;

// schedule ad

if (![framework scheduleClip:adInfo atTime:adLinearTime forType:PlaylistEntryType_Media andGetClipId:&adIndex])

{

[self logFrameworkError];

}

以下示例演示如何安排中置叠加式广告。

// Example10: Schedule a Mid Roll overlay Ad

NSString *adURLString = @"https://portalvhdsq3m25bf47d15c.blob.core.windows.net/asset-e47b43fd-05dc-4587-ac87-5916439ad07f/Windows%208_%20Cliffjumpers.mp4?st=2012-11-28T16%3A31%3A57Z&se=2014-11-28T16%3A31%3A57Z&sr=c&si=2a6dbb1e-f906-4187-a3d3-7e517192cbd0&sig=qrXYZBekqlbbYKqwovxzaVZNLv9cgyINgMazSCbdrfU%3D";

//Create AdInfo instance

AdInfo *adInfo = [[[AdInfo alloc] init] autorelease];

adInfo.clipURL = [NSURL URLWithString:adURLString];

adInfo.mediaTime = [[[MediaTime alloc] init] autorelease];

adInfo.mediaTime.currentPlaybackPosition = 0;

adInfo.mediaTime.clipBeginMediaTime = 0;

// specify ad length

adInfo.mediaTime.clipEndMediaTime = 20;

adInfo.policy = @"policy for mid-roll overlay ad";

adInfo.appendTo = -1;

// specify ad type

adInfo.type = AdType_Midroll;

// specify ad start time & duration

adLinearTime.startTime = 300;

adLinearTime.duration = 20;

// schedule ad if (![framework scheduleClip:adInfo atTime:adLinearTime forType:PlaylistEntryType_Media andGetClipId:&adIndex])

{

[self logFrameworkError];

}

媒体服务学习路径

媒体服务 v3(最新版本)

查看最新版本的 Azure 媒体服务!

媒体服务 v2(旧版)

提供反馈

使用 用户之声 论坛提供反馈意见,并提出有关如何改进 Azure 媒体服务的建议。 还可以直接转到以下类别之一:

服务器添加广告信息服务,在客户端上插入广告相关推荐

  1. html给看板娘添加语音,如何在网页上插入一个看板娘

    首先准备一个html,放在tomcat的webapps的文件夹下,或者利用Hbuilder(hbuilder内置服务器了的),下载好的文件也放在webapps下 由于看板娘用到ajax技术,而ajax ...

  2. 怎样在html中插入广告,如何在网页中插入广告代码。

    1.首先通过百度搜索百度地图生成器,进入百度地图生成器的创建地图页面. 2.在创建地图页面第一步输入我们需要生成地图的地址,然后点击查找. 3.如果没有其它设置需求的话,那么就可以直接点击下方的获取代 ...

  3. QQ聊天窗口上的广告与QQ弹窗广告的完美屏蔽去除

    涉及的软件 1. QQ  (笔者的为v8.2版本) 2. Win7 3. ADSafe(3.13.308.9900正式版) 前言 QQ广告十分讨人厌,除了QQ弹窗的广告,让人十分反感外,最近发现QQ聊 ...

  4. linux服务器插上硬盘不能开机,Linux服务器添加新硬盘无法识别解决方法(无需重启)...

    Linux服务器添加新硬盘无法识别解决方法(无需重启) 发布时间:2018-08-24 19:45, 浏览次数:711 , 标签: Linux 前言 一般来说,当我们在服务上插入新的磁盘时,服务器是会 ...

  5. 联邦学习【分布式机器学习技术】【①各客户端从服务器下载全局模型;②各客户端训练本地数据得到本地模型;③各客户端上传本地模型到中心服务器;④中心服务器接收各方数据后进行加权聚合操作,得全局模型】

    随着计算机算力的提升,机器学习作为海量数据的分析处理技术,已经广泛服务于人类社会. 然而,机器学习技术的发展过程中面临两大挑战: 一是数据安全难以得到保障,隐私数据泄露问题亟待解决: 二是网络安全隔离 ...

  6. 10g的客户端从9i的服务器中导出数据时遇到上面的问题

    EXP-00056: 遇到 ORACLE 错误 6550 ORA-06550: 第 1 行, 第 41 列: PLS-00302: 必须说明 'SET_NO_OUTLINES' 组件 ORA-0655 ...

  7. java套接字数据对不上,服务器不从多个客户端(Java套接字)接收数据

    我写了一个简单的程序,服务器应该打印多个客户端发送的数据.但服务器只接收部分数据.以下是代码的相关部分. 服务器: try { serverSocket = new ServerSocket(8888 ...

  8. VOS客户端上服务器和软交换状态显示红灯的原因分析

    VOS客户端上服务器和软交换状态灯显示红灯,实际后台服务都在运行的原因 登录VOS3000客户端 原因分析  VOS客户端连接到服务器是属于TCP连接,TCP连接一旦断开后,服务器和软交换的状态灯就会 ...

  9. 在两个私网客户端上如何实现TCPsocket通信,使用云服务器作为中转客户端

    目录 文章目录 前言 一.TCP为什么不能直接在两个私网客户端之间通信? 二.使用步骤 1.申请阿里云esc云服务器 2.在两个客户端运行客户端代码 三.运行服务端客户端代码 总结 前言 本人最近在学 ...

最新文章

  1. c# yield关键字原理
  2. Wireshark 过滤 基本语法
  3. 3分钟学会如何调度运营海量Redis系统
  4. C语言Selection Sort选择排序的算法(附完整源码)
  5. 23.2.3 高速缓存依赖性(1)
  6. centos7 和centos 6的一些区别
  7. Github+jsDelivr+PicGo 打造稳定快速、高效免费图床
  8. poj 1325 Machine Schedule 最小顶点覆盖
  9. 641. 设计循环双端队列
  10. 三星note9刷android11,【极光ROM】-【三星NOTE9 N960X-845】-【V17.0 Android-Q-TG1】
  11. 空间数据格式转换之MapInfo mid/mif文件转ArcGIS shpfile文件
  12. 极化码理论及算法研究2-什么是极化码?
  13. formality形式验证里的案件分析
  14. JS算法-整数转罗马数字
  15. 【ZJOJ 5454】【NOIP2017提高A组冲刺11.5】仔细的检查
  16. codeforces 577A Multiplication Table【思维】
  17. freenas作无盘服务器,Freenas11.3 jail创建失败解决办法
  18. 车联网 OpenV2X 开源技术社区发布,九州云携手伙伴共建 V2X 路边智能新生态
  19. springboot-java常用注解
  20. linux与ipad屏幕共享

热门文章

  1. 跨境电商万圣节社媒营销:8个方法助你冲出重围
  2. ROS与Arduino的通信
  3. [NOIP2011]统计单词数
  4. 利用频谱分析实现音乐无缝隙过度
  5. 数据库事务的简单学习(一)
  6. Linux下查看图片——安装imgcat
  7. java swing的几个视觉特效库
  8. LInkedin快速开发外贸客户技巧,新人必备
  9. vue中多组件调用,实现上下分屏,上下拖动
  10. 289. 生命游戏。