• 4 min read

Azure Media Services – Dynamic Manifest Composition support and HLS output additional features

We are excited to announce new capabilities and features in Azure Media Services. This release includes combining multiple asset filter support in addition to a number of new features.

We are excited to announce new capabilities and features in Azure Media Services. This release includes combining multiple asset filter support in addition to a number of new features. In detail, we are adding the following:

Dynamic Manifest (asset filters) composition

The first version of Dynamic Manifest only supports using one filter at a time. This works great, but can create management headaches in complex scenarios. For example, let’s assume you want to filter your video qualities for mobile devices. To achieve this you can create a global filter suitable for device profiles and remove the unwanted qualities. Global filters can be used for all your assets under the same media services account without any further association.

Next, let’s assume you want to trim the start and end time of the asset. To do this you need to create local filter and set the start/end time. At the end you have two different filters and because you can only use one filter at a time you cannot combine them. If you want to filter video qualities and also set start/end time, you need to define quality filtering rules and also start/end time in the same local filter which will require additional steps and repeating of the same rules.

With filter composition support you don’t need to define the same rules again. You can combine multiple filters and Azure Media Services will process the intersection of the filters. You can combine up to three rules.

To execute on composition, you need to set the filter names to the manifest/playlist URL with semicolon delimited.

Let’s assume you have a filter named “MyMobileDevice” that filters qualities and you have another named “MyStartTime” to set a specific start time.

You can combine them as (filter=MyMobileDevice;MyStartTime)

Please refer to my previous Azure blog post, Customized Renditions and Asset trimming with Dynamic Manifest, for additional information on filters.

How do multiple filters get processed?

Filter composition works in intersection. When you use multiple filters the output is an intersection of multiple filters. For example, let’s assume one of your filters selects qualities q1 and q2 for video and a1 for audio, your other filter selects q3 for video. In this case, the output manifest will include q1,q2 and q3 for video and a1 for audio.

Remove HLS audio-only track

By default Azure Media Services outputs an audio-only track for HLS playlist. This is required for passing App Store certification for cellular networks. When there is an audio-only track and a client hits a bandwidth issue, then the client can switch to audio-only mode and can keep streaming without video. This helps keep the stream going, but sometimes provides an unwanted experience. Instead of a black screen with audio, you might prefer player buffering and resume playback with video.

You can use new the URL parameter “audio-only=false” to remove the audio-only track from the playlist.

