I think a PCQ with a limit of the total bandwidth you want to allocate to your subscribers, and no per-user bandwidth limit might be the way to go. Basically, you’re letting users use all of the bandwidth if it’s available, but forcing them to share it fairly if more people are using it. This leads to a better user experience.
Another option would be to use bursting on the sub queues - allow a fast burst for about 30 seconds and then limit to slower speeds. This way, web surfing is fast and a user will feel that your service is speedy, but then they won’t be able to pull all of your resources with lots of streaming and downloading.
Use the dst-address/32 as the download selector, and the src-address/32 as the upload selector.