Каталог Поиск 0 Сравнить 0 Закладки 0 Корзина Войти
Каталог
105082, Москва, ул. Фридриха Энгельса, 75с21, БЦ Бауманский ИТКОЛ
Пн - Пт: с 09-00 до 18-00 Сб: с 10-00 до 18-00 Вс: выходной
Страницы: 1
RSS
Запрос функции: портретный режим вьюпорта, UniFi Protect
 
У меня мониторы с HDMI в портретном режиме. Моя предыдущая система камер отображала три камеры, каждая из которых была в альбомной ориентации, расположенные друг над другом на портретном дисплее, как на приложенном изображении
 
Давай, Ubnt, это не должно быть так сложно :)
 
Бамп, мне это тоже нужно для пары коммерческих проектов. Моя текущая идея, так как мне нужно всего два видеопотока с камер, — взять два Viewport и подключить их к одному портретному дисплею через ANI-HDROTATE-PLUS от A-NeuVideo.
 
БАМП. Было бы оооочень круто, а теперь с камерами 180@G6 ещё лучше.
 
Бамп!
 
Портретный формат был бы так полезен для нашего текущего пространства, надеюсь, эту функцию добавят в ближайшее время!
 
Bump! Это должно случиться.
 
Да, пожалуйста! У меня на кухне в портретном режиме висит 50-дюймовый Samsung The Frame. Я пришёл в поисках поддержки портретного режима. Теперь, когда у камер появился коридорный режим, хотелось бы видеть это в формате 4 окна в 9x16. Хочется, чтобы встроенный viewport в UNVR instant поддерживал нативный viewport через HDMI-выход, а также сами устройства viewport.
 
Обновлено для 4 камер // Удаляем предыдущий инжектор
[...document.querySelectorAll('#uniStackFix')].forEach(n => n.remove());

const GAP = 8; // вертикальный отступ между тайлами

const css = `
@media (orientation: portrait){

 /* 0) Никогда не скрывать области просмотра автоматически */
 [class*="liveview"], [class*="LiveView"] * { visibility:visible !important; }

 /* 1) Располагаем контейнер областей просмотра вертикально и растягиваем на весь экран */
 .LiveViewGrid__List,
 [class^="liveview__Viewports"],
 [class*="ViewportsWrapper"]{
   display:flex !important;
   flex-direction:column !important;
   gap:${GAP}px !important;
   height:100vh !important;
   max-height:100vh !important;
   overflow:hidden !important;
   align-items:stretch !important;
   justify-content:flex-start !important;
 }

 /* 2) Четыре известных слота (data-viewport="0..3") должны быть видимыми блоками */
 [data-viewport="0"],
 [data-viewport="1"],
 [data-viewport="2"],
 [data-viewport="3"]{
   display:block !important;
   position:static !important;
   margin:0 !important;
   padding:0 !important;
   min-height:0 !important;
   flex:0 0 auto !important; /* высоту зададим ниже */
   overflow:hidden !important;
 }

 /* 3) Задаём каждому из четырёх слотов одинаковую высоту (¼ экрана минус отступы) */
 [data-viewport="0"],
 [data-viewport="1"],
 [data-viewport="2"],
 [data-viewport="3"]{
   height:calc((100vh - ${GAP}px * 3) / 4) !important;
 }

 /* 4) Приводим к нормальному виду внутренние обёртки «плеера», которые UniFi помечает как grid/abs/ratio */
 .LiveViewGridSlot__Viewport,
 .LiveViewGridSlot__ViewportContent,
 .ViewportLiveStreamPlayer__Root,
 .ViewportLiveStreamPlayer__Wrapper,
 .ConnectedLivePlayer__Root,
 .Zoomable__ZoomFrame,
 .LiveMediaStreamsPlayer__StyledVideoHolder{
   position:relative !important;
   display:block !important;
   width:100% !important;
   height:100% !important;
   max-height:none !important;
   margin:0 !important;
   inset:auto !important;
   transform:none !important;
 }

 /* Убиваем трюки с padding для «ratio box» */
 .LiveViewGridSlot__Viewport [style*="padding-top"],
 .LiveViewGridSlot__Viewport [style*="padding-bottom"]{
   padding-top:0 !important;
   padding-bottom:0 !important;
 }

 /* 5) Заставляем медиаконтент заполнять свой слот */
 .LiveViewGridSlot__Viewport video,
 .LiveViewGridSlot__Viewport canvas,
 .LiveViewGridSlot__Viewport img{
   position:absolute !important;
   inset:0 !important;
   width:100% !important;
   height:100% !important;
   object-fit:cover !important; /* замени на 'contain', если нужен letterbox */
   display:block !important;
 }
}
`;

