• 6 min read

Customized Renditions and Asset trimming with Dynamic Manifest

In this post, we will review the Azure Media Services Dynamic Manifest (Asset Filters) announcement and details.

As a follow up on Jason’s announcement of our dynamic manifest capabilities last month during NAB, I am pleased to announce that they are now available for you to begin using in your streaming applications. Jason’s post covered many of the common usage scenarios so I encourage you to start there if this is the first time you’re reading about dynamic manifests since here I will primarily focus on technical implementation details. Before going into the details of how it works, I want to provide some background for the following terminologies.

  • Adaptive Bit Rate over HTTP (ABR), adaptive bit rate streaming is a method of video streaming over HTTP where the source content is encoded at multiple bit rates and chunked into small multi-second parts. The streaming client is made aware of the available streams at differing bit rates, and chunks of the streams by a manifest file. To meet the subscriber demand for multi-screen and deliver video to any device across any network, operators use adaptive bit rate (ABR) protocols in their multi-screen implementations, such as Apple HLS, Microsoft Smooth, Adobe HDS and MPEG-DASH.
  • The manifest, sometimes referred to as “the playlist”. This file includes streaming metadata such as qualities, audio languages, and presentation window and also provides the player currently available as well as next playable fragments with their respective locations. It is a text-based or XML file with specific attributes depending on format.  Using “asset filters” which I’ll describe below you can create a dynamic manifest based on the following properties and attributes.
    Track type – audio, video, or text
    Track name
    Start and end time
    Presentation window – sliding window of fixed duration, anchored from live position.
    Bitrate (qualities)
    Track language
    FourCC
  • Fragments/segments, actual chunks of video, audio or text content.

What is a filter?

Asset filter is a combination of rules based on manifest attributes and timeline which describes the streaming endpoint (backend service) how to manipulate the output playlist (Manifest).

Filter Types

There are two types of asset filters; global and local (asset level). Both of the filter types have exactly the same features and uses the same attributes to define filters. The main difference between the two is the scenarios they are suitable for and also where they are stored.

  • Global filters are generally suitable for device profiles (track filtering) whereas local filters are mostly preferred for range filters (trimming), since most of the time trimming is specific to asset.
  • Global filters are stored at the account level and when created can be applied to all assets under the account. Local filters are per asset and can only be used for the asset under which they are created. A local filter’s lifetime is tied to the asset lifetime, in other words when the asset is deleted all local filters created on it are also deleted.

How it works?

Filters can consists of multiple rules. As an example you can define remove slate and apply back-off over a live playlist (manifest) as well as include removing qualities to the combination. For multiple filtering rules the end result is the composition (intersection only) of the rules.

dynamic_manifest8

Creating Filters through Our APIs

Asset filter API is available for Azure Media Service REST version >= 2.11. This release includes only REST APIs and a corresponding .NET SDK is underway which is targeted for following weeks.
You can find more information regarding to Azure Media Services REST from here.

Asset filters consist of two sections (groups); PresentationTimeRange and Tracks.

PresentationTimeRange:

Attribute Description Applies To Constraints
StartTimestamp Media that starts after this timestamp will be included in the playlist (manifest). Live and VOD Absolute time. Value rounded to the closest next GOP start.
EndTimestamp Media that ends before this timestamp will be included in the playlist (manifest). VOD For live presentation it is silently ignored and applies when the presentation ends (Live2VOD) Absolute time. Value rounded to the closest next GOP start.
PresentationWindowDuration Defines a sliding window at the live edge or end of the presentation. Media within this sliding window will be included in the playlist (manifest). Live, but also applies to VOD to enable smooth transitions when the presentation ends. The minimum presentation window duration is 120 seconds.
LiveBackoffDuration Applies a live presentation backoff, or delay, to the media. Live only, but silently ignored for VOD to enable smooth transitions when the presentation ends. The maximum live backoff duration is 60 seconds.
Timescale The timescale used by the timestamps and durations specified above. The default timescale is 10000000. Live and VOD Default is 10000000 (HNS)

Tracks:

Property Description Applies To Constraints
Type Type of the track. Values can be video, audio, or text. Live and VOD video, audio, or text
Name Name of the Track Live and VOD
Language Track language Live and VOD format specified in RFC 5646
FourCC Track FourCC value Live and VOD first element of codecs format specified in RFC 6381
Bitrate Bitrate of the track. Live and VOD Can be a range value or exact value

 

Note: Azure Media Services dynamic packager can source from multi-bitrate MP4 and Smooth Streaming files. Dynamic manifests(asset filters) uses Smooth Streaming server and client manifest data for filtering. Please also note that you should have at least one streaming unit to use this feature.

Sample Global filter REST request:




<updated>2015-04-03T20:50:34Z</updated>
<author><name /></author>
<content type="application/xml">

<m:properties><d:Name>MyGlobalFilter</d:Name>

<d:PresentationTimeRange>
<d:EndTimestamp m:type="Edm.Int64">9223372036854775807</d:EndTimestamp>
<d:LiveBackoffDuration m:type="Edm.Int64">0</d:LiveBackoffDuration>
<d:PresentationWindowDuration m:type="Edm.Int64">800000000</d:PresentationWindowDuration>
<d:StartTimestamp m:type="Edm.Int64">0</d:StartTimestamp>
<d:Timescale m:type="Edm.Int64">10000000</d:Timescale>
</d:PresentationTimeRange>

<d:Tracks /></m:properties>

