Форум программистов, компьютерный форум, киберфорум
OpenGL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.75/16: Рейтинг темы: голосов - 16, средняя оценка - 4.75
Модератор
Эксперт Java
 Аватар для alecss131
2835 / 1344 / 403
Регистрация: 11.08.2017
Сообщений: 4,297
Записей в блоге: 2

Воспроизведение видео

15.02.2021, 22:46. Показов 4035. Ответов 34

Студворк — интернет-сервис помощи студентам
Давно уже были мысли создать тему про это, но только сейчас дошли руки. Собственно сам вопрос, как правильно воспроизводить видео с использованием opengl? Знаю про pbo, но с ним надо мапить буфер а сам этот процесс довольно затратный. Пока сделал тупо в лоб, рисую прямоугольник с текстурой на весь экран, две текстуры, одну рисую, другую заполняю через glTextureSubImage2D декодированными данными в том же кадре.
На fullhd видео у меня выдает в среднем 60 фпс (+- 1 крайне редко 2), в 4к все похуже, в среднем около 22 (+- 5) фпс
Форматы и размер видео не влияют на фпс, по крайней мере я не заметил. Видео декодирую через ffmeg (думаю в идеале нужно остановиться на одном формате, а то +15мб к весу как-то не очень, другой вопрос какой формат, но сейчас не об этом). Так как движок игровой куча форматов не нужны и буду видео подгонять к нужному фреймрейту, а то сейчас у меня всегда стремится к 60 не взирая на фпс самого видео)) Звук не реализовывал, будет думаю отдельно и через openal
Есть у кого опыт в данном вопросе? Точно ли будет выигрыш от pbo и стоит ли его использовать? В сети не нахожу понятных примеров использования pbo, особенно с dsa. И везде советуют заполнять буфер после мэппинга в другом потоке, а с потоками я совсем не разбираюсь. Знаю что нельзя использовать один контекст в разных потоках и можно расшаривать ресурсы, не проблема, в glfw создать еще одно окно как дочернее от основного и ресурсы будут общими. Думаю для меня важнее неблокируемый запись данных в текстуру, но можно ли это сделать в одном потоке. Ведь декодирование и конвертирование видео из YUV в RGBA тоже процесс не быстрый и блокирующий основной поток.
В данный момент так рисую
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    while (!wnd.windowShouldClose()) {
        glClear(GL_COLOR_BUFFER_BIT);
        glBindTextureUnit(0, tex[n]);
        pipeline.bind();
        glBindVertexArray(vao);
        glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
        glBindVertexArray(0);
        pipeline.unbind();
        glBindTextureUnit(0, 0);
        n ^= 1;
        vd.process(tex[n]); //заполнение второй текстуры из видео
        wnd.update();
        
    }
Приложу весь проект (кода прилично, копировать сюда не влезет, а заливать на гит не хочу), использую galogen (opengl), glfw, ffmpeg и nativefiledialog (nfd для окна выбора файла для открытия)
OpenGL_VideoPlayer.7z
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.02.2021, 22:46
Ответы с готовыми решениями:

Воспроизведение видео-файлов
Воспроизведение ВИДЕО файлов в SFML ктото пробовал ? Я только такую библиотеку Motion нашел и печально что примеров нет на ней :-!

DirectShow воспроизведение видео из буфера в ОЗУ
Подскажите, как на DirectShow воспроизвести файл (а еще лучше - произвольную часть файла), который предварительно считан в буфер в ОЗУ?...

Воспроизведение видео .h264 без сторонних кодеков
Всем привет! Делаю воспроизведение стартового видео в игре через DirectShow, столкнулся с проблемой. Если в системе установлены кодеки...

34
Модератор
Эксперт Java
 Аватар для alecss131
2835 / 1344 / 403
Регистрация: 11.08.2017
Сообщений: 4,297
Записей в блоге: 2
20.02.2021, 13:53  [ТС]
Студворк — интернет-сервис помощи студентам
zayats80888, потоки для меня темный лес, в особенности синхронизация и обмен данными, у меня опыта в программировании больше на джаве, но даже там потоки не использовал почти.
Немного обновил код, а то у меня похоже была утечка памяти, так как каждые 2-3 секунды программа отъедала лишний мегабайт оперативки. Некоторые классы слил в один, некоторое наоборот выделил в отдельные, шейдеры теперь в коде, чтобы не таскать за собой 2 файла.
OpenGL_VideoPlayer.7z (выгружать на гит не вижу смысла, так как это в будущем часть более крупного проекта который и так на гите).
Погуглил видеокодеки и ужаснулся, бесплатных раз два и обчелся, особенно для игр. Везде находятся ffmpeg и libsmacker (как понимаю бесплатный аналог bink от тех же авторов)
Просто я думал что у меня что-то с таймером, ведь если к нему прибавить 7-9 кадров то фпс выравнивается +- к тому что нужен.
Более подробно расписать (по функциям) не смогу, лень компилировать pdb файлы

