Зависит от браузера и операционной системы.
Chrome честно использует куски из ffmpeg, а если видеокарта поддерживает (а она обычно поддерживает), то декодирует прямо на ней.
Видеофайл, обычно, это сложный контейнер, содержащий много потоков данных - звук, видео, субтитры и так далее. Процесс упаковки в контейнер называется муксинг, распаковки - демуксинг. Соответственно, кусок сначала попадает в демуксер и из него вынимаются нужные потоки.
Демуксер может быть частью ffmpeg или gstreamer, может быть частью DirectX, может быть частью Андроида (AMediaFormat).
После демуксера конкретно видео поступает в декодер - аппаратный (на видеокарте) или программный, а потом на экран.
Программный декодер опять же может быть частью ffmpeg или gstreamer, или из DirectX (это к вопросу, используются ли установленные кодеки)