</content>
</entry></pre>
<p><strong>Sample Local (Asset Level) filter REST request:</strong></p>
<pre class="prettyprint"><?xml version="1.0" encoding="utf-8"?>
<entry xmlns=https://www.w3.org/2005/Atom xmlns:d="" xmlns:m="/metadata" xmlns:georss="" xmlns:gml="https://www.opengis.net/gml">
<id /><title />
<updated>2015-04-03T20:53:34Z</updated>
<author><name /></author>
<content type="application/xml">
<m:properties><d:Id></d:Id>

<d:Name>MyLocalFilter</d:Name>

<d:ParentAssetId>nb:cid:UUID:fcef555d-1500-80c4-def5-f1e4d721ea68</d:ParentAssetId>

<d:PresentationTimeRange>

<d:EndTimestamp m:type="Edm.Int64">9223372036854775807</d:EndTimestamp>
<d:LiveBackoffDuration m:type="Edm.Int64">300000000</d:LiveBackoffDuration>
<d:PresentationWindowDuration m:type="Edm.Int64">3000000000</d:PresentationWindowDuration>
<d:StartTimestamp m:type="Edm.Int64">400000</d:StartTimestamp>
<d:Timescale m:type="Edm.Int64">10000000</d:Timescale>

</d:PresentationTimeRange>

<d:Tracks>

<d:element>

<d:PropertyConditions>

<d:element>

<d:Operator>Equal</d:Operator><d:Property>Type</d:Property><d:Value>audio</d:Value>

</d:element>

<d:element>

<d:Operator>Equal</d:Operator><d:Property>Language</d:Property><d:Value>en</d:Value>

</d:element>

</d:PropertyConditions>

</d:element>

<d:element>

<d:PropertyConditions>

<d:element>

<d:Operator>NotEqual</d:Operator><d:Property>Type</d:Property><d:Value>video</d:Value>

</d:element>

<d:element>

<d:Operator>Equal</d:Operator><d:Property>Bitrate</d:Property><d:Value>0-2427000</d:Value>

</d:element>

</d:PropertyConditions>

</d:element>

</d:Tracks>

</m:properties>

</content></entry>
</pre>
<pre class="prettyprint"></pre>
<p> </p>
<p>After a filter has been created you can start using it by adding the filter name to the URL request by adding a filter parameter to the manifest request as in the example below.</p>
<p><a href="(filter=MyLocalFilter)">(<span style="background-color: #ffff00;">filter=MyLocalFilter</span>)</a></p>
<p>Filters can also be used in combination with <a href="https://azure.microsoft.com/en-us/documentation/articles/media-services-dynamic-packaging-overview/" target="_blank" rel="noopener">dynamic packaging</a> and <a href="https://msdn.microsoft.com/en-us/library/azure/dn783457.aspx" target="_blank" rel="noopener">dynamic encryption</a>. As an example here is a request for the same stream as above but in HLS v4 format.</p>
<p><a href="(format=m3u8-aapl,filter=MyLocalFilter)">(format=m3u8-aapl,<span style="background-color: #ffff00;">filter=MyLocalFilter</span>)</a></p>
<blockquote><p><strong>Note:</strong> Global filters can be used with all your assets under the same media services account by just adding the filter name to the asset streaming URL. Local filters can only be used with the asset they are associated with. Please see local filter asset example. (“<span style="color: #ff0000; font-family: Consolas;">ParentAssetId</span>”)</p></blockquote>
<h2>What happens behind the scenes?</h2>
<p>When a request which includes a filter is received by the streaming endpoint, the original playlist (manifest) is processed using the filter rules and a filtered playlist is served out in our response. If there are multiple filter rules then rule intersection defines the output. Presentation range (time) rules are executed at GOP (Group of picture- Key Frame) boundaries and rounded to the nearest next fragment.<br />
As an example;<br />
<img decoding="async" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="dynamic_manifest9" src="https://azurecomcdn.azureedge.net/mediahandler/acomblog/media/Default/blog/dynamic_manifest9.png" alt="dynamic_manifest9" width="640" height="327" border="0" /></p>
<p>Filters only apply to the playlist (manifest) requests and actual fragments are not processed, hence players can get benefit of already cached fragments in the proxies and CDNs.<br />
Below is an example showing the original playlist (manifest) and filtered one; after applying a presentation range filter.</p>
<p><a href="https://acom.azurecomcdn.net/80C57D/blogmedia/blogmedia/2015/05/26/dynamic_manifest10.png"><img decoding="async" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="dynamic_manifest10" src="https://azurecomcdn.azureedge.net/mediahandler/acomblog/media/Default/blog/dynamic_manifest10_thumb.png" alt="dynamic_manifest10" width="640" height="482" border="0" /></a></p>
<p>As you can see above the output manifest only includes the segments within the defined filter start and end times.</p>
<h2>Know issues and limitations</h2>
<ul>
<li>Dynamic manifest operates in GOP boundaries (Key Frames) hence trimming has GOP accuracy. If you want frame accurate sub-clipping you can use rendered sub-clips feature.</li>
<li>You can use same filter name for local and global filters. In this case local filter takes precedence and overrides global.</li>
<li>If you update a filter, it can take up to 2 minutes for streaming endpoint to refresh the rules. Also please keep in mind that updating a filter can result in player failures if the content is already served with the old filter and cached in proxies and CDN caches. It is recommend to purge the cache after updating the filter. If this option is not possible please consider using a different filter.</li>
<li>This release doesn’t support combining multiple filters in the URL. You can only apply one filter at a time.</li>
<li>You can set “EndTimestamp” rules for both on-demand and live playlists. However this rule is silently ignored when the presentation is live and takes presence when the live presentation transforms to on-demand.</li>
<li>You can set “PresentationWindowDuration” and “LiveBackoffDuration” rules to both on-demand and live presentations. However for on-demand presentations this rules are silently ignored.</li>
</ul>
<h2>Conclusion</h2>
<p>Dynamic manifest (asset filters) is a powerful new feature which helps you to reach multiple-end points without the hassle of post-production and having multiple copies of the same asset. It allows you create multiple renditions and views in seconds.</p>
<p>I hope you will enjoy this cool feature! For feature requests or to provide general feedback—we want to hear it all! Please use comments section below and I’ll respond as quickly as I can.</p>
			</div>

	
