-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Open
Labels
Milestone
Description
Details
- In C++ we currently have a parent abstract
Consumer
class and thenSimpleConsumer
,SimulcastConsumer
,SvcConsumer
andPipeConsumer
that inherit fromConsumer
. - Those classes are intended to handle different producing scenarios and associated codecs.
- For example a video transmission could use VP8 in single stream mode so it would use
SingleConsumer
. - Or with N streams in simulcast mode so it would use
SimulcastConsumer
.
Problems
- Those classes do not represent real scenarios.
- For example, a producer may perfectly use VP8 with a single stream (so this is not simulcast) and temporal layers. We currently manage it in
SimulcastConsumer
since it's the one ready for VP8 codec, but this is SVC. - VP9 is supposed to be SVC, however in libwebrtc now it's possible to produce real simulcast using VP9 (probably also with temporal layers): https://groups.google.com/g/discuss-webrtc/c/-QQ3pxrl-fw
Proposal
- Have a single
Consumer
class ready to deal with all use cases and all supported codecs. - This would also help in the future when we implement the ability to switch from a producer to another in the same consumer.
- We should also reconsider those
producer.type
andconsumer.type
("single", "simulcast", "svc" and "pipe") since they don't make any sense. However this would introduce breaking changes. Let's see how to do it.