Тут как видно процессор почти не загружен. В графике по действиям 65% или чуть больше занимает IO.
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
20.02.2021, 14:36
Цитата Сообщение от alecss131 Посмотреть сообщение
потоки для меня темный лес, в особенности синхронизация и обмен данными
Ну в 21 году писать однопоточные приложения(особенно интерактивные с вводом выводом) как-то не очень . Там особо ничего сложного. Можешь почитать книгу Энтони Уильямса, хотя бы первые несколько глав, что бы освоиться и написать асинхронное чтение/декодирование.
Цитата Сообщение от alecss131 Посмотреть сообщение
Просто я думал что у меня что-то с таймером
start вызывай один раз до цикла, а в цикле только end
Цитата Сообщение от alecss131 Посмотреть сообщение
Тут как видно процессор почти не загружен.
Меня именно вкладка CPU Usage интересовала . Вот как тут: Оптимизация для слабых ПК

Не по теме:

Цитата Сообщение от alecss131 Посмотреть сообщение
Погуглил видеокодеки и ужаснулся
Уроки - это для новичков или поверхностного ознакомления. Пора бы уже перейти на стадию, где основное изучение - это чтение официальной документации и штудирование открытого исходного кода используемых библиотек и других программ с их использованием.

0
Модератор
Эксперт Java
 Аватар для alecss131
2835 / 1344 / 403
Регистрация: 11.08.2017
Сообщений: 4,297
Записей в блоге: 2
20.02.2021, 14:53  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
Уроки - это для новичков или поверхностного ознакомления
Я гуглил сами кодеки, а не как их использовать
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
20.02.2021, 15:04

Не по теме:

Цитата Сообщение от alecss131 Посмотреть сообщение
Я гуглил сами кодеки
Забей, я прочитал
Цитата Сообщение от alecss131 Посмотреть сообщение
видеокодеки
как видеоуроки :)



Цитата Сообщение от zayats80888 Посмотреть сообщение
start вызывай один раз до цикла, а в цикле только end
только в end добавь строчку clock = now перед sleep
0
Модератор
Эксперт Java
 Аватар для alecss131
2835 / 1344 / 403
Регистрация: 11.08.2017
Сообщений: 4,297
Записей в блоге: 2
20.02.2021, 15:21  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
только в end добавь строчку clock = now перед sleep
теперь фпс больше чем нужно, если в видео 25 то выдает 30, если в видео 30 то 40+
0
Модератор
Эксперт Java
 Аватар для alecss131
2835 / 1344 / 403
Регистрация: 11.08.2017
Сообщений: 4,297
Записей в блоге: 2
21.02.2021, 13:43  [ТС]
zayats80888, еле получил эти скрины

0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
21.02.2021, 14:45
Цитата Сообщение от alecss131 Посмотреть сообщение
еле получил эти скрины
Вкладку не мог найти?
Как ты и сам видишь, декодинг узкое место. Выноси в отдельный поток.

Не по теме:

А вот почему TextureSubImage подтупливает, тоже интересно. Возможно это из-за дебаг режима драйвера. И на будущее, смотри профилировку во время рабочей нагрузки, там на графике можно выделить анализируемый участок, а то ты походу самый старт программы показал.

0
Модератор
Эксперт Java
 Аватар для alecss131
