function main(item) {
    const url = item.url;
    const id = item.id || ku9.getQuery(url, "id") || "hnws";

    // 频道号对照表
    const channels = {
        'hnws': 145, 'hnds': 141, 'hnms': 146, 'hmfz': 147,
        'hndsj': 148, 'hnxw': 149, 'htgw': 150, 'hngg': 151,
        'hnxc': 152, 'hnly': 154, 'wwbk': 155, 'wspd': 156,
        'hnqy': 157, 'ydxj': 163, 'xsj': 183, 'gxpd': 194,
        'zz1': 197, 'kf1': 198, 'ly1': 204, 'pds1': 205,
        'ay1': 206, 'hb1': 207, 'xx1': 208, 'jz1': 209,
        'py1': 219, 'xc1': 220, 'lh1': 221, 'smx1': 222,
        'ny1': 223, 'sq1': 224, 'xy1': 225, 'zk1': 226,
        'zmd1': 227, 'jy1': 228
    };

    // 频道名称映射
    const channelNames = {
        'hnws': '河南卫视', 'hnds': '河南都市', 'hnms': '河南民生', 'hmfz': '河南法治',
        'hndsj': '河南电视剧', 'hnxw': '河南新闻', 'htgw': '河南公共', 'hngg': '河南国际',
        'hnxc': '河南乡村', 'hnly': '河南文旅', 'wwbk': '文物宝库', 'wspd': '武术世界',
        'hnqy': '河南晴彩', 'ydxj': '移动戏曲', 'xsj': '戏曲广播', 'gxpd': '高兴频道',
        'zz1': '郑州新闻', 'kf1': '开封新闻', 'ly1': '洛阳新闻', 'pds1': '平顶山新闻',
        'ay1': '安阳新闻', 'hb1': '鹤壁新闻', 'xx1': '新乡新闻', 'jz1': '焦作新闻',
        'py1': '濮阳新闻', 'xc1': '许昌新闻', 'lh1': '漯河新闻', 'smx1': '三门峡新闻',
        'ny1': '南阳新闻', 'sq1': '商丘新闻', 'xy1': '信阳新闻', 'zk1': '周口新闻',
        'zmd1': '驻马店新闻', 'jy1': '济源新闻'
    };

    // 如果没有指定频道ID，显示频道列表
    if (!id || !channels[id]) {
        const baseUrl = url.split('?')[0];
        let content = "河南电视台频道列表,#genre#\n";
        
        for (const channelId in channels) {
            const channelName = channelNames[channelId] || channelId;
            content += `${channelName},${baseUrl}?id=${channelId}\n`;
        }
        
        return { m3u8: content };
    }

    // 获取真实m3u8地址
    function getRealM3u8(channelId) {
        const channelCode = channels[channelId] || channels['hnws'];
        const t = Math.floor(Date.now() / 1000);
        const sign = ku9.sha256('6ca114a836ac7d73' + t);
        
        const apiUrl = `https://pubmod.hntv.tv/program/getAuth/channel/channelIds/1/${channelCode}`;
        const headers = {
            'timestamp': t.toString(),
            'sign': sign
        };
        
        const response = ku9.request(apiUrl, "GET", headers, null, false);
        
        if (response && response.code === 200) {
            try {
                const data = JSON.parse(response.body);
                if (data && data[0] && data[0].video_streams && data[0].video_streams[0]) {
                    return data[0].video_streams[0];
                }
            } catch (e) {
                console.log("JSON解析失败: " + e);
            }
        }
        return null;
    }

    // 主逻辑
    const realM3u8 = getRealM3u8(id);
    
    if (!realM3u8) {
        return { m3u8: "#EXTM3U\n#EXT-X-VERSION:3\n#获取失败" };
    }

    // 获取m3u8内容
    const m3u8Response = ku9.request(realM3u8, "GET", null, null, false);
    
    if (!m3u8Response || m3u8Response.code !== 200) {
        return { m3u8: "#EXTM3U\n#EXT-X-VERSION:3\n#下载失败" };
    }

    let m3u8Content = m3u8Response.body;
    const realHost = ku9.Uri(realM3u8).Host;
  //const realHost = "tvcdn.stream3.hndt.com"

    // 替换TS切片地址为代理地址
    const baseUrl = url.split('?')[0];
    m3u8Content = m3u8Content.replace(/^(\/[^/\r\n]+\.ts)$/gm, 
        `${baseUrl}?host=${realHost}&path=$1`);

    return { 
        m3u8: m3u8Content,
        headers: {
            'Content-Type': 'application/vnd.apple.mpegurl',
            'Cache-Control': 'no-cache'
        }
    };
}