from yt_dlp.extractor.common import InfoExtractor
import re
import tempfile
import os

class CustomHLSSkip3SecIE(InfoExtractor):
    IE_NAME = 'custom_hls_skip3sec'
    IE_DESC = 'Filter 3s segments from HLS'
    _VALID_URL = r'https?://v2025\.fhbbff\.com/\d+/\w+/index\.m3u8'

    def _real_extract(self, url):
        self.to_screen(f"Fetching and filtering M3U8 from: {url}")
        self.to_screen(f"to_screen测试")
        print('进入')
        m3u8_text = self._download_webpage(url, url)

        # 过滤掉 #EXTINF:3 的片段及其后一行（.ts 文件名）
        lines = m3u8_text.splitlines()
        filtered_lines = []
        skip_next = False       #在遍历 .m3u8 文件行时，标记是否需要“跳过下一行（即 .ts 文件 URL）”
        for line in lines:
            if line.startswith('#EXTINF:3'):
                skip_next = True
                continue
            if skip_next:
                skip_next = False
                continue
            filtered_lines.append(line)

        # 写入临时文件
        tmp_m3u8 = tempfile.NamedTemporaryFile(delete=False, suffix=".m3u8", mode='w', encoding='utf-8')
        tmp_m3u8.write('\n'.join(filtered_lines))
        tmp_m3u8.close()

        # 返回给 yt-dlp，让其调用 ffmpeg 下载
        return {
            'id': 'filtered_hls',
            'title': 'Filtered HLS Stream (no 3s)',
            'ext': 'mp4',
            'url': tmp_m3u8.name,
            'protocol': 'm3u8_native',
        }
