def _extract_camtasia(self, url, video_id, webpage):
    ' Returns None if no camtasia video can be found. '
    camtasia_cfg = self._search_regex('fo\\.addVariable\\(\\s*"csConfigFile",\\s*"([^"]+)"\\s*\\);', webpage, 'camtasia configuration file', default=None)
    if (camtasia_cfg is None):
        return None
    title = self._html_search_meta('DC.title', webpage, fatal=True)
    camtasia_url = compat_urlparse.urljoin(url, camtasia_cfg)
    camtasia_cfg = self._download_xml(camtasia_url, video_id, note='Downloading camtasia configuration', errnote='Failed to download camtasia configuration')
    fileset_node = camtasia_cfg.find('./playlist/array/fileset')
    entries = []
    for n in fileset_node.getchildren():
        url_n = n.find('./uri')
        if (url_n is None):
            continue
        entries.append({'id': os.path.splitext(url_n.text.rpartition('/')[2])[0], 'title': ('%s - %s' % (title, n.tag)), 'url': compat_urlparse.urljoin(url, url_n.text), 'duration': float_or_none(n.find('./duration').text)})
    return {'_type': 'playlist', 'entries': entries, 'title': title}
Returns None if no camtasia video can be found.
def _extract_camtasia(self, url, video_id, webpage):
    '  '
    camtasia_cfg = self._search_regex('fo\\.addVariable\\(\\s*"csConfigFile",\\s*"([^"]+)"\\s*\\);', webpage, 'camtasia configuration file', default=None)
    if (camtasia_cfg is None):
        return None
    title = self._html_search_meta('DC.title', webpage, fatal=True)
    camtasia_url = compat_urlparse.urljoin(url, camtasia_cfg)
    camtasia_cfg = self._download_xml(camtasia_url, video_id, note='Downloading camtasia configuration', errnote='Failed to download camtasia configuration')
    fileset_node = camtasia_cfg.find('./playlist/array/fileset')
    entries = []
    for n in fileset_node.getchildren():
        url_n = n.find('./uri')
        if (url_n is None):
            continue
        entries.append({'id': os.path.splitext(url_n.text.rpartition('/')[2])[0], 'title': ('%s - %s' % (title, n.tag)), 'url': compat_urlparse.urljoin(url, url_n.text), 'duration': float_or_none(n.find('./duration').text)})
    return {'_type': 'playlist', 'entries': entries, 'title': title}