code: def _parse_volume_descriptors(self):
          '''
          An internal method to parse the volume descriptors on an ISO.
          Parameters:
           None.
          Returns:
           Nothing.
          '''
          self._cdfp.seek(16 * 2048)
          while True:
              curr_extent = self._cdfp.tell() // 2048
              vd = self._cdfp.read(2048)
              if len(vd) != 2048:
                  raise pycdlibexception.PyCdlibInvalidISO('Failed to read entire volume descriptor')
              (desc_type, ident) = struct.unpack_from('=B5s', vd, 0)
              if desc_type not in (headervd.VOLUME_DESCRIPTOR_TYPE_PRIMARY,
                                   headervd.VOLUME_DESCRIPTOR_TYPE_SET_TERMINATOR,
                                   headervd.VOLUME_DESCRIPTOR_TYPE_BOOT_RECORD,
                                   headervd.VOLUME_DESCRIPTOR_TYPE_SUPPLEMENTARY) or ident not in (b'CD001', b'BEA01', b'NSR02', b'TEA01'):
                  self._cdfp.seek(-2048, os.SEEK_CUR)
                  break
              if desc_type == headervd.VOLUME_DESCRIPTOR_TYPE_PRIMARY:
                  pvd = headervd.PrimaryOrSupplementaryVD(headervd.VOLUME_DESCRIPTOR_TYPE_PRIMARY)
                  pvd.parse(vd, curr_extent)
                  self.pvds.append(pvd)
              elif desc_type == headervd.VOLUME_DESCRIPTOR_TYPE_SET_TERMINATOR:
                  vdst = headervd.VolumeDescriptorSetTerminator()
                  vdst.parse(vd, curr_extent)
                  self.vdsts.append(vdst)
              elif desc_type == headervd.VOLUME_DESCRIPTOR_TYPE_BOOT_RECORD:
                  if ident == b'CD001':
                      br = headervd.BootRecord()
                      br.parse(vd, curr_extent)
                      self.brs.append(br)
                  elif ident == b'BEA01':
                      self._has_udf = True
                      self.udf_bea.parse(vd, curr_extent)
                  elif ident == b'NSR02':
                      self.udf_nsr.parse(vd, curr_extent)
                  elif ident == b'TEA01':
                      self.udf_tea.parse(vd, curr_extent)
                  else:
                      raise pycdlibexception.PyCdlibInvalidISO('Invalid volume identification type')
              elif desc_type == headervd.VOLUME_DESCRIPTOR_TYPE_SUPPLEMENTARY:
                  svd = headervd.PrimaryOrSupplementaryVD(headervd.VOLUME_DESCRIPTOR_TYPE_SUPPLEMENTARY)
                  svd.parse(vd, curr_extent)
                  self.svds.append(svd)
          if not self.pvds:
              raise pycdlibexception.PyCdlibInvalidISO('Valid ISO9660 filesystems must have at least one PVD')
          self.pvd = self.pvds[0]
          for pvd in self.pvds[1:]:
              if pvd != self.pvd:
                  raise pycdlibexception.PyCdlibInvalidISO('Multiple occurrences of PVD did not agree!')
              pvd.root_dir_record = self.pvd.root_dir_record
          if not self.vdsts:
              raise pycdlibexception.PyCdlibInvalidISO('Valid ISO9660 filesystems must have at least one Volume Descriptor Set Terminator')