Определить idr-пакет в h264 через rtp - PullRequest
0 голосов
/ 18 июня 2019

Я пытался идентифицировать пакет idr в c от h264 через rtp.

Я следую этому ответу , но я не понимаю.

Нужно ли искать 00 00 01 или 00 00 00 01, а чем 0x65 означает начальный код idr?

Потому что я видел таблицу всех определенных NALU

Имя типа

0 [unspecified]

1 Coded slice
2 Data Partition A

3 Data Partition B
4 Data Partition C

5 IDR (Instantaneous Decoding Refresh) Picture
6 SEI (Supplemental Enhancement Information)
7 SPS (Sequence Parameter Set)
8 PPS (Picture Parameter Set)
9 Access Unit Delimiter    10 EoS (End of Sequence)    11 EoS (End of Stream)    12 Filter Data 13-23 [extended] 24-31 [unspecified]

И этот код, который ищет другие условия (type = 5 и более)

public static bool 
isH264iFrame(byte[] paket)
{
    int RTPHeaderBytes = 0;

    int fragment_type = paket[RTPHeaderBytes + 0] & 0x1F;
    int nal_type = paket[RTPHeaderBytes + 1] & 0x1F;
    int start_bit = paket[RTPHeaderBytes + 1] & 0x80;

    if (((fragment_type == 28 || fragment_type == 29) && nal_type == 5 && start_bit == 128) || fragment_type == 5)
    {
        return true;
    }

    return false;
}

Так как же определить пакет idr?

1 Ответ

0 голосов
/ 18 июня 2019

Код, который вы разместили, не охватывает все случаи.Вы должны начать с чтения rfc в формате полезной нагрузки RTP для H.264.В зависимости от пакетирования RTP IDR может приходить в различных типах пакетов RTP:

  • Пакет с единым внутренним блоком
  • Пакет STAP-A / STAP-B
  • Пакет MTAP
  • Пакет FU-A / FU-B.

Код, который вы разместили, фактически обрабатывает FU-A / FU-B (с помощью проверки (fragment_type == 28 || fragment_type == 29) && nal_type == 5 && start_bit == 128)) и случай с единичным нулем(через проверку fragment_type == 5).RTP фактически не использует префиксы 00 00 00 01 и 00 00 01, которые используются в формате Приложения B.Таким образом, вам просто нужно иметь возможность определить тип пакета и тип блока NAL из заголовка RTP.Как это сделать, должно быть понятно после прочтения RFC.

...