'Sets channels, bits_per_sample, sample_rate and optionally bitrate.
Can raise MP4StreamInfoError.'

def _parse_stsd(self, atom, fileobj):

    assert (atom.name == 'stsd')
    (ok, data) = atom.read(fileobj)
    if (not ok):
        raise MP4StreamInfoError('Invalid    stsd')
    try:
        (version, flags, data) = parse_full_atom(data)
    except ValueError as e:
        raise MP4StreamInfoError(e)
    if (version != 0):
        raise MP4StreamInfoError('Unsupported    stsd    version')
    try:
        (num_entries, offset) = cdata.uint32_be_from(data, 0)
    except cdata.error as e:
        raise MP4StreamInfoError(e)
    if (num_entries == 0):
        return
    entry_fileobj = cBytesIO(data[offset:])
    try:
        entry_atom = Atom(entry_fileobj)
    except AtomError as e:
        raise MP4StreamInfoError(e)
    try:
        entry = AudioSampleEntry(entry_atom, entry_fileobj)
    except ASEntryError as e:
        raise MP4StreamInfoError(e)
    else:
        self.channels = entry.channels
        self.bits_per_sample = entry.sample_size
        self.sample_rate = entry.sample_rate
        self.bitrate = entry.bitrate
        self.codec = entry.codec
        self.codec_description = entry.codec_description