const s = document.createElement('style');
s.id = 'uniStackFix';
s.textContent = css;
document.documentElement.appendChild(s);

/* JS-принудитель: повторно применяем высоты, когда UniFi вставляет плееры в другие слоты */
function enforce() {
 const slots = [...document.querySelectorAll('[data-viewport="0"],[data-viewport="1"],[data-viewport="2"],[data-viewport="3"]')];
 const H = (window.innerHeight - GAP * 3) / 4;
 slots.forEach(el => {
   el.style.setProperty('height', `${H}px`, 'important');
   el.style.setProperty('display', 'block', 'important');
 });

 // Если UniFi воткнул transform на .Zoomable__ZoomFrame, обнуляем его.
 document.querySelectorAll('.Zoomable__ZoomFrame').forEach(z => {
   z.style.setProperty('transform', 'none', 'important');
 });

 // Принудительно заполняем медиа, даже если инлайн-стиль говорит object-fit: contain
 document.querySelectorAll('.LiveViewGridSlot__Viewport video, .LiveViewGridSlot__Viewport canvas, .LiveViewGridSlot__Viewport img')
   .forEach(m => m.style.setProperty('object-fit', 'cover', 'important'));
}

new MutationObserver(enforce).observe(document.body, {subtree:true, childList:true, attributes:true});
window.addEventListener('resize', enforce);
enforce();
 
Как вообще такое может не работать... хотя у меня есть решение — но оно не постоянное, нужно установить расширение для Chrome или делать это каждый раз. Откройте консоль разработчика в браузере (F12), перейдите в консоль и вставьте этот код — он выстроит все три мои камеры в портретный режим при просмотре с приборной панели. @gagooga @BlakDrgn @JarrettKushner @Exemplarsolutions @sdhnewman @ITChief @Shiftyy @dougrathbone @AppleSource Могу подтвердить, что работает в Chrome на Windows и Firefox на Linux. // Удаляем предыдущий инжектор [...document.querySelectorAll('#uniStackFix')].forEach(n=>n.remove()); // Жёсткий фикс для портретного стека const css = ` @media (orientation: portrait){ /* контейнеры */ [class^="liveview__ViewportsWrapper"], [class^="liveview__Viewports"]{ display:flex !important; flex-direction:column !important; gap:8px !important; height:auto !important; max-height:none !important; overflow:visible !important; } /* нормализуем обёртки вьюпортов, которые UniFi помечает как grid/abs */ [class^="liveview__Viewports"] > [data-viewport], [class^="liveview__Viewports"] > div{ display:block !important; position:static !important; height:auto !important; max-height:none !important; overflow:visible !important; } /* сами плитки */ [class^="liveview__Viewport"], [class*="LiveViewGrid__ZoomableViewport"]{ display:block !important; position:relative !important; width:100% !important; max-width:100% !important; height:auto !important; max-height:none !important; min-height:0 !important; margin:0 !important; flex:0 0 auto !important; box-sizing:border-box; /* убиваем остатки сеточного позиционирования */ grid-area:auto !important; grid-column:auto !important; grid-row:auto !important; } /* медиа внутри плиток */ video, canvas, img{ width:100% !important; height:auto !important; max-height:none !important; object-fit:cover !important; } }`; const s = document.createElement('style'); s.id = 'uniStackFix'; s.textContent = css; document.documentElement.appendChild(s);
 
Это обязательная вещь
 
БАМП! Пожалуйста, сделайте это опционально.
 
Я тоже это хочу!
 
Бамп этого запроса на фичу!!
 
Эта функция была бы очень полезна для вертикальных/портретных мониторов. На RaPi это делается очень легко. Непонятно, почему Viewport не может это поддерживать.
 
да, эта фича была бы супер полезной
 
Кто-нибудь нашёл адекватную альтернативу для бесконтактного решения в режиме «всегда включено»? Казалось бы, такая простая фича!
 
Я хотел бы проголосовать за эту функцию, если только она не зависит от Viewport. Мой стол занят 34-дюймовым широкоэкранным монитором, и у меня есть место только для портретного монитора для Protect. Запуск нескольких экземпляров браузера для этого проблематичен. Спасибо!
 
Снова подниму тему. Было бы отличным дополнением. Пожалуйста, добавьте поддерживаемое представление.
 
Вот единственное, что мешает мне насладиться viewport. Я имею в виду, они добавили поддержку поворота LCM-экрана на свитчах — почему бы не сделать то же самое и тут?
Страницы: 1
Читают тему (гостей: 1)