</article><!-- #post-8201 -->
					</div>
		</main>

	<aside class="single-layout__related">
		
<section data-bi-an="Related Articles">
	<div class="container px-0">
		<h2 class="font-weight-seminormal mb-3 mb-md-4">
			Related Posts		</h2>
		<ul class="mb-0 list-unstyled row row-cols-1 row-cols-md-3">
			<li class="col d-flex mb-3">
<article class="is-entire-card-clickable msx-card h-100 msx-card--vertical msx-card--solid msx-card--no-image" data-bi-an="Related posts">
	
	<div class="msx-card__body">
					<ul class="list-unstyled d-inline-flex list-bullet-inline align-items-center small msx-card__meta">
										<li class="m-0 d-inline-flex align-items-center" data-bi-cn="Cloud Strategy">
							<a href="https://azure.microsoft.com/es-es/blog/tag/cloud-strategy/">Cloud Strategy</a>
						</li>
														<li class="m-0 d-inline-flex align-items-center">
					Apr 26, 2022				</li>
				<li class="m-0 d-inline-flex align-items-center">
					7 min read				</li>
			</ul>
		
					<h3 class="msx-card__title">
				<a data-bi-cn="Azure Cost Management and Billing updates – April 2022" data-bi-id="174724" data-bi-ct="title link" data-bi-tn="content-card" href="https://azure.microsoft.com/es-es/blog/azure-cost-management-and-billing-updates-april-2022/">
					<span>Azure Cost Management and Billing updates – April 2022</span> <span class="glyph glyph-append glyph-prepend-chevron-right" aria-hidden="true"></span>
			</a>
				</a>
			</h3>
		
					<div class="msx-card__byline small">
				<span>By</span>	<a class="msx-byline__author-link" href="https://azure.microsoft.com/es-es/blog/author/michael-flanakin/" data-bi-cn="Michael Flanakin" data-bi-ct="author link" data-bi-an="Single header">Michael Flanakin</a>, Program Manager, Azure Cost Management			</div>
			
			</div>
</article>
</li><li class="col d-flex mb-3">
<article class="is-entire-card-clickable msx-card h-100 msx-card--vertical msx-card--solid msx-card--no-image" data-bi-an="Related posts">
	
	<div class="msx-card__body">
					<ul class="list-unstyled d-inline-flex list-bullet-inline align-items-center small msx-card__meta">
										<li class="m-0 d-inline-flex align-items-center" data-bi-cn="Database">
							<a href="https://azure.microsoft.com/es-es/blog/tag/database/">Database</a>
						</li>
														<li class="m-0 d-inline-flex align-items-center">
					Oct 29, 2019				</li>
				<li class="m-0 d-inline-flex align-items-center">
					1 min read				</li>
			</ul>
		
					<h3 class="msx-card__title">
				<a data-bi-cn="Enabling Diagnostic Logging in Azure API for FHIR®" data-bi-id="3380" data-bi-ct="title link" data-bi-tn="content-card" href="https://azure.microsoft.com/es-es/blog/enabling-diagnostic-logging-in-azure-api-for-fhir/">
					<span>Enabling Diagnostic Logging in Azure API for FHIR®</span> <span class="glyph glyph-append glyph-prepend-chevron-right" aria-hidden="true"></span>
			</a>
				</a>
			</h3>
		
					<div class="msx-card__byline small">
				<span>By</span>	<a class="msx-byline__author-link" href="https://azure.microsoft.com/es-es/blog/author/matjaz-ladava/" data-bi-cn="Matjaz Ladava" data-bi-ct="author link" data-bi-an="Single header">Matjaz Ladava</a>, Principal Program Manager			</div>
			
			</div>
</article>
</li><li class="col d-flex mb-3">
<article class="is-entire-card-clickable msx-card h-100 msx-card--vertical msx-card--solid msx-card--no-image" data-bi-an="Related posts">
	
	<div class="msx-card__body">
					<ul class="list-unstyled d-inline-flex list-bullet-inline align-items-center small msx-card__meta">
										<li class="m-0 d-inline-flex align-items-center" data-bi-cn="Government">
							<a href="https://azure.microsoft.com/es-es/blog/tag/government/">Government</a>
						</li>
														<li class="m-0 d-inline-flex align-items-center">
					Aug 22, 2019				</li>
				<li class="m-0 d-inline-flex align-items-center">
					6 min read				</li>
			</ul>
		
					<h3 class="msx-card__title">
				<a data-bi-cn="Conformidad protegida por el programa IRAP desde la infraestructura hasta la capa de aplicaciones SAP en Azure" data-bi-id="3502" data-bi-ct="title link" data-bi-tn="content-card" href="https://azure.microsoft.com/es-es/blog/irap-protected-compliance-from-infra-to-sap-application-layer-on-azure/">
					<span>Conformidad protegida por el programa IRAP desde la infraestructura hasta la capa de aplicaciones SAP en Azure</span> <span class="glyph glyph-append glyph-prepend-chevron-right" aria-hidden="true"></span>
			</a>
				</a>
			</h3>
		
					<div class="msx-card__byline small">
				<span>By</span>	<a class="msx-byline__author-link" href="https://azure.microsoft.com/es-es/blog/author/sachin-ghorpade/" data-bi-cn="Sachin Ghorpade" data-bi-ct="author link" data-bi-an="Single header">Sachin Ghorpade</a>, Senior Cloud Solution Architect			</div>
			
			</div>
