吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4714|回复: 26
收起左侧

[Python 原创] openwrt下监控组播流工具,让你的IPTV不再掉线!

  [复制链接]
zeknight 发表于 2025-6-26 17:06
本帖最后由 苏紫方璇 于 2025-7-1 11:34 编辑

痛点:
      openwrt下配置IPTV以后,经常会遇到组播流由于种种原因掉线的问题。

经判断主要原因在于udpxy或者msd_lite软件故障,而这一类的故障通常软件不会自己重启动,所以这个软件就是解决软件故障导致的组播流中断问题。

1、本程序用python编写,核心程序如下:


[Python] 纯文本查看 复制代码
import requests
import time
import os
import logging
from pathlib import Path

# 配置日志系统
script_dir = os.path.dirname(os.path.abspath(__file__))
log_file = os.path.join(script_dir, 'udpxy_monitor.log')

logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(levelname)s - %(message)s',
    handlers=[
        logging.FileHandler(log_file),  # 文件日志
        logging.StreamHandler()  # 控制台日志
    ]
)
logger = logging.getLogger(__name__)

# 多播流地址
STREAM_URL = "http://192.168.6.1:4022/rtp/235.254.198.122:1764"
# 检测间隔(秒)
CHECK_INTERVAL = 60
# 请求超时时间(秒)
TIMEOUT = 5


def check_stream():
    """检查多播流是否正常"""
    try:
        # 发送HTTP GET请求
        response = requests.get(STREAM_URL, timeout=TIMEOUT, stream=True)
        # 检查状态码
        if response.status_code == 200:
            # 检查是否能读取到数据
            response.raw.read(1024)  # 尝试读取1KB数据
            return True
        else:
            logger.warning(f"异常状态码: {response.status_code}")
            return False
    except (requests.RequestException, ConnectionError) as e:
        logger.error(f"流检测失败: {str(e)}", exc_info=True)
        return False
    except Exception as e:
        logger.critical(f"未预期的检测错误: {str(e)}", exc_info=True)
        return False


def restart_udpxy():
    """重启udpxy服务"""
    try:
        logger.info("正在重启udpxy服务...")
        result = os.system("/etc/init.d/udpxy restart")
        if result == 0:
            logger.info("udpxy服务重启成功")
        else:
            logger.error(f"重启失败,返回码: {result}")
    except Exception as e:
        logger.error(f"重启异常: {str(e)}", exc_info=True)
        raise


def main():
    logger.info("多播流监控启动")
    logger.debug(f"监控参数 => URL: {STREAM_URL}, 间隔: {CHECK_INTERVAL}s, 超时: {TIMEOUT}s")

    while True:
        try:
            if check_stream():
                logger.debug("多播流检测正常")
            else:
                logger.warning("多播流异常,触发重启")
                restart_udpxy()
                # 重启后等待额外时间让服务稳定
                time.sleep(5)

            time.sleep(CHECK_INTERVAL)

        except KeyboardInterrupt:
            logger.info("用户中断监控进程")
            break
        except Exception as e:
            logger.critical(f"监控进程崩溃: {str(e)}", exc_info=True)
            raise


if __name__ == "__main__":
    try:
        main()
    except Exception as e:
        logger.error(f"主程序异常: {str(e)}", exc_info=True)
    finally:
        logger.info("多播流监控已停止")



2、使用方式:
保存为.py文件,放到指定文件夹下,在op下的计划任务中设置定时启动

0 0 * * * python ./python/chk_msd_lite.py
0 8 * * * python ./python/chk_msd_lite.py
0 16 * * * python ./python/chk_msd_lite.py

1.png
3.png
2.png






免费评分

参与人数 4吾爱币 +8 热心值 +4 收起 理由
苏紫方璇 + 5 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
抱薪风雪雾 + 1 + 1 谢谢@Thanks!
boy2918 + 1 + 1 已经处理,感谢您对吾爱破解论坛的支持!
woyucheng + 1 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

毁我容颜 发表于 2025-6-26 17:39
感谢大哥分享。
fishes207569 发表于 2025-6-26 17:48
chenzhigang 发表于 2025-6-26 18:51
jiukou 发表于 2025-6-26 19:15
软路由比硬路由好。
vr4u 发表于 2025-6-26 20:04
说了三个专业名词,有两个没听过。什么openwrt?
小鸟会飞 发表于 2025-6-26 20:26
收藏
收藏
风经过 发表于 2025-6-26 20:30
花时间去试试
周星心 发表于 2025-6-26 20:50
好!收藏先,以备有用!
schm168 发表于 2025-6-27 05:47
这个方法不错,感谢分享!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-7-14 06:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表