Найти - Пользователи
Полная версия: Мониторинг RTMP-потока и сообщение в телеграм бот
Начало » Python для новичков » Мониторинг RTMP-потока и сообщение в телеграм бот
1
RTDVTV
Всем Доброго времени суток!
Гуру Python, пожалуйста помогите разобраться в вопросе, так я только изучаю язык и еще не все понимаю слету….
Пишу телеграм бот, задача бота мониторить RTMP поток. С определенным интервалом отправлять сообщение о статусе потока. В случае пропадания потока отправлять сообщение, что поток отвалился и т.д.
Чего я добился в результате:
1. запускаю бот (/start) получаю сообщение “Бот для мониторинга RTMP-потоков запущен!”
2. далее команда (/check) получаю сообщение “Поток доступен”. Если я отключаю поток, то ничего не меняется при команде чек получаю тот же ответ “Поток доступен”. Понимаю, что реально по ссылке на поток ничего не мониторятся и просто в боте выполняется одна команда.
Пожалуйста подскажите, что не так делаю или в какую сторону смотреть ?


Версии:
Python 3.11.4
python-telegram-bot 13.13 только в этом варианте получилось запустить бота. На версии 20хх постоянная ошибка на токен.

Пример части кода:
 import telegram
from telegram.ext import Updater, CommandHandler
import pyrtmp
import time
import logging
bot = telegram.Bot(token='7956906719:AAGQ60y6qJhFnS8y8P9FMDt-x5sfFabYzBM')
def start(update, context):
    context.bot.send_message(chat_id=update.effective_chat.id, text="Бот для мониторинга RTMP-потоков запущен!")
def check_stream(update, context):
    # URL потока
    stream_url = 'rtmp://cdn-br2.live-tv.cloud:1935/tgtv/1080i'
    try:
                       
        conn = pyrtmp.RTMP(stream_url)
        conn.connect()
        conn.close()
        context.bot.send_message(chat_id=update.effective_chat.id, text="Поток доступен!")
    except Exception as e:
        context.bot.send_message(chat_id=update.effective_chat.id, text=f"Ошибка при проверке потока: {str(e)}")
    except Exception as e:
            update.message.reply_text(f"Ошибка при проверке потока: {str(e)}")
       
def check_stream(update, context):
    while True:
        try:
            update.message.reply_text("Поток доступен.")
        except Exception as e:
            update.message.reply_text(f"Ошибка при проверке потока: {str(e)}")
        time.sleep(300)  # Проверка каждые 300 секунд
def error(update, context):
    """Log Errors caused by Updates."""
    logging.warning('Update "%s" caused error "%s"', update, context.error)
updater = Updater(token='7956906719:AAGQ60y6qJhFnS8y8P9FMDt-x5sfFabYzBM', use_context=True)
dispatcher = updater.dispatcher
start_handler = CommandHandler('start', start)
check_handler = CommandHandler('check', check_stream)
dispatcher.add_handler(start_handler)
dispatcher.add_handler(check_handler)
updater.start_polling()
updater.idle()
#if __name__ == '__main__':
#    main()
py.user.next
RTDVTV
Пожалуйста подскажите, что не так делаю или в какую сторону смотреть ?
Ну у тебя работает функция с while True. Делай функции с разными именами. То же самое исключений касается. В блоке try … except … должны отлавливаться разные классы исключений.
RTDVTV
py.user.next
Пожалуйста можно какой ни будь пример для большего понимания ?
py.user.next
RTDVTV
Пожалуйста можно какой ни будь пример для большего понимания ?
Вот у этой функции поменяй имя
RTDVTV
  
def check_stream(update, context):
    while True:
        try:
            update.message.reply_text("Поток доступен.")
        except Exception as e:
            update.message.reply_text(f"Ошибка при проверке потока: {str(e)}")
        time.sleep(300)  # Проверка каждые 300 секунд

Сделай вот так
  
def check_stream_disable(update, context):
    while True:
        try:
            update.message.reply_text("Поток доступен.")
        except Exception as e:
            update.message.reply_text(f"Ошибка при проверке потока: {str(e)}")
        time.sleep(300)  # Проверка каждые 300 секунд
RTDVTV
py.user.next
Поменял. После рестарта бота вот такая ошибка:

/start
——
test_2_monitor,
Бот для мониторинга RTMP-потоков запущен!
Aleksandr,
——
/check
test_2_monitor,
Ошибка при проверке потока: module ‘pyrtmp’ has no attribute ‘RTMP’
RTDVTV
Для исправления сделал следующее:
Изменил import pyrtmp на “pyrtmp.rtmp”
 import telegram
