Cloudflare HLS Manifest Missing Sound

Hi all,

We’re querying our manifest for videos uploaded to Cloudflare for HLS streaming to select a video with the highest resolution. We’re noticing the manifest returns URLs that do not output any audio, but are indeed the correct variations in resolution. Here’s an example:

Base video:
https://customer-kk156n1nd3qa8mzi.cloudflarestream.com/bba9304c949ac6175663ff9ad119fdf1/manifest/video.m3u8

Manifest URL: https://customer-kk156n1nd3qa8mzi.cloudflarestream.com/bba9304c949ac6175663ff9ad119fdf1/manifest/video.m3u8

Curl response from Manifest:

#EXTM3U
#EXT-X-VERSION:6
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="group_audio",NAME="original",LANGUAGE="en-0bc0c377",DEFAULT=YES,AUTOSELECT=YES,URI="stream_t0bc0c377624e5aabed06b95e85e56d95_r257720400.m3u8?vodotfe=true"
#EXT-X-STREAM-INF:RESOLUTION=608x1080,CODECS="avc1.4d401f,mp4a.40.2",BANDWIDTH=1190895,AVERAGE-BANDWIDTH=906341,FRAME-RATE=23.976,AUDIO="group_audio"
stream_tb46fe67aa05459b5c508e69bbcc70ea0_r257720612.m3u8?vodotfe=true
#EXT-X-STREAM-INF:RESOLUTION=406x720,CODECS="avc1.4d401e,mp4a.40.2",BANDWIDTH=676449,AVERAGE-BANDWIDTH=513310,FRAME-RATE=23.976,AUDIO="group_audio"
stream_tb46fe67aa05459b5c508e69bbcc70ea0_r257720383.m3u8?vodotfe=true
#EXT-X-STREAM-INF:RESOLUTION=270x480,CODECS="avc1.4d4015,mp4a.40.2",BANDWIDTH=418764,AVERAGE-BANDWIDTH=315981,FRAME-RATE=23.976,AUDIO="group_audio"
stream_tb46fe67aa05459b5c508e69bbcc70ea0_r257720371.m3u8?vodotfe=true
#EXT-X-STREAM-INF:RESOLUTION=202x360,CODECS="avc1.4d4014,mp4a.40.2",BANDWIDTH=334274,AVERAGE-BANDWIDTH=252709,FRAME-RATE=23.976,AUDIO="group_audio"
stream_tb46fe67aa05459b5c508e69bbcc70ea0_r257720340.m3u8?vodotfe=true
#EXT-X-STREAM-INF:RESOLUTION=136x240,CODECS="avc1.42c014,mp4a.40.2",BANDWIDTH=280684,AVERAGE-BANDWIDTH=211316,FRAME-RATE=23.976,AUDIO="group_audio"
stream_tb46fe67aa05459b5c508e69bbcc70ea0_r257720368.m3u8?vodotfe=true

[MISSING AUDIO!!] Constructed URI from manifest for 211316 bandwith: https://customer-kk156n1nd3qa8mzi.cloudflarestream.com/bba9304c949ac6175663ff9ad119fdf1/manifest/stream_tb46fe67aa05459b5c508e69bbcc70ea0_r257720368.m3u8?vodotfe=true

As you can see testing on a help site (like this one, https://livepush.io/hls-player/index.html) The constructed URI is missing audio, but is matching the right resolution for the bandwidth. Please advise on what to do.

For anyone coming to this post with the same issue, I solved this by using the query param clientBandwidthHint=12

1080p videos tend to be around 8-12MBS.

Simply add the following to any HLS manifest url like so https://customer-kk156n1nd3qa8mzi.cloudflarestream.com/bba9304c949ac6175663ff9ad119fdf1/manifest/video.m3u8?clientBandwidthHint=12

Hi there,

The video and audio tracks are demuxed! At the top of the manifest, you’ll see the audio track info:
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="group_audio",NAME="original",LANGUAGE="en-0bc0c377",DEFAULT=YES,AUTOSELECT=YES,URI="stream_t0bc0c377624e5aabed06b95e85e56d95_r257720400.m3u8?vodotfe=true"

Note the URI is different from the one you constructed to fetch the information about the 240 video segments. To fetch the audio segments, please use https://customer-kk156n1nd3qa8mzi.cloudflarestream.com/bba9304c949ac6175663ff9ad119fdf1/manifest/stream_t0bc0c377624e5aabed06b95e85e56d95_r257720400.m3u8?vodotfe=true.

Generally players make a separate request for the audio segments (if there are multiple audio tracks, then it selects the option with DEFAULT=YES) and video segments (by using client bandwidth to match the most appropriate resolution).

I hope this helps!