</article>
</li>		</ul>
	</div>
</section>
	</aside>
		<div class="footer-prefix-container">
		
<section class="wp-block-group alignfull has-primary-brand-gradient-background has-background is-layout-constrained wp-block-group-is-layout-constrained">
<div class="wp-block-group is-layout-constrained wp-container-core-group-is-layout-2 wp-block-group-is-layout-constrained">
<h2 class="wp-block-heading has-text-align-center has-h-1-font-size" id="exploreazure-ai-solutions"><strong>Explore<br><span class="text-gradient">Azure AI solutions</span></strong></h2>



<div class="wp-block-group is-layout-constrained wp-container-core-group-is-layout-1 wp-block-group-is-layout-constrained">
<p class="has-text-align-center wp-block-paragraph">The future of AI starts here. Envision your next great AI app with the latest technologies. Get started with Azure.</p>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-1 wp-block-buttons-is-layout-flex">
<div class="wp-block-button is-style-fill"><a class="wp-block-button__link wp-element-button" href="https://azure.microsoft.com/es-es">Learn more about Azure</a></div>
</div>
</div>
</div>



<div class="wp-block-group is-layout-constrained wp-container-core-group-is-layout-5 wp-block-group-is-layout-constrained" style="padding-top:var(--wp--preset--spacing--2-xl)">
<div class="wp-block-group is-content-justification-center is-layout-flex wp-container-core-group-is-layout-4 wp-block-group-is-layout-flex">
<p class="has-text-align-center has-medium-font-size wp-block-paragraph">Connect with us on social</p>



<div class="wp-block-group is-content-justification-space-between is-nowrap is-layout-flex wp-container-core-group-is-layout-3 wp-block-group-is-layout-flex"><svg class="wp-block-tenup-icon" style="width: ; height: ;" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 25.07 25.41"><path fill="currentColor" d="M12.5 0A12.5 12.5 0 1 0 25 12.5C25 5.6 19.4 0 12.5 0M5.07 5.51h4.44l3.78 5.06 4.68-5.06h1.3l-5.4 5.84 6.1 8.14h-4.45L11.42 14l-5.08 5.5h-1.3l5.8-6.27zm1.92.96L16 18.53h2.04L9.03 6.47Z"/></svg>

<svg class="wp-block-tenup-icon" style="width: ; height: ;" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" viewBox="0 0 24 24"><path d="M12 0C5.373 0 0 5.373 0 12s5.373 12 12 12 12-5.373 12-12S18.627 0 12 0m4.441 16.892c-2.102.144-6.784.144-8.883 0C5.282 16.736 5.017 15.622 5 12c.017-3.629.285-4.736 2.558-4.892 2.099-.144 6.782-.144 8.883 0C18.718 7.264 18.982 8.378 19 12c-.018 3.629-.285 4.736-2.559 4.892M10 9.658l4.917 2.338L10 14.342z"/></svg>

<svg class="wp-block-tenup-icon" style="width: ; height: ;" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none"><path fill="currentColor" d="M19.927 20.283h-3.45v-5.535c0-1.305-.038-3.005-1.783-3.005-1.783 0-2.093 1.423-2.093 2.926v5.614h-3.45V8.936h3.295v1.542h.04a3.54 3.54 0 0 1 3.294-1.819c3.488 0 4.147 2.372 4.147 5.417zM5.237 7.393c-1.124 0-2.016-.909-2.016-2.055s.892-2.056 2.016-2.056 2.015.91 2.015 2.056-.891 2.056-2.015 2.056Zm1.744 12.89H3.493V8.936h3.45v11.347zM21.671 0H1.748C.818 0 .043.751.043 1.7v20.402c0 .95.775 1.74 1.705 1.7h19.885c.93 0 1.705-.75 1.744-1.7V1.7c0-.949-.775-1.7-1.706-1.7"/></svg>