from telegram.ext import Updater, CommandHandler
import pyrtmp.rtmp
import time
import logging

В блоке def check_stream(update, context): тоже исправил.
 def check_stream(update, context):
    # URL потока
    stream_url = ['rtmp://cdn-br2.xxxxxxxxxxxxxxxxxxv/1080i']
    try:
                     
        conn = pyrtmp.rtmp(stream_url)
        conn.connect()
        conn.close()
        context.bot.send_message(chat_id=update.effective_chat.id, text="Поток доступен!")
    except Exception as e:
        context.bot.send_message(chat_id=update.effective_chat.id, text=f"Ошибка при проверке потока: {str(e)}")
    except Exception as e:
            update.message.reply_text(f"Ошибка при проверке потока: {str(e)}")

В терминале теперь наблюдаю следующий постоянный процесс:
DEBUG:telegram.bot:
DEBUG:telegram.bot:Exiting: get_updates
DEBUG:telegram.bot:Entering: get_updates
DEBUG:telegram.bot:No new updates found.
DEBUG:telegram.bot:
DEBUG:telegram.bot:Exiting: get_updates
DEBUG:telegram.bot:Entering: get_updates
DEBUG:telegram.bot:No new updates found.

этой ошибки теперь НЕТ - Ошибка при проверке потока: module ‘pyrtmp’ has no attribute ‘RTMP’
но появилось другая:

Aleksandr,
/check
——-
test_2_monitor,
Ошибка при проверке потока: ‘module’ object is not callable

При запуске отладки получаю следующее:
File “c:\Users\SLD\WORK\VS\monitor_2\m2env\Lib\site-packages\telegram\utils\request.py”, line 361, in post
result = self._request_wrapper(
^^^^^^^^^^^^^^^^^^^^^^
File “c:\Users\SLD\WORK\VS\monitor_2\m2env\Lib\site-packages\telegram\utils\request.py”, line 283, in _request_wrapper
raise Conflict(message)
telegram.error.Conflict: Conflict: terminated by other getUpdates request; make sure that only one bot instance is running
DEBUG:telegram.bot:Entering: get_updates
ERROR:telegram.ext.updater:Error while getting Updates: Conflict: terminated by other getUpdates request; make sure that only one bot instance is running
DEBUG:telegram.ext.dispatcherrocessing Update: Conflict: terminated by other getUpdates request; make sure that only one bot instance is running
ERROR:telegram.ext.dispatcher:No error handlers are registered, logging exception.
Traceback (most recent call last):
File “c:\Users\SLD\WORK\VS\monitor_2\m2env\Lib\site-packages\telegram\ext\updater.py”, line 651, in _network_loop_retry
if not action_cb():
^^^^^^^^^^^
File “c:\Users\SLD\WORK\VS\monitor_2\m2env\Lib\site-packages\telegram\ext\updater.py”, line 602, in polling_action_cb
updates = self.bot.get_updates(
^^^^^^^^^^^^^^^^^^^^^
File “c:\Users\SLD\WORK\VS\monitor_2\m2env\Lib\site-packages\telegram\ext\extbot.py”, line 226, in get_updates
updates = super().get_updates(
^^^^^^^^^^^^^^^^^^^^
File “c:\Users\SLD\WORK\VS\monitor_2\m2env\Lib\site-packages\telegram\bot.py”, line 133, in decorator
result = func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File “c:\Users\SLD\WORK\VS\monitor_2\m2env\Lib\site-packages\telegram\bot.py”, line 3057, in get_updates
self._post(
File “c:\Users\SLD\WORK\VS\monitor_2\m2env\Lib\site-packages\telegram\bot.py”, line 298, in _post
return self.request.post(
^^^^^^^^^^^^^^^^^^
File “c:\Users\SLD\WORK\VS\monitor_2\m2env\Lib\site-packages\telegram\utils\request.py”, line 361, in post
result = self._request_wrapper(
^^^^^^^^^^^^^^^^^^^^^^
File “c:\Users\SLD\WORK\VS\monitor_2\m2env\Lib\site-packages\telegram\utils\request.py”, line 283, in _request_wrapper
raise Conflict(message)
telegram.error.Conflict: Conflict: terminated by other getUpdates request; make sure that only one bot instance is running
DEBUG:telegram.bot:Entering: get_updates

Снова мысли……?
py.user.next
RTDVTV
Ошибка при проверке потока: module ‘pyrtmp’ has no attribute ‘RTMP’
Это что за модуль? Это же сервер.

Надо искать клиентов для RTMP.
https://stackoverflow.com/questions/7415509/simple-rtmp-python-client

Оттуда модуль
https://pypi.org/project/python-librtmp/
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB