Определить ключевой кадр VP8 (I-кадр) в потоке RTP

Мне нужно обнаружить ключевой кадр VP8 в пакете RTP. Я знаю, как удалить заголовок RTP и получить полезную нагрузку.

У него есть конкретная подпись / заголовок?

1 ответ

Существует RFC для VP8, который объясняет, как определить, является ли кадр ключевым кадром. Смотрите раздел 19.1.

| Frame Tag                                         | Type  |
| ------------------------------------------------- | ----- |
| frame_tag                                         | f(24) |
| if (key_frame) {                                  |       |
|     start_code                                    | f(24) |
|     horizontal_size_code                          | f(16) |
|     vertical_size_code                            | f(16) |
| }                                                 |       |

The 3-byte frame tag can be parsed as follows:

---- Begin code block --------------------------------------

unsigned char *c = pbi->source;
unsigned int tmp;

tmp = (c[2] << 16) | (c[1] << 8) | c[0];

key_frame = tmp & 0x1;
version = (tmp >> 1) & 0x7;
show_frame = (tmp >> 4) & 0x1;
first_part_size = (tmp >> 5) & 0x7FFFF;

---- End code block ----------------------------------------
Другие вопросы по тегам