<svg class="wp-block-tenup-icon" style="width: ; height: ;" xmlns="http://www.w3.org/2000/svg" width="23" height="22" fill="none" viewBox="0 0 23 22"><g fill="currentColor" clip-path="url(#a)"><path d="M11.497 2.581c2.81 0 3.142.011 4.251.062 1.026.046 1.583.218 1.954.362.458.168.872.437 1.211.787.35.34.62.754.788 1.211.144.371.315.928.362 1.954.05 1.11.061 1.442.061 4.252s-.01 3.142-.061 4.251c-.047 1.026-.218 1.583-.362 1.954a3.49 3.49 0 0 1-1.997 1.997c-.371.144-.928.315-1.954.362-1.11.05-1.442.061-4.252.061s-3.142-.01-4.251-.061c-1.026-.047-1.583-.218-1.954-.362a3.26 3.26 0 0 1-1.211-.788 3.26 3.26 0 0 1-.787-1.21c-.145-.372-.316-.929-.363-1.954-.05-1.11-.061-1.443-.061-4.252 0-2.81.01-3.142.061-4.252.047-1.026.218-1.583.363-1.954.168-.457.437-.871.787-1.21.34-.35.753-.62 1.211-.788.37-.144.928-.315 1.954-.362 1.11-.05 1.442-.061 4.251-.061zm.001-1.897c-2.857 0-3.215.012-4.338.063-1.122.052-1.886.23-2.555.491A5.2 5.2 0 0 0 2.74 2.451 5.2 5.2 0 0 0 1.53 4.315c-.262.67-.44 1.434-.491 2.554s-.064 1.48-.064 4.338.012 3.216.064 4.338c.051 1.122.229 1.884.489 2.554a5.2 5.2 0 0 0 1.213 1.863c.526.535 1.162.95 1.864 1.214.668.26 1.434.438 2.554.49 1.12.05 1.48.062 4.338.062s3.216-.012 4.338-.063c1.122-.05 1.884-.23 2.554-.489a5.38 5.38 0 0 0 3.077-3.077c.26-.668.438-1.434.489-2.554s.063-1.48.063-4.338-.012-3.216-.063-4.338c-.05-1.122-.23-1.885-.489-2.554a5.2 5.2 0 0 0-1.214-1.864 5.2 5.2 0 0 0-1.863-1.21C17.719.977 16.955.8 15.835.748s-1.48-.063-4.338-.063z"/><path d="M11.496 5.804a5.403 5.403 0 1 0 0 10.806 5.403 5.403 0 0 0 0-10.806m0 8.91a3.508 3.508 0 1 1 0-7.017 3.508 3.508 0 0 1 0 7.017M17.113 6.853a1.262 1.262 0 1 0 0-2.525 1.262 1.262 0 0 0 0 2.525"/></g><defs><clipPath id="a"><path fill="currentColor" d="M.975.644h21.05v21.09H.974z"/></clipPath></defs></svg></div>
</div>
</div>
</section>
	</div>
	<div id="footerArea" class="uhf"  data-m='{"cN":"footerArea","cT":"Area_coreuiArea","id":"a2Body","sN":2,"aN":"Body"}'>
                <div id="footerRegion"      data-region-key="footerregion" data-m='{"cN":"footerRegion","cT":"Region_coreui-region","id":"r1a2","sN":1,"aN":"a2"}' >

    <div  id="footerUniversalFooter" data-m='{"cN":"footerUniversalFooter","cT":"Module_coreui-universalfooter","id":"m1r1a2","sN":1,"aN":"r1a2"}'  data-module-id="Category|footerRegion|coreui-region|footerUniversalFooter|coreui-universalfooter">
        



