Ну, на самом деле, если вам нужно реализовать действительно проигрыватель с быстрым рендерингом, вам придется возиться с оптимизацией буфера, закадровым рендерингом, потоковой передачей буфера - что-то из этого.Но поскольку вы новичок в Qt, есть простые, но работающие решения:
- Попробуйте формат пикселей AV_PIX_FMT_RGBA, рендеринг простой текстуры в некоторый прямоугольник поверхности рисования достаточно прост.
- Когда я сам захотел попробовать то же самое, я нашел этого замечательного парня, который реализовал полный рабочий пример здесь .
Класс QFFmpegGLWidget по ссылке выше достаточен для того, чтобы вы получилиидея.Преобразование в RGB выполняется с помощью фрагментного шейдера, там работает старый добрый трюк с 3 текстурами, примененными с GL_LUMINANCE.
Я боролся со своим собственным, почти аналогичным решением, тем не менее получил изображение с камеры (rtsp) с неправильными, испорченными цветами.Итак, убедитесь, что вы получаете кадры в YUV420p .В случае, если другой формат пикселя вам подходит, просмотрите эти китайские ресурсы, чтобы углубить его (перевод Google делает их читабельными):
- YUV-шейдерные преобразования
- YUV 2 RGB математика
Удачи!