playback.md

July 14, 2026 · View on GitHub

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

TFFVideoPlayer

VCL-контрол с двумя режимами.

Engine mode

Минимальная настройка – только FileName:

Player.FileName := 'clip.mp4';
Player.HardwareDevice := ffhdAuto;  // опционально, только до Play
Player.Play;

Внутри создаётся TFFPlaybackEngine с собственными TFFReader/TFFDecoder в worker-потоках.

Linked mode

Граф компонентов на форме:

Reader.FileName := 'clip.mp4';
Reader.Open;

VideoDecoder.Reader := Reader;
VideoDecoder.StreamIndex := VideoIdx;
VideoDecoder.HardwareDevice := ffhdD3D11VA;

AudioDecoder.Reader := Reader;
AudioDecoder.StreamIndex := AudioIdx;

Player.VideoDecoder := VideoDecoder;
Player.AudioDecoder := AudioDecoder;
Player.Play;

Play / Pause / Stop / SeekTo управляют TFFLinkedPlayback. Position, Duration, State – из linked-ядра.

Hardware decode

TFFHardwareDevice (uFFHardwareDecode):

ЗначениеОписание
ffhdNoneSoftware (по умолчанию)
ffhdAutoD3D11VA на Windows, VAAPI на Linux
ffhdD3D11VA, ffhdDXVA2, ffhdCUDA, ffhdQSV, …Явный бэкенд
РежимГде задавать
LinkedTFFDecoder.HardwareDevice
EngineTFFVideoPlayer.HardwareDevice или TFFPlaybackEngine.HardwareDevice

Менять HardwareDevice можно только в состоянии psStopped. При ошибке init HW – fallback на software (TrySetup).

HW-кадры переносятся в system memory через av_hwframe_transfer_data перед libswscale.

A/V sync

TFFPlaybackClock:

  • при наличии аудио – master time из audio PTS (SetAudioTimeMs);
  • до первого audio frame – wall clock (избегает deadlock при старте);
  • WaitUntil / IsLate – задержка или пропуск «опоздавших» видеокадров.

Аудиовыход Windows: WaveOut (uFFAudioOutputWin), ring buffer 8 слотов, Flush при Stop.

События плеера

СобытиеНазначение
OnStateChangepsStopped / psPlaying / psPaused
OnFrameHookПерехват TFFFrame до конвертации
OnVideoHookПерехват BGRA-буфера
OnAudioHookПерехват PCM перед выводом

TFFPlayerControl

Композитный VCL-контрол: TFFVideoPlayer + trackbar + play/pause/stop. Свойства FileName, VideoDecoder, SubtitleDecoder пробрасываются на внутренний плеер.

FMX

TFFFMXVideoPlayer – FMX-аналог на базе TFFPlaybackEngine / linked mode. Требует FMX-зависимости при сборке.