2835 / 1344 / 403
Регистрация: 11.08.2017
Сообщений: 4,297
Записей в блоге: 2
21.02.2021, 14:57  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
Вкладку не мог найти?
Неа, он писал все в 1 строчку и были ошибки про отладочные символы, пришлось студию настраивать. Теперь каждый запуск новой программы качает символы(((

Цитата Сообщение от zayats80888 Посмотреть сообщение
самый старт программы показал
секунд 40 видео смотрел а потом только нажал стоп и результаты, а так да в дебаге

Добавлено через 2 минуты
Я думал основной затык в чтении кадра)) (это то что внутри while)

Добавлено через 3 минуты

Не по теме:

Еще можно глянуть в Nvidia Nsight, оно у меня и отдельной программой и как плагин для студии, но лень разбираться с ним. Я и так анреал на плюсах начал изучать

0
0 / 0 / 0
Регистрация: 22.01.2020
Сообщений: 32
10.05.2024, 15:08
Пытаюсь собрать ваш пример. Нет файла <gl46.h> Пробовал искать в сети... нет. Где можно его взять? Спасибо.
0
Модератор
Эксперт Java
 Аватар для alecss131
2835 / 1344 / 403
Регистрация: 11.08.2017
Сообщений: 4,297
Записей в блоге: 2
10.05.2024, 15:17  [ТС]
Цитата Сообщение от sevstels Посмотреть сообщение
Где можно его взять?
https://gen.glad.sh/
настройки
Version 4.6
Core
header only
loader
merge
вроде так
получившийся файл переименовать в gl46.h
0
0 / 0 / 0
Регистрация: 22.01.2020
Сообщений: 32
10.05.2024, 16:46
Ох и наворот там у Вас! Компилятор "кровью умылся".
Например такое:

C++
1
2
3
4
void Window::setCenterWindowPos() {
  int pWidth{}, pHeight{};
  ....   
}
window.cpp(46): error C2601: 'pWidth' : local function definitions are illegal
Надо достаточно много исправлять
0
Модератор
Эксперт Java
 Аватар для alecss131
2835 / 1344 / 403
Регистрация: 11.08.2017
Сообщений: 4,297
Записей в блоге: 2
10.05.2024, 21:11  [ТС]
Цитата Сообщение от sevstels Посмотреть сообщение
Надо достаточно много исправлять
Юниформ инициализация, С++17. Хотя гугл пишет про С++11, но я 17 пользуюсь и ошибок нет

Если что версию OpenGL можно понизить, не обязательно использовать мою, вот например то что точно можно в обратную сторону заменять. Мне просто удобно использовать последнюю, удобно и некоторые вещи быстрее, нету ничего такого что есть только в 4.6.
0
0 / 0 / 0
Регистрация: 22.01.2020
Сообщений: 32
11.05.2024, 10:10
>>Юниформ инициализация

В мире статистически достаточно много идиотов и это научный факт.
Вероятно, их по дешевке набрали в команду "улучшать" стандарты.
Но это совсем не значит, что следует делать что они нам предлагают..
Например, если я напишу такое в своих проектах на работе - меня сразу уволят.

Добавлено через 2 часа 6 минут
Не получается собрать ffmpeg.
У вас есть файл конфигурации?

>> libavutil\macros.h(28): fatal error C1083: Cannot open include file: 'libavutil/avconfig.h': No such file or directory
0
0 / 0 / 0
Регистрация: 22.01.2020
Сообщений: 32
14.05.2024, 06:19
Цитата Сообщение от alecss131 Посмотреть сообщение
https://gen.glad.sh/
получившийся файл переименовать в gl46.h
Спасибо, но по рекомендованной ссылке сервис GLAD работает не правильно, *.c файл реализации не создается.

Зато тут правильно: https://glad.dav1d.de/

Описание как подключить:
https://ravesli.com/urok-2-pod... lad/#toc-7

ffmpeg успешно собрал
0
0 / 0 / 0
Регистрация: 22.01.2020
Сообщений: 32
14.05.2024, 08:09
Приложение собралось без ошибок. Окно создается, видео файл открывается. При инициализации буфера ошибка доступа. Посмотрел версию драйвера, 4.6 поддерживается, функция glCreateBuffers - OK в списке есть.
Как исправить - идей нет...
Миниатюры
Воспроизведение видео  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.05.2024, 08:09
Помогаю со студенческими работами здесь

Наложить видео с альфа каналом поверх картинки с камеры, чтобы видео не перекрывало картинку
всем привет! стоит такая задача: есть видео в контейнере .mov, которое содержит альфаканал нужно вывести картинку с камеры, а поверх...

Воспроизведение видео
Имеется форма на которой расположены TPanel и TMediaPlayer. Видео воспроизводится, всё работает, но одно НО. После закрытия формы, видео...

воспроизведение видео на пк
как вылечить данную болезнь на компьютере? картинка 1 видео с пк а картинка 2 с интернета... как будто цветов не хватает на пк

Воспроизведение видео
Я извеняюсь зато что может быть не в тему, но меня интересует как можно воспроизвести видео по такой ссылке: udp://@225.225.225.4:1234 ...

Воспроизведение видео
Подскажите что не так, ошибка когда нажимаю на PictureBox. using System; using System.Collections.Generic; using...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru