'Renumber pages belonging to a specified logical stream.
fileobj must be opened with mode r+b or w+b.
Starting at page number \'start\', renumber all pages belonging
to logical stream \'serial\'. Other pages will be ignored.
fileobj must point to the start of a valid Ogg page; any
occuring after it and part of the specified logical stream
will be numbered. No adjustment will be made to the data in
the pages nor the granule position; only the page number, and
so also the CRC.
If an error occurs (e.g. non-Ogg data is found), fileobj will
be left pointing to the place in the stream the error occured,
but the invalid data will be left intact (since this function
does not change the total file size).'

@staticmethod
def renumber(fileobj, serial, start):

    number = start
    while True:
        try:
            page = OggPage(fileobj)
        except EOFError:
            break
        else:
            if (page.serial != serial):
                continue
            fileobj.seek((- page.size), 1)
        page.sequence = number
        fileobj.write(page.write())
        fileobj.seek((page.offset + page.size), 0)
        number += 1
