public void printStreamInfo() throws IOException {
        OggPacketReader r = ogg.getPacketReader();

        System.out.println("Processing file \"" + file + "\"");

        // Normally there's only one Skeleton stream, but sometimes
        //  there can be more. Collect all of them
        List<SkeletonStream> skeletons = getSkeletonStreams(r);

        // Report what we found
        for (SkeletonStream skel : skeletons) {
            System.out.println();
            System.out.println("Skeleton with serial " + formatSid(skel.getSid()));

            // Output the head info
            SkeletonFishead head = skel.getFishead();
            System.out.println(" - Skeleton version: " + head.getVersion());
            System.out.println(" - Created at: " + head.getUtc());

            // Output the bones
            int bones = 0;
            for (SkeletonFisbone bone : skel.getFisbones()) {
                System.out.println(" * Bone " + (++bones));
                System.out.println("  - For stream " + formatSid(bone.getSerialNumber()));

                // TODO Output the other bits of the bone

                System.out.println("  - Message Headers:");
                for (String key : bone.getMessageHeaders().keySet()) {
                    System.out.println("   * " + key + " = " + bone.getMessageHeaders().get(key));
                }
            }

            if (skel.getKeyFrames().isEmpty()) {
                System.out.println(" * No key frames found");
            } else {
                // TODO Output something of the key frame(s)
                System.out.println(" * " + skel.getKeyFrames().size() + " keyframes");
            }
        }
        if (skeletons.isEmpty()) {
            System.out.println();
            System.out.println("There are no Skeleton streams in the file");
        }
    }