Creating Filters with Media Services .NET SDK
Starting with 2.17 release, Media Services enables you to define filters for your assets. These filters are server-side rules that allow your customers to choose to do things like: playback only a section of a video (instead of playing the whole video), or specify only a subset of audio and video renditions that your customer's device can handle (instead of all the renditions that are associated with the asset). This filtering of your assets is achieved through Dynamic Manifests that are created upon your customer's request to stream a video based on specified filter(s).
For more detailed information related to filters and Dynamic Manifest, see Dynamic manifests overview.
This article shows how to use Media Services .NET SDK to create, update, and delete filters.
Note if you update a filter, it can take up to two minutes for streaming endpoint to refresh the rules. If the content was served using this filter (and cached in proxies and CDN caches), updating this filter can result in player failures. Always clear the cache after updating the filter. If this option is not possible, consider using a different filter.
Types used to create filters
The following types are used when creating filters:
- IStreamingFilter. This type is based on the following REST API Filter
- IStreamingAssetFilter. This type is based on the following REST API AssetFilter
- PresentationTimeRange. This type is based on the following REST API PresentationTimeRange
- FilterTrackSelectStatement and IFilterTrackPropertyCondition. These types are based on the following REST APIs FilterTrackSelect and FilterTrackPropertyCondition
Create/Update/Read/Delete global filters
The following code shows how to use .NET to create, update, read, and delete asset filters.
string filterName = "GlobalFilter_" + Guid.NewGuid().ToString();
List<FilterTrackSelectStatement> filterTrackSelectStatements = new List<FilterTrackSelectStatement>();
FilterTrackSelectStatement filterTrackSelectStatement = new FilterTrackSelectStatement();
filterTrackSelectStatement.PropertyConditions = new List<IFilterTrackPropertyCondition>();
filterTrackSelectStatement.PropertyConditions.Add(new FilterTrackNameCondition("Track Name", FilterTrackCompareOperator.NotEqual));
filterTrackSelectStatement.PropertyConditions.Add(new FilterTrackBitrateRangeCondition(new FilterTrackBitrateRange(0, 1), FilterTrackCompareOperator.NotEqual));
filterTrackSelectStatement.PropertyConditions.Add(new FilterTrackTypeCondition(FilterTrackType.Audio, FilterTrackCompareOperator.NotEqual));
filterTrackSelectStatements.Add(filterTrackSelectStatement);
// Create
IStreamingFilter filter = _context.Filters.Create(filterName, new PresentationTimeRange(), filterTrackSelectStatements);
// Update
filter.PresentationTimeRange = new PresentationTimeRange(timescale: 500);
filter.Update();
// Read
var filterUpdated = _context.Filters.FirstOrDefault();
Console.WriteLine(filterUpdated.Name);
// Delete
filter.Delete();
Create/Update/Read/Delete asset filters
The following code shows how to use .NET to create, update, read, and delete asset filters.
string assetName = "AssetFilter_" + Guid.NewGuid().ToString();
var asset = _context.Assets.Create(assetName, AssetCreationOptions.None);
string filterName = "AssetFilter_" + Guid.NewGuid().ToString();
// Create
IStreamingAssetFilter filter = asset.AssetFilters.Create(filterName,
new PresentationTimeRange(),
new List<FilterTrackSelectStatement>());
// Update
filter.PresentationTimeRange =
new PresentationTimeRange(start: 6000000000, end: 72000000000);
filter.Update();
// Read
asset = _context.Assets.Where(c => c.Id == asset.Id).FirstOrDefault();
var filterUpdated = asset.AssetFilters.FirstOrDefault();
Console.WriteLine(filterUpdated.Name);
// Delete
filterUpdated.Delete();
Build streaming URLs that use filters
For information on how to publish and deliver your assets, see Delivering Content to Customers Overview.
The following examples show how to add filters to your streaming URLs.
MPEG DASH
http://testendpoint-testaccount.streaming.mediaservices.windows.net/fecebb23-46f6-490d-8b70-203e86b0df58/BigBuckBunny.ism/Manifest(format=mpd-time-csf, filter=MyFilter)
Apple HTTP Live Streaming (HLS) V4
http://testendpoint-testaccount.streaming.mediaservices.windows.net/fecebb23-46f6-490d-8b70-203e86b0df58/BigBuckBunny.ism/Manifest(format=m3u8-aapl, filter=MyFilter)
Apple HTTP Live Streaming (HLS) V3
http://testendpoint-testaccount.streaming.mediaservices.windows.net/fecebb23-46f6-490d-8b70-203e86b0df58/BigBuckBunny.ism/Manifest(format=m3u8-aapl-v3, filter=MyFilter)
Smooth Streaming
http://testendpoint-testaccount.streaming.mediaservices.windows.net/fecebb23-46f6-490d-8b70-203e86b0df58/BigBuckBunny.ism/Manifest(filter=MyFilter)