src/main/java/org/jcodec/codecs/h264/H264Utils.java
public static final ByteBuffer gotoNALUnit(ByteBuffer buf) {

        if (!buf.hasRemaining())
            return null;

        int from = buf.position();
        ByteBuffer result = buf.slice();
        result.order(ByteOrder.BIG_ENDIAN);

        int val = 0xffffffff;
        while (buf.hasRemaining()) {
            val <<= 8;
            val |= (buf.get() & 0xff);
            if ((val & 0xffffff) == 1) {
                buf.position(buf.position() - (val == 1 ? 4 : 3));
                result.limit(buf.position() - from);
                break;
            }
        }
        return result;
    }
public static final ByteBuffer gotoNALUnit(ByteBuffer buf) {

        if (!buf.hasRemaining())
            return null;

        int from = buf.position();
        ByteBuffer result = buf.slice();
        result.order(ByteOrder.BIG_ENDIAN);

        int val = 0xffffffff;
        while (buf.hasRemaining()) {
            val <<= 8;
            val |= (buf.get() & 0xff);
            if ((val & 0xffffff) == 1) {
                buf.position(buf.position() - (val == 1 ? 4 : 3));
                result.limit(buf.position() - from);
                break;
            }
        }
        return result;
    }
public static final ByteBuffer gotoNALUnit ( ByteBuffer buf ) { if ( ! buf . hasRemaining ( ) ) return null ; int from = buf . position ( ) ; ByteBuffer result = buf . slice ( ) ; result . order ( ByteOrder . BIG_ENDIAN ) ; int val = 0xffffffff ; while ( buf . hasRemaining ( ) ) { val <<= 8 ; val |= ( buf . get ( ) & 0xff ) ; if ( ( val & 0xffffff ) == 1 ) { buf . position ( buf . position ( ) - ( val == 1 ? 4 : 3 ) ) ; result . limit ( buf . position ( ) - from ) ; break ; } } return result ; }
Finds next Nth H.264 bitstream NAL unit (0x00000001) and returns the data
that preceeds it as a ByteBuffer slice

Segment byte order is always little endian

TODO: emulation prevention

@param buf
@return
Finds next Nth H . 264 bitstream NAL unit ( 0x00000001 ) and returns the data that preceeds it as a ByteBuffer slice