<footer id="uhf-footer" class="c-uhff context-uhf"  data-uhf-mscc-rq="false" data-footer-footprint="/MSCloudBlogs/MSCloudBlogsfooter, fromService: True" data-m='{"cN":"Uhf footer_cont","cT":"Container","id":"c1m1r1a2","sN":1,"aN":"m1r1a2"}'>
        <nav class="c-uhff-nav" aria-label="Vínculos de recursos de pie de página" data-m='{"cN":"Footer nav_cont","cT":"Container","id":"c1c1m1r1a2","sN":1,"aN":"c1m1r1a2"}'>
            
                <div class="c-uhff-nav-row">
                    <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn1_cont","cT":"Container","id":"c1c1c1m1r1a2","sN":1,"aN":"c1c1m1r1a2"}'>
                        <div class="c-heading-4" role="heading" aria-level="2">Novedades</div>
                        <ul class="c-list f-bare">
                            <li>
                                <a aria-label="Surface Pro Novedades" class="c-uhff-link" href="https://www.microsoft.com/es-es/surface/devices/surface-pro-11th-edition" data-m='{"cN":"Footer_WhatsNew_NewSurfacePro_nav","id":"n1c1c1c1m1r1a2","sN":1,"aN":"c1c1c1m1r1a2"}'>Surface Pro</a>
                            </li>
                            <li>
                                <a aria-label="Surface Laptop Novedades" class="c-uhff-link" href="https://www.microsoft.com/es-es/surface/devices/surface-laptop-7th-edition" data-m='{"cN":"Footer_WhatsNew_SurfaceLaptop_nav","id":"n2c1c1c1m1r1a2","sN":2,"aN":"c1c1c1m1r1a2"}'>Surface Laptop</a>
                            </li>
                            <li>
                                <a aria-label="Surface Laptop Studio 2 Novedades" class="c-uhff-link" href="https://www.microsoft.com/es-es/d/Surface-Laptop-Studio-2/8rqr54krf1dz" data-m='{"cN":"Footer_WhatsNew_SurfaceLaptopStudio2_nav","id":"n3c1c1c1m1r1a2","sN":3,"aN":"c1c1c1m1r1a2"}'>Surface Laptop Studio 2</a>
                            </li>
                            <li>
                                <a aria-label="Surface Laptop Go 3 Novedades" class="c-uhff-link" href="https://www.microsoft.com/es-es/d/Surface-Laptop-Go-3/8p0wwgj6c6l2" data-m='{"cN":"Footer_WhatsNew_SurfaceLaptopGo3_nav","id":"n4c1c1c1m1r1a2","sN":4,"aN":"c1c1c1m1r1a2"}'>Surface Laptop Go 3</a>
                            </li>
                            <li>
                                <a aria-label="Microsoft Copilot Novedades" class="c-uhff-link" href="https://www.microsoft.com/es-es/microsoft-copilot" data-m='{"cN":"Footer_WhatsNew_CopilotMicrosoft_nav","id":"n5c1c1c1m1r1a2","sN":5,"aN":"c1c1c1m1r1a2"}'>Microsoft Copilot</a>
                            </li>
                            <li>
                                <a aria-label="Microsoft 365 Novedades" class="c-uhff-link" href="https://www.microsoft.com/es-es/microsoft-365" data-m='{"cN":"Footer_WhatsNew_Microsoft365_nav","id":"n6c1c1c1m1r1a2","sN":6,"aN":"c1c1c1m1r1a2"}'>Microsoft 365</a>
                            </li>
                            <li>
                                <a aria-label="Aplicaciones de Windows 11 Novedades" class="c-uhff-link" href="https://www.microsoft.com/windows/windows-11-apps" data-m='{"cN":"Footer_WhatsNew_Windows_11_apps_nav","id":"n7c1c1c1m1r1a2","sN":7,"aN":"c1c1c1m1r1a2"}'>Aplicaciones de Windows 11</a>
                            </li>

                        </ul>
                        
                    </div>
                    <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn2_cont","cT":"Container","id":"c2c1c1m1r1a2","sN":2,"aN":"c1c1m1r1a2"}'>
                        <div class="c-heading-4" role="heading" aria-level="2">Microsoft Store</div>
                        <ul class="c-list f-bare">
                            <li>
                                <a aria-label="Perfil de la cuenta Microsoft Store" class="c-uhff-link" href="https://account.microsoft.com/" data-m='{"cN":"Footer_StoreandSupport_AccountProfile_nav","id":"n1c2c1c1m1r1a2","sN":1,"aN":"c2c1c1m1r1a2"}'>Perfil de la cuenta</a>
                            </li>
                            <li>
                                <a aria-label="Centro de descarga Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/es-es/download" data-m='{"cN":"Footer_StoreandSupport_DownloadCenter_nav","id":"n2c2c1c1m1r1a2","sN":2,"aN":"c2c1c1m1r1a2"}'>Centro de descarga</a>
                            </li>
                            <li>
                                <a aria-label="Soporte de Microsoft Store Microsoft Store" class="c-uhff-link" href="https://go.microsoft.com/fwlink/?linkid=2139749" data-m='{"cN":"Footer_StoreandSupport_SalesAndSupport_nav","id":"n3c2c1c1m1r1a2","sN":3,"aN":"c2c1c1m1r1a2"}'>Soporte de Microsoft Store</a>
                            </li>
                            <li>
                                <a aria-label="Devoluciones Microsoft Store" class="c-uhff-link" href="https://support.microsoft.com/es-es/help/10558/microsoft-store-returning-items-bought-for-exchange-refund" data-m='{"cN":"Footer_StoreandSupport_Returns_nav","id":"n4c2c1c1m1r1a2","sN":4,"aN":"c2c1c1m1r1a2"}'>Devoluciones</a>
                            </li>
                            <li>
                                <a aria-label="Seguimiento de pedidos Microsoft Store" class="c-uhff-link" href="https://account.microsoft.com/orders" data-m='{"cN":"Footer_StoreandSupport_OrderTracking_nav","id":"n5c2c1c1m1r1a2","sN":5,"aN":"c2c1c1m1r1a2"}'>Seguimiento de pedidos</a>
                            </li>
                            <li>
                                <a aria-label="Reciclar  Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/es-es/store/b/recycling?icid=GlobalFooterNav" data-m='{"cN":"Footer_Recyclying_nav","id":"n6c2c1c1m1r1a2","sN":6,"aN":"c2c1c1m1r1a2"}'>Reciclar </a>
                            </li>
                            <li>
                                <a aria-label="Garantías comerciales Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/es-es/store/b/aboutwarranties?icid=GlobalFooterNav" data-m='{"cN":"Footer_Warranties_nav","id":"n7c2c1c1m1r1a2","sN":7,"aN":"c2c1c1m1r1a2"}'>Garantías comerciales</a>
                            </li>

                        </ul>
                        
                    </div>
                    <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn3_cont","cT":"Container","id":"c3c1c1m1r1a2","sN":3,"aN":"c1c1m1r1a2"}'>
                        <div class="c-heading-4" role="heading" aria-level="2">Educación</div>
                        <ul class="c-list f-bare">
                            <li>
                                <a aria-label="Microsoft Educación Educación" class="c-uhff-link" href="https://www.microsoft.com/es-es/education" data-m='{"cN":"Footer_Education_MicrosoftInEducation_nav","id":"n1c3c1c1m1r1a2","sN":1,"aN":"c3c1c1m1r1a2"}'>Microsoft Educación</a>
                            </li>
                            <li>
                                <a aria-label="Dispositivos para educación Educación" class="c-uhff-link" href="https://www.microsoft.com/es-es/education/devices/overview" data-m='{"cN":"Footer_Education_DevicesforEducation_nav","id":"n2c3c1c1m1r1a2","sN":2,"aN":"c3c1c1m1r1a2"}'>Dispositivos para educación</a>
                            </li>
                            <li>
                                <a aria-label="Microsoft Teams para Educación Educación" class="c-uhff-link" href="https://www.microsoft.com/es-es/education/products/teams" data-m='{"cN":"Footer_Education_MicrosoftTeamsforEducation_nav","id":"n3c3c1c1m1r1a2","sN":3,"aN":"c3c1c1m1r1a2"}'>Microsoft Teams para Educación</a>
                            </li>
                            <li>
                                <a aria-label="Microsoft 365 Educación Educación" class="c-uhff-link" href="https://www.microsoft.com/es-es/education/buy-license/microsoft365" data-m='{"cN":"Footer_Education_Microsoft365Education_nav","id":"n4c3c1c1m1r1a2","sN":4,"aN":"c3c1c1m1r1a2"}'>Microsoft 365 Educación</a>
                            </li>
                            <li>
                                <a aria-label="Office Educación Educación" class="c-uhff-link" href="https://www.microsoft.com/es-es/education/products/office" data-m='{"cN":"Footer_Education_Office Education_nav","id":"n5c3c1c1m1r1a2","sN":5,"aN":"c3c1c1m1r1a2"}'>Office Educación</a>
                            </li>
                            <li>
                                <a aria-label="Formación y desarrollo de educadores Educación" class="c-uhff-link" href="https://education.microsoft.com/" data-m='{"cN":"Footer_Education_EducatorTrainingDevelopment_nav","id":"n6c3c1c1m1r1a2","sN":6,"aN":"c3c1c1m1r1a2"}'>Formación y desarrollo de educadores</a>
                            </li>
                            <li>
                                <a aria-label="Ofertas para estudiantes y padres Educación" class="c-uhff-link" href="https://www.microsoft.com/es-es/store/b/student" data-m='{"cN":"Footer_Education_DealsForStudentsandParents_nav","id":"n7c3c1c1m1r1a2","sN":7,"aN":"c3c1c1m1r1a2"}'>Ofertas para estudiantes y padres</a>
                            </li>
                            <li>
                                <a aria-label="Azure para estudiantes Educación" class="c-uhff-link" href="https://azure.microsoft.com/es-es/free/students/" data-m='{"cN":"Footer_Education_Azureforstudents_nav","id":"n8c3c1c1m1r1a2","sN":8,"aN":"c3c1c1m1r1a2"}'>Azure para estudiantes</a>
                            </li>

                        </ul>
                        
                    </div>
                </div>
                <div class="c-uhff-nav-row">
                    <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn4_cont","cT":"Container","id":"c4c1c1m1r1a2","sN":4,"aN":"c1c1m1r1a2"}'>
                        <div class="c-heading-4" role="heading" aria-level="2">Empresas
