From 19ca8d0885c01054c60ca89e96bf6c4611154bbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B2=D0=BE=D0=B2=20=D0=90=D1=80=D1=82?= =?UTF-8?q?=D0=B5=D0=BC?= Date: Sun, 5 Jul 2026 13:03:26 +0300 Subject: [PATCH] =?UTF-8?q?BUR-58=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20import=20mpegts.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/CameraView.tsx | 41 +++++++++++++++-------------------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/src/components/CameraView.tsx b/src/components/CameraView.tsx index d95c6bd..f33b98d 100644 --- a/src/components/CameraView.tsx +++ b/src/components/CameraView.tsx @@ -1,3 +1,4 @@ +import mpegts from 'mpegts.js'; import { useEffect, useRef, useState } from 'react'; type CameraViewProps = { @@ -11,8 +12,7 @@ export function CameraView({ title = 'Камера', wsUrl }: CameraViewProps) { useEffect(() => { const video = videoRef.current; - let player: import('mpegts.js').default.Player | null = null; - let cancelled = false; + let player: ReturnType | null = null; if (!video) { return; @@ -22,32 +22,27 @@ export function CameraView({ title = 'Камера', wsUrl }: CameraViewProps) { video.addEventListener('playing', clearError); setError(null); - void import('mpegts.js').then(({ default: mpegts }) => { - if (cancelled) { - return; - } + if (!mpegts.isSupported()) { + setError('Браузер не поддерживает MPEG-TS поток'); + return () => { + video.removeEventListener('playing', clearError); + }; + } - if (!mpegts.isSupported()) { - setError('Браузер не поддерживает MPEG-TS поток'); - return; - } + player = mpegts.createPlayer( + { type: 'mpegts', isLive: true, url: wsUrl }, + { liveBufferLatencyChasing: true, liveBufferLatencyMaxLatency: 1.5 }, + ); - player = mpegts.createPlayer( - { type: 'mpegts', isLive: true, url: wsUrl }, - { liveBufferLatencyChasing: true, liveBufferLatencyMaxLatency: 1.5 }, - ); + player.attachMediaElement(video); + player.load(); - player.attachMediaElement(video); - player.load(); - - const playResult = player.play(); - if (playResult instanceof Promise) { - void playResult.then(() => setError(null)).catch(() => setError('Не удалось запустить воспроизведение')); - } - }); + const playResult = player.play(); + if (playResult instanceof Promise) { + void playResult.then(() => setError(null)).catch(() => setError('Не удалось запустить воспроизведение')); + } return () => { - cancelled = true; video.removeEventListener('playing', clearError); player?.pause(); player?.unload(); -- 2.49.1