Also, just a note about peer-to-peer; there’s a reason it isn’t more adopted — It sucks. Peers go offline unpredictably, well performing peers get supernoded and then owner of that connection gets frustrated as their connection becomes saturated. There’s a real life model of what you’re suggesting — Skype — And it’s horrible to use. Routes are unpredictable, one second a route might be okay, the next second, a node on your route starts uploading a file, and then your connection is quenched; it has to disconnect and reconnect to higher quality peer. This takes time; packets will drop. Which isn’t really acceptable on real time streaming.
Say you’re watching the end of season cliffhanger and your streaming falters and stutters and rebuffers because your supernode has jumped offline with no response, and you have to switch to CDN or worse.. another peer.. Connection negotiation might take 2 seconds, and then another rebuffer 2–3 seconds of video and the as the director would say, that moment’s gone. That’s your grand finale ruined.
Source: Work in WebRTC for live television, have previously written a Peer-to-Peer Shoutcast solution.