modify: 视频推流
This commit is contained in:
@@ -88,12 +88,15 @@ async def create_workers(session, config, count=1, worker_manager=None):
|
||||
"""
|
||||
from .global_var import set_global_var, heartbeat_timeout as _default_timeout
|
||||
from chongming_database import Database
|
||||
from chongming_stream_manager import StreamManager
|
||||
|
||||
# 读取心跳配置
|
||||
worker_config = config.get("worker", {}).get("heartbeat", {}) if isinstance(config, dict) else {}
|
||||
hb_interval = worker_config.get("interval", 5)
|
||||
hb_timeout = worker_config.get("timeout", _default_timeout)
|
||||
check_interval = worker_config.get("check_interval", 10)
|
||||
mediamtx_addr = worker_config.get("mediamtx_addr", "rtsp://172.21.110.223:8554")
|
||||
link_path = worker_config.get("link_path", "/data/bm-app")
|
||||
|
||||
# 设定全局变量
|
||||
global heartbeat_timeout
|
||||
@@ -107,9 +110,14 @@ async def create_workers(session, config, count=1, worker_manager=None):
|
||||
db = Database(db_path)
|
||||
await db.initialize()
|
||||
|
||||
# 初始化视频流控制器
|
||||
stream_manager = StreamManager(mediamtx_addr)
|
||||
|
||||
set_global_var("db", db)
|
||||
set_global_var("heartbeat_timeout", hb_timeout)
|
||||
set_global_var("heartbeat_interval", hb_interval)
|
||||
set_global_var("stream_manager", stream_manager)
|
||||
set_global_var("link_path", link_path)
|
||||
|
||||
logger.info(
|
||||
f"[aibox_sophon_adapter] 已初始化: "
|
||||
|
||||
@@ -7,10 +7,15 @@ from typing import Any
|
||||
|
||||
from chongming_database import Database
|
||||
from .models.orm import *
|
||||
from chongming_stream_manager import StreamManager
|
||||
|
||||
# 数据库实例
|
||||
db: Database | None = None
|
||||
|
||||
# 视频流管理器
|
||||
stream_manager: StreamManager | None = None
|
||||
link_path: str | None = None
|
||||
|
||||
# 心跳超时配置(秒)
|
||||
heartbeat_timeout: float = 15.0
|
||||
|
||||
|
||||
@@ -130,4 +130,3 @@ class DeviceSummary(BaseModel):
|
||||
last_ping_time: Optional[str] = Field(default=None, description="最后心跳时间")
|
||||
grant_code: int = Field(..., description="授权码")
|
||||
grant_desc: str = Field(..., description="授权描述")
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ async def board_ping(request: BoardPingRequest, worker_id: str = "") -> dict:
|
||||
设备通过 MQTT 主题 /board_ping 定期(默认 5 秒)上报系统状态。
|
||||
收到心跳后更新数据库中的设备记录,标记为在线。
|
||||
"""
|
||||
from ..global_var import db, heartbeat_timeout
|
||||
from ..global_var import db, heartbeat_timeout, stream_manager, link_path
|
||||
|
||||
board_id = request.BoardId
|
||||
|
||||
@@ -82,6 +82,17 @@ async def board_ping(request: BoardPingRequest, worker_id: str = "") -> dict:
|
||||
|
||||
await session.commit()
|
||||
|
||||
if stream_manager is None:
|
||||
raise RuntimeError("StreamManager not initialized")
|
||||
|
||||
ping_data = json.loads(ping_json)
|
||||
medias = ping_data.get("Medias", {})
|
||||
for media in medias:
|
||||
if media.get("MediaStatus", {}).get("label", "") == "正常":
|
||||
stream_id = media["MediaName"]
|
||||
source_url = media["MediaUrl"].replace("/Link", link_path)
|
||||
await stream_manager.start_stream(stream_id, source_url)
|
||||
|
||||
logger.debug(
|
||||
f"[Heartbeat] {board_id}: temp={request.BoardTemp}, "
|
||||
f"disk={request.HostDisk.Used}/{request.HostDisk.Total} kB, "
|
||||
|
||||
Reference in New Issue
Block a user