Currently the behavior of the HLS packetizer is that it will append any query parameters passed on the playlist.m3u8 to the returned chunklist.m3u8 URLs as well as passing any query string parameters on the chunklist.m3u8 to the returned media.ts URLs. For example, given a URL like "
http://example.com/myapp/ngrp:mystream_all/playlist.m3u8?foo=bar" the playlist returned will have chunklists like "chunklist_b264000.m3u8?foo=bar". Requesting this chunklist will then return chunks like "media_b264000_1.ts?foo=bar" etc.
We are using CDN caching for our HLS delivery (which ignores query parameters for caching purposes), and because of this behavior incidental query params that get passed by clients end up polluting the cached chunklists, which is causing problems with other clients that don't expect the chunk URLs to have parameters that keep changing.
I briefly attempted to call IHTTPStreamerSession.setQueryStr("") in onHTTPSessionCreate(), but this didn't seem to have any affect on the generated chunk URLs. Is there any way to have query parameters not propagated into returned .m3u8 contents?
We have workaround different ways when trying to do this, as I've been feeding CDN with Wowza for over years even before Wowza had the option of HTTP Origin. Unfortunately, HTTP Origin doesn't work when you need query strings
you can either ask your CDN to remove the query string when passed to your Origin and ignore the queries in the requests. I've done this with 2 CDN which accepted to do so.
Other option I also did was to create our own responder to CDN, which run on a different port. For instace, port 8080 ... When CDN calls Wowza on port 8080, we retrieve the HLS manifest and chunks from 1935, and stripped off everything we don't need to go out to CDN