На основе приведенных выше комментариев приведен простой фрагмент кода, который вы можете использовать:
ByteBuffer bb = ... // Byte buffer with your frame or h.264 NAL stream
int marker = 0xffffffff;
while (bb.hasRemaining()) {
int b = bb.get() & 0xff;
if (marker == 1) {
if ((b & 0x1f) == 5)
System.out.println("IDR slice!! " + (bb.position() - 1));
}
marker = (marker << 8) | b;
}
Если вы просто хотите узнать, является ли данный кадр фрагментом IDR (ключевой кадр), вы можете использовать H264Utils.idrSlice из JCodec (http://jcodec.org):
ByteBuffer bb = ... // Byte buffer with your frame or h.264 NAL stream
if(H264Utils.idrSlice(bb))
System.out.println("IDR slice!!");
Причина, по которой вы хотите использовать библиотеку, заключается в том, что фрагмент IDAL NAL не является единственным фрагментом, переносимым в закодированном кадре, поэтомунеобходимо пройти последовательность SPS, PPS и SEI, чтобы, наконец, добраться до вашего IDR-среза.