public static MP3Frame createFrameIfPresent(InputStream inp) throws IOException {
        int h1 = inp.read();
        int h2 = inp.read();
        int h3 = inp.read();

        // Is it an ID3v2 Frame?
        if (h1 == (int) 'I' && h2 == (int) 'D' && h3 == (int) '3') {
            int majorVersion = inp.read();
            int minorVersion = inp.read();
            if (majorVersion == -1 || minorVersion == -1) {
                pushBack(inp, h1, h2, h3, majorVersion, minorVersion);
                return null;
            }
            return new ID3v2Frame(majorVersion, minorVersion, inp);
        }

        // Not a frame header
        pushBack(inp, h1, h2, h3);
        return null;
    }
Returns the next ID3v2 Frame in
the file, or null if the next batch of data
doesn't correspond to either an ID3v2 header.
If no ID3v2 frame could be detected and the passed in input stream is a
{@code PushbackInputStream}, the bytes read so far are pushed back so
that they can be read again.
ID3v2 Frames should come before all Audio ones.
tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-audiovideo-module/src/main/java/org/apache/tika/parser/mp3/ID3v2Frame.java