</div>
                        <ul class="c-list f-bare">
                            <li>
                                <a aria-label="Microsoft Cloud Empresas
" class="c-uhff-link" href="https://www.microsoft.com/es-es/microsoft-cloud" data-m='{"cN":"Footer_Business_Microsoft_Cloud_nav","id":"n1c4c1c1m1r1a2","sN":1,"aN":"c4c1c1m1r1a2"}'>Microsoft Cloud</a>
                            </li>
                            <li>
                                <a aria-label="Seguridad de Microsoft Empresas
" class="c-uhff-link" href="https://www.microsoft.com/es-es/security" data-m='{"cN":"Footer_Business_Microsoft Security_nav","id":"n2c4c1c1m1r1a2","sN":2,"aN":"c4c1c1m1r1a2"}'>Seguridad de Microsoft</a>
                            </li>
                            <li>
                                <a aria-label="Azure Empresas
" class="c-uhff-link" href="https://azure.microsoft.com/es-es/" data-m='{"cN":"Footer_DeveloperAndIT_MicrosoftAzure_nav","id":"n3c4c1c1m1r1a2","sN":3,"aN":"c4c1c1m1r1a2"}'>Azure</a>
                            </li>
                            <li>
                                <a aria-label="Dynamics 365 Empresas
" class="c-uhff-link" href="https://www.microsoft.com/es-es/dynamics-365" data-m='{"cN":"Footer_Business_MicrosoftDynamics365_nav","id":"n4c4c1c1m1r1a2","sN":4,"aN":"c4c1c1m1r1a2"}'>Dynamics 365</a>
                            </li>
                            <li>
                                <a aria-label="Microsoft 365 Empresas
" class="c-uhff-link" href="https://www.microsoft.com/es-es/microsoft-365/business/" data-m='{"cN":"Footer_Business_M365_nav","id":"n5c4c1c1m1r1a2","sN":5,"aN":"c4c1c1m1r1a2"}'>Microsoft 365</a>
                            </li>
                            <li>
                                <a aria-label="Copilot for Microsoft 365 Empresas
" class="c-uhff-link" href="https://www.microsoft.com/es-es/microsoft-365/business/copilot-for-microsoft-365" data-m='{"cN":"Footer_CopilotMicrosoft365_nav","id":"n6c4c1c1m1r1a2","sN":6,"aN":"c4c1c1m1r1a2"}'>Copilot for Microsoft 365</a>
                            </li>
                            <li>
                                <a aria-label="Microsoft Teams Empresas
" class="c-uhff-link" href="https://www.microsoft.com/es-es/microsoft-teams/group-chat-software" data-m='{"cN":"Footer_Business_Microsoft365_nav","id":"n7c4c1c1m1r1a2","sN":7,"aN":"c4c1c1m1r1a2"}'>Microsoft Teams</a>
                            </li>
                            <li>
                                <a aria-label="Pequeñas empresas Empresas
