VP8 Temporal Layers

We want to use the TX1/TX2 VP8 encoder in a WebRTC application. We’re trying to use this codec’s temporal scaling capabilities so that the data rate can be dynamically adjusted to the bandwidth. I was wondering if the TX1/TX2 VP8 encoder supports the concept of temporal layers. If so, which API can I use to tune this parameters? I believe I can use OpenMax to achieve this, but I don’t know if your implementation supports it. I also looked at V4L2VEA in the Multimedia API but didn’t anything quite obvious.

I’m aware of the temporal-tradeoff GStreamer property in the encoder, but this is not quite what I’m looking for. I need to send the stream at full rate, and let the SFU forward the stream at different rates to different clients.

I appreciate any lights on the topic, or a confirmation that this is not supported.

Thanks!

Hi Michael,
Please give more about the temporal layers. Temporal-tradeoff is to drop frames periodically but it does not meet your expectation. So you want the VP8 encoder keeps the frame rate and bitrate can be changed at runtime?

Hi DaneLLL,

I’m sorry I interrupted from the side. (And I’m using differnet codec: H.264)
I am lacking in understanding about this function/configuration.

What kind of behavior does setting of temporal trade-off level mean?
(Except for V4L2_ENC_TEMPORAL_TRADEOFF_LEVEL_DROPNONE)

(1) Always to drop frames (same as changing frame rate) ?
(2) In some certain conditions, to drop frames ?

  • When the bit rate is insufficient
  • When the delay increases
  • When the complexity of the image increases
  • When the number of input images exceeds the frame rate setting — setFrameRate(num, den)

Hi mynaemi,
Please refer to temporal-tradeoff and rate control mode in user guide:

The bitrate can be runtime changed. However, for some cases you are not able to get lower bitrate:
https://devtalk.nvidia.com/default/topic/973295/jetson-tx1/constant-bitrate-help/post/5011599/#5011599

you can try to drop frames.