Repository: yt-dlp/yt-dlp
File: yt_dlp/extractor/twitcasting.py (Python)

Code before:

        base_dict = {
            'title': title,
            'description': description,
            'thumbnail': thumbnail,
            'timestamp': timestamp,
            'uploader_id': uploader_id,
            'duration': duration,
            'view_count': view_count,
            'is_live': is_live,
        }

        def find_dmu(x):
            data_movie_url = self._search_regex(
                r'data-movie-url=(["\'])(?P<url>(?:(?!\1).)+)\1',
                x, 'm3u8 url', group='url', default=None)
            if data_movie_url:
                return [data_movie_url]

        m3u8_urls = try_get(
            webpage,
            (find_dmu,
             lambda x: traverse_obj(video_js_data, (..., 'source', 'url')),
             lambda x: ['https://twitcasting.tv/%s/metastream.m3u8' % uploader_id]
                if is_live else None),
            list)
        if not m3u8_urls:
            raise ExtractorError('Failed to get m3u8 playlist')

        if is_live:
            m3u8_url = m3u8_urls[0]
            formats = self._extract_m3u8_formats(
                m3u8_url, video_id, ext='mp4', m3u8_id='hls',
                live=True, headers=self._M3U8_HEADERS)

            try:
                formats.extend(self._extract_m3u8_formats(
                    m3u8_url, video_id, ext='mp4', m3u8_id='source',
                    live=True, query={'mode': 'source'},
                    note='Downloading source quality m3u8',
                    headers=self._M3U8_HEADERS))
            except ExtractorError as ex:
                self.report_warning(ex)

            if has_websockets:
                qq = qualities(['base', 'mobilesource', 'main'])
                streams = traverse_obj(stream_server_data, ('llfmp4', 'streams')) or {}
                for mode, ws_url in streams.items():
                    formats.append({
                        'url': ws_url,
                        'format_id': 'ws-%s' % mode,

Review comment (suggestion):
again, why wrap everything in try_get unnecessarily?
```suggestion
        m3u8_urls = (try_get(webpage, find_dmu, list)
                     or traverse_obj(video_js_data, (..., 'source', 'url'))
                     or [f'https://twitcasting.tv/{uploader}/metastream.m3u8'] if is_live else None)
```

Code after:
            'view_count': view_count,
            'is_live': is_live,
        }

        def find_dmu(x):
            data_movie_url = self._search_regex(
                r'data-movie-url=(["\'])(?P<url>(?:(?!\1).)+)\1',
                x, 'm3u8 url', group='url', default=None)
            if data_movie_url:
                return [data_movie_url]

        m3u8_urls = (try_get(webpage, find_dmu, list)
                     or traverse_obj(video_js_data, (..., 'source', 'url'))
                     or ([f'https://twitcasting.tv/{uploader_id}/metastream.m3u8'] if is_live else None))
        if not m3u8_urls:
            raise ExtractorError('Failed to get m3u8 playlist')

        if is_live:
            m3u8_url = m3u8_urls[0]
            formats = self._extract_m3u8_formats(
                m3u8_url, video_id, ext='mp4', m3u8_id='hls',
                live=True, headers=self._M3U8_HEADERS)

            formats.extend(self._extract_m3u8_formats(
                m3u8_url, video_id, ext='mp4', m3u8_id='source',
                live=True, query={'mode': 'source'},
                note='Downloading source quality m3u8',
                headers=self._M3U8_HEADERS, fatal=False))

            if has_websockets:
                qq = qualities(['base', 'mobilesource', 'main'])
                streams = traverse_obj(stream_server_data, ('llfmp4', 'streams')) or {}
                for mode, ws_url in streams.items():
                    formats.append({
                        'url': ws_url,
                        'format_id': 'ws-%s' % mode,
                        'ext': 'mp4',
                        'quality': qq(mode),
                        # TwitCasting simply sends moof atom directly over WS
                        'protocol': 'websocket_frag',
                    })

            self._sort_formats(formats)

            infodict = {
                'formats': formats
            }
        else:
            infodict = {
                '_type': 'multi_video',
                'entries': [{