" class="c-uhff-link" href="https://www.microsoft.com/es-es/store/b/business" data-m='{"cN":"Footer_Business-SmallBusiness_nav","id":"n8c4c1c1m1r1a2","sN":8,"aN":"c4c1c1m1r1a2"}'>Pequeñas empresas</a>
                            </li>

                        </ul>
                        
                    </div>
                    <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn5_cont","cT":"Container","id":"c5c1c1m1r1a2","sN":5,"aN":"c1c1m1r1a2"}'>
                        <div class="c-heading-4" role="heading" aria-level="2">Desarrolladores y TI</div>
                        <ul class="c-list f-bare">
                            <li>
                                <a aria-label="Centro para desarrolladores Desarrolladores y TI" class="c-uhff-link" href="https://developer.microsoft.com/es-es/" data-m='{"cN":"Footer_DeveloperAndIT_DeveloperCenter_nav","id":"n1c5c1c1m1r1a2","sN":1,"aN":"c5c1c1m1r1a2"}'>Centro para desarrolladores</a>
                            </li>
                            <li>
                                <a aria-label="Documentación Desarrolladores y TI" class="c-uhff-link" href="https://learn.microsoft.com/docs/" data-m='{"cN":"Footer_DeveloperAndIT_Documentation_nav","id":"n2c5c1c1m1r1a2","sN":2,"aN":"c5c1c1m1r1a2"}'>Documentación</a>
                            </li>
                            <li>
                                <a aria-label="Microsoft Learn Desarrolladores y TI" class="c-uhff-link" href="https://learn.microsoft.com/" data-m='{"cN":"Footer_DeveloperAndIT_MicrosoftLearn_nav","id":"n3c5c1c1m1r1a2","sN":3,"aN":"c5c1c1m1r1a2"}'>Microsoft Learn</a>
                            </li>
                            <li>
                                <a aria-label="Microsoft Tech Community Desarrolladores y TI" class="c-uhff-link" href="https://techcommunity.microsoft.com/" data-m='{"cN":"Footer_DeveloperAndIT_MicrosoftTechCommunity_nav","id":"n4c5c1c1m1r1a2","sN":4,"aN":"c5c1c1m1r1a2"}'>Microsoft Tech Community</a>
                            </li>
                            <li>
                                <a aria-label="Azure Marketplace Desarrolladores y TI" class="c-uhff-link" href="https://azuremarketplace.microsoft.com/es-es/" data-m='{"cN":"Footer_DeveloperAndIT_AzureMarketplace_nav","id":"n5c5c1c1m1r1a2","sN":5,"aN":"c5c1c1m1r1a2"}'>Azure Marketplace</a>
                            </li>
                            <li>
                                <a aria-label="AppSource Desarrolladores y TI" class="c-uhff-link" href="https://appsource.microsoft.com/es-es/" data-m='{"cN":"Footer_DeveloperAndIT_AppSource_nav","id":"n6c5c1c1m1r1a2","sN":6,"aN":"c5c1c1m1r1a2"}'>AppSource</a>
                            </li>
                            <li>
                                <a aria-label="Microsoft Power Platform Desarrolladores y TI" class="c-uhff-link" href="https://www.microsoft.com/es-es/power-platform" data-m='{"cN":"Footer_DeveloperAndIT_Power Platform_nav","id":"n7c5c1c1m1r1a2","sN":7,"aN":"c5c1c1m1r1a2"}'>Microsoft Power Platform</a>
                            </li>
                            <li>
                                <a aria-label="Visual Studio Desarrolladores y TI" class="c-uhff-link" href="https://visualstudio.microsoft.com/" data-m='{"cN":"Footer_DeveloperAndIT_MicrosoftVisualStudio_nav","id":"n8c5c1c1m1r1a2","sN":8,"aN":"c5c1c1m1r1a2"}'>Visual Studio</a>
                            </li>

                        </ul>
                        
                    </div>
                    <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn6_cont","cT":"Container","id":"c6c1c1m1r1a2","sN":6,"aN":"c1c1m1r1a2"}'>
                        <div class="c-heading-4" role="heading" aria-level="2">Compañía
</div>
                        <ul class="c-list f-bare">
                            <li>
                                <a aria-label="Oportunidades de empleo Compañía
" class="c-uhff-link" href="https://careers.microsoft.com/" data-m='{"cN":"Footer_Company_Careers_nav","id":"n1c6c1c1m1r1a2","sN":1,"aN":"c6c1c1m1r1a2"}'>Oportunidades de empleo</a>
                            </li>
                            <li>
                                <a aria-label="Acerca de Microsoft Compañía
" class="c-uhff-link" href="https://www.microsoft.com/es-es/about" data-m='{"cN":"Footer_Company_AboutMicrosoft_nav","id":"n2c6c1c1m1r1a2","sN":2,"aN":"c6c1c1m1r1a2"}'>Acerca de Microsoft</a>
                            </li>
                            <li>
                                <a aria-label="Noticias de la compañía Compañía
" class="c-uhff-link" href="https://news.microsoft.com/es-es" data-m='{"cN":"Footer_Company_CompanyNews_nav","id":"n3c6c1c1m1r1a2","sN":3,"aN":"c6c1c1m1r1a2"}'>Noticias de la compañía</a>
                            </li>
                            <li>
                                <a aria-label="Privacidad en Microsoft Compañía
" class="c-uhff-link" href="https://privacy.microsoft.com/es-es" data-m='{"cN":"Footer_Company_PrivacyAtMicrosoft_nav","id":"n4c6c1c1m1r1a2","sN":4,"aN":"c6c1c1m1r1a2"}'>Privacidad en Microsoft</a>
                            </li>
                            <li>
                                <a aria-label="Inversores Compañía
" class="c-uhff-link" href="https://www.microsoft.com/investor/default.aspx" data-m='{"cN":"Footer_Company_Investors_nav","id":"n5c6c1c1m1r1a2","sN":5,"aN":"c6c1c1m1r1a2"}'>Inversores</a>
                            </li>
                            <li>
                                <a aria-label="Sostenibilidad  Compañía
" class="c-uhff-link" href="https://www.microsoft.com/es-es/sustainability/" data-m='{"cN":"Footer_Company_Sustainability_nav","id":"n6c6c1c1m1r1a2","sN":6,"aN":"c6c1c1m1r1a2"}'>Sostenibilidad </a>
                            </li>

                        </ul>
                        
                    </div>
                </div>
        </nav>
    <div class="c-uhff-base">
                <a id="locale-picker-link" aria-label="Selector de idiomas del contenido. Actualmente definido en Español (España, alfabetización internacional)" class="c-uhff-link c-uhff-lang-selector c-glyph glyph-world" href="http://www.microsoft.com/en-us/locale.aspx" data-m='{"cN":"locale_picker(ES)_nav","id":"n7c1c1m1r1a2","sN":7,"aN":"c1c1m1r1a2"}'>Español (España, alfabetización internacional)</a>

            <a data-m='{"id":"n8c1c1m1r1a2","sN":8,"aN":"c1c1m1r1a2"}' href="https://aka.ms/yourcaliforniaprivacychoices" class='c-uhff-link c-uhff-ccpa'>
        <svg role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 14" xml:space="preserve" height="16" width="43">
            <title>Icono de exclusión de opciones de privacidad
            
            
            
            
        
        Tus opciones de privacidad
    

        
            
        Privacidad de la salud del consumidor