I'm not familiar with Opus. Can someone tell me if it is able to dynamically adapt quality based on available bandwidth? If it loses packets in the stream, do we get a 'skip' in the audio or does the quality go down?
> Can someone tell me if it is able to dynamically adapt quality based on available bandwidth?
Depends on what you mean. It is a variable bitrate codec, and the encoder can easily adjust the bitrate of the stream.
But you would need a way to discover the available bandwidth and communicate it to the encoder - Opus is just a codec, not a container or streaming protocol.
> If it loses packets in the stream, do we get a 'skip' in the audio or does the quality go down?
The standard doesn't mandate a specific way to deal with packet loss, but the reference implementation tries to handle this gracefully. [1]
Some properties of the encoding facilitate this: for instance, packets can optionally include a reduced-bitrate encoding of the previous packet to provide redundancy. [2]
Yes, it's absolutely made for that, which is one of the reasons it has extreme bitrate and frame size agility. Though the decoder doesn't have a back channel to the encoder as part of the format (e.g. a duplex pair is not at all coupled by the codec and could have entirely different settings). So if you want to do rate adaptation the application will have to take care of telling the encoder that the decoder is struggling/losing frames/etc.
The codec also includes a pretty good packet loss concealer integrated, and can also use forward error correction to reduce the impact of loss.