Without parameter ((format=m3u8-aapl-v3) you get the audio-only track as highlighted.

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:BANDWIDTH=523232,RESOLUTION=320×132,CODECS=”avc1.4d400d,mp4a.40.2″
QualityLevels(400000)/Manifest(video,format=m3u8-aapl-v3,audiotrack=audio)
#EXT-X-STREAM-INF:BANDWIDTH=778732,RESOLUTION=640×268,CODECS=”avc1.4d4015,mp4a.40.2″
QualityLevels(650000)/Manifest(video,format=m3u8-aapl-v3,audiotrack=audio)
#EXT-X-STREAM-INF:BANDWIDTH=1136432,RESOLUTION=640×268,CODECS=”avc1.4d401e,mp4a.40.2″
QualityLevels(1000000)/Manifest(video,format=m3u8-aapl-v3,audiotrack=audio)
#EXT-X-STREAM-INF:BANDWIDTH=1647432,RESOLUTION=960×400,CODECS=”avc1.4d401e,mp4a.40.2″
QualityLevels(1500000)/Manifest(video,format=m3u8-aapl-v3,audiotrack=audio)
#EXT-X-STREAM-INF:BANDWIDTH=2413932,RESOLUTION=960×400,CODECS=”avc1.4d401e,mp4a.40.2″
QualityLevels(2250000)/Manifest(video,format=m3u8-aapl-v3,audiotrack=audio)
#EXT-X-STREAM-INF:BANDWIDTH=3589232,RESOLUTION=1280×532,CODECS=”avc1.4d4020,mp4a.40.2″
QualityLevels(3400000)/Manifest(video,format=m3u8-aapl-v3,audiotrack=audio)
#EXT-X-STREAM-INF:BANDWIDTH=106272,CODECS=”mp4a.40.2″
QualityLevels(96000)/Manifest(audio,format=m3u8-aapl-v3)

With “audio-only=false” ((format=m3u8-aapl-v3,audio-only=false) you don’t get the audio-only track.

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:BANDWIDTH=523232,RESOLUTION=320x132,CODECS="avc1.4d400d,mp4a.40.2"
QualityLevels(400000)/Manifest(video,format=m3u8-aapl-v3,audiotrack=audio)
#EXT-X-STREAM-INF:BANDWIDTH=778732,RESOLUTION=640x268,CODECS="avc1.4d4015,mp4a.40.2"
QualityLevels(650000)/Manifest(video,format=m3u8-aapl-v3,audiotrack=audio)
#EXT-X-STREAM-INF:BANDWIDTH=1136432,RESOLUTION=640x268,CODECS="avc1.4d401e,mp4a.40.2"
QualityLevels(1000000)/Manifest(video,format=m3u8-aapl-v3,audiotrack=audio)
#EXT-X-STREAM-INF:BANDWIDTH=1647432,RESOLUTION=960x400,CODECS="avc1.4d401e,mp4a.40.2"
QualityLevels(1500000)/Manifest(video,format=m3u8-aapl-v3,audiotrack=audio)
#EXT-X-STREAM-INF:BANDWIDTH=2413932,RESOLUTION=960x400,CODECS="avc1.4d401e,mp4a.40.2"
QualityLevels(2250000)/Manifest(video,format=m3u8-aapl-v3,audiotrack=audio)
#EXT-X-STREAM-INF:BANDWIDTH=3589232,RESOLUTION=1280x532,CODECS="avc1.4d4020,mp4a.40.2"
QualityLevels(3400000)/Manifest(video,format=m3u8-aapl-v3,audiotrack=audio)

HLS I-frame track support

To provide better Fast Forward and Reverse Playback support we added iFrame support to Azure Media Services HLS playlist output. You will be getting iFrame support with HLS v4 playlist by default. Since HLS v3 doesn’t support iFrame, v3 output will not include iFrames.

With this new feature you will be getting “EXT-X-I-FRAME-STREAM-INF” tags.

For example, when you requested HLS v4 playlist, the playlist will include “#EXT-X-I-FRAME-STREAM-INF:” as highlighted.

#EXTM3U
#EXT-X-VERSION:4
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="audio",DEFAULT=YES,URI="QualityLevels(96000)/Manifest(audio,format=m3u8-aapl)"
#EXT-X-STREAM-INF:BANDWIDTH=523232,RESOLUTION=320x132,CODECS="avc1.4d400d,mp4a.40.2",AUDIO="audio"
QualityLevels(400000)/Manifest(video,format=m3u8-aapl)
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=523232,RESOLUTION=320x132,CODECS="avc1.4d400d",URI="QualityLevels(400000)/Manifest(video,format=m3u8-aapl,type=keyframes)"
#EXT-X-STREAM-INF:BANDWIDTH=778732,RESOLUTION=640x268,CODECS="avc1.4d4015,mp4a.40.2",AUDIO="audio"
QualityLevels(650000)/Manifest(video,format=m3u8-aapl)
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=778732,RESOLUTION=640x268,CODECS="avc1.4d4015",URI="QualityLevels(650000)/Manifest(video,format=m3u8-aapl,type=keyframes)"
#EXT-X-STREAM-INF:BANDWIDTH=1136432,RESOLUTION=640x268,CODECS="avc1.4d401e,mp4a.40.2",AUDIO="audio"
QualityLevels(1000000)/Manifest(video,format=m3u8-aapl)
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=1136432,RESOLUTION=640x268,CODECS="avc1.4d401e",URI="QualityLevels(1000000)/Manifest(video,format=m3u8-aapl,type=keyframes)"
#EXT-X-STREAM-INF:BANDWIDTH=1647432,RESOLUTION=960x400,CODECS="avc1.4d401e,mp4a.40.2",AUDIO="audio"
QualityLevels(1500000)/Manifest(video,format=m3u8-aapl)
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=1647432,RESOLUTION=960x400,CODECS="avc1.4d401e",URI="QualityLevels(1500000)/Manifest(video,format=m3u8-aapl,type=keyframes)"
#EXT-X-STREAM-INF:BANDWIDTH=2413932,RESOLUTION=960x400,CODECS="avc1.4d401e,mp4a.40.2",AUDIO="audio"
QualityLevels(2250000)/Manifest(video,format=m3u8-aapl)
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=2413932,RESOLUTION=960x400,CODECS="avc1.4d401e",URI="QualityLevels(2250000)/Manifest(video,format=m3u8-aapl,type=keyframes)"
#EXT-X-STREAM-INF:BANDWIDTH=3589232,RESOLUTION=1280x532,CODECS="avc1.4d4020,mp4a.40.2",AUDIO="audio"
QualityLevels(3400000)/Manifest(video,format=m3u8-aapl)
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=3589232,RESOLUTION=1280x532,CODECS="avc1.4d4020",URI="QualityLevels(3400000)/Manifest(video,format=m3u8-aapl,type=keyframes)"
#EXT-X-STREAM-INF:BANDWIDTH=106272,CODECS="mp4a.40.2",AUDIO="audio"
QualityLevels(96000)/Manifest(audio,format=m3u8-aapl)

 

We hope you find these features useful. As always, please let us know if you have any further questions either via forum or comments on this post.

Thanks!

Azure Media Services Team