vladpen / cams

Android mobile app
MIT License
131 stars 19 forks source link

Первый канал камеры явно пережат #46

Closed OmlineEditor closed 1 year ago

OmlineEditor commented 1 year ago

При просмотре первого канала качество видео явно не соответствует оригиналу. Вы зачем видео пережимаете? Прошу показывать оригинал без пережатия.

P.S. Я не путаю первый и второй канал. второй канал еще хуже, так что ошибки быть не может.

cams real

vladpen commented 1 year ago

Сама программа ничего с потоками не делает, это может только камера. Значит, URL указан неверно. Например, мои камеры по адресу Channels/102/101 покажут канал низкого разрешения (см. #48)

OmlineEditor commented 1 year ago

Например, мои камеры по адресу Channels/102/101 покажут канал низкого разрешения

Все верно это второй канал у вас, а не первый, поэтому и низкого качества. нужно по адресу Channels/101 смотреть. У меня похожая проблема была пока не обрезала url

OmlineEditor commented 1 year ago

Прошу посмотреть что делает плагин VLC внутри программы т.е. если переключиться на 2й канал там даже кирпичей не видно, порсто коричневое месиво. Программа переключает каналы, 1й и 2й поток отличаются, но 1й почему-то не полный и пережатый.

vladpen commented 1 year ago

Чудес не бывает. Проверьте, пожалуйста, по логам, по какому URL подключается камера. И что будет, если убрать каналы (оставить один URL).

OmlineEditor commented 1 year ago

что будет, если убрать каналы (оставить один URL).

Тоже самое, канал пережат и изображение не оригинльное. еще я заметила что пропорции изображения не верные в портретной ориентации телефона и в пейзажной, при повороте телефона меняется качество видео.

OmlineEditor commented 1 year ago

Судя по логам программа явно пережимает видео и уменьшает разрешение из-за какой-то ошибки Исходное видео: 3840x2160, пережатое: 2432x1088 Ошибка: libvlc window: request 1 not implemented allocator 3.x is not supported DequeueBuffer: dequeueBuffer failed NdkMediaCodec: sf error code: -38

logCam2.txt

vladpen commented 1 year ago

2432x1088 это, случайно, не разрешение вашего устройства? Как вы вообще определили разрешение видео? Как воспроизводится эта камера этой же программой на других устройствах?

P.S. Насколько я вижу, 3840 / 2160 < 2432 / 1088. Могу предположить, что причина размытия именно в этом. Предлагаю проверить эту гипотезу.

OmlineEditor commented 1 year ago

2432x1088 это, случайно, не разрешение вашего устройства?

2432x1088 - на разрешение экрна ПОЧТИ похоже, оно немного отличается у меня 2340 x 1080.

Как вы вообще определили разрешение видео?

по логам что выдала программа, возможно ошибаюсь.

Как воспроизводится эта камера этой же программой на других устройствах?

намного лучше эта камера показывает на других устройствах, и если открыть в VLC на этом же устройстве и растянуть тогда касчество лучше чем в вашей программе.

вывод: сжатие есть и видео не оригинал, причина где-то внутри программы.

vladpen commented 1 year ago

намного лучше эта камера показывает на других устройствах

Можете выразиться точнее - на других устройствах в этой же программе?

Предлагаю простой эксперимент:

  1. Оставляем для этой камеры только 1-й канал
  2. Создаем группу из двух камер: этой и любой другой с разрешением FullHD
  3. Открываем группу, увеличиваем и смотрим на кирпичи. Заодно сравниваем размер в портретной и альбомной ориентации.

Если качество в норме и размеры фреймов совпали - ура, проблема концептуально решена, фиксируем размер фрейма на одиночном экране и выкатываем обновление. Если нет - всё плохо, разбираемся дальше.

P.S. В общем случае размытие не означает сжатие.

OmlineEditor commented 1 year ago

Можете выразиться точнее - на других устройствах в этой же программе?

Тестирую, и вот что вышло: Ваша программа на телефоне - первый канал явно сжимает и это не оригинал Ваша программа на старом планшете - неработает https://github.com/vladpen/cams/issues/51 VLC на телефоне - первый канал без пережатия, видео оригинал VLC на компьютере - первый канал без пережатия, видео оригинал

Предлагаю простой эксперимент:

Его итоги: В группе камера на 8 Mp 3840x2160 показывает точно также как и без группы - видео пережато и кирпичи видно плохо. Камера в портретной ориентации показывает хуже чем в пейзажной ориентации, кирпичи видно по разному - в пейзажной немного лучше, но все равно не оригинал т.к. пережимает исходник всегда.

P.S. Пережатие потока в камере при недостаточной ширине канала выключено принудительно, т.е. камера отдает оригинал всегда.

vladpen commented 1 year ago

Спасибо, понятно. Это про 4к камеру. А с обычными full HD проблем не было?

OmlineEditor commented 1 year ago

А с обычными full HD проблем не было?

Точно сказать не могу, у меня нет таких камер. Тестировала на другой камере Full HD что временно дали доступ, там кажется все норм.

vladpen commented 1 year ago

Вердикт такой: на экране 2340x1080 увидеть 4к нельзя. Точнее, увеличивать картинку можно 3-мя способами:

  1. Масштабировать экран
  2. Увеличивать "поверхность" потока
  3. Масштабировать "поверхность" потока

Сейчас реализован вариант 1, т.к. 2 и 3 требуют вмешательства в libVLC и, соответственно, приводят к снижению отзывчивости интерфейса и увеличению потребления ресурсов процессора и памяти.

То есть в теории, если масштабировать сам поток, добиться лучшего качества увеличенного 4К на экране 2К можно, но платить за это будут пользователи обычных камер. Смысла в этом я не вижу и предлагаю для 4К просто рекомендовать использование устройств с высокой плотностью пикселей.

OmlineEditor commented 1 year ago

Вот допустим я старенькая бабушка, у меня экран 720x480 но камера 4к. Ко мне пришли люди или пенсию принести или жулики из СОБЕСа. Я бы могла увеличить картинку и посмотреть, как выглядят лица, но в место этого у меня 4к камера с 8 мегапикселями, на которую я потратила последнюю пенсию превратилась в камеру с разрешением 0,3 Мегапикселя, это потеря примерно в 26 раз. Вот тут явно такого быть не должно. Если делать, то делать хорошо, и камера должна масштабироваться как положено. Если смотреть далеко в будущее, то все пенсионеры будут иметь телефоны, это щас современная молодежь и у всех будут камеры с большим разрешением, этого сегодня 8 Мегапикселей много, а через пару лет будет и 32 Мегапикселя. Экраны телефонов явно не будут иметь такое разрешение. Терять качество картинки малоприятное занятие. И вмешиваться в libVLC вам не нужно. Опишите проблему разработчику библиотеки и скажите, что есть проблема и ее нужно исправить, подождем, когда поправят и вам почти ничего не нужно делать.

Кстати тикет откройте чтобы не забыть о проблеме.

vladpen commented 1 year ago

Боюсь, пока старенькой бабушке придется страдать. Вариант №2 не выполним - андроид не справляется с увеличенной поверхностью даже 2К (хотя этот метод, действительно, даёт четкую картинку на любом экране), а для №3 в API нет методов перемещения. Очень жаль, конечно. Возможно, поможет crop_window, но это появится только в 4.0.

Предлагаю подождать.