Build a Delphi FireMonkey component that provides a way to play a video file in macOS while sending the bits for each video frame to a callback function. This component must provide a way to open a video file as well as provide basic transport functions like play, pause, stop, and stream position. Audio must also be supported with the basic functions of setting the audio level and mute.
Each video frame must be provided through a callback function passing it a TBitmapSurface (FMX). This must be passed at the properly scheduled time so that the video is synchronized with the audio.
This component must be built with Delphi with calls into the native macOS API so that it only uses the media components provided by macOS. It is acceptable to build part of this solution using Object C and/or Swift if it will help in building the interface between Delphi and the OS. If so, the complete XCode project must also be included.
This component should not do any video decoding itself nor should it use any third-party tool either. This is to avoid patent infringements. All video and audio decoding must take place using native OS components.
For clarification: this component does not display video on its own. All video frames are provided thought a callback function as data in a TBitmapSurface.
The component must also provide a callback for certain media events including when the video is ready to play and when the video has reached the end.
The component must be able to play media both from a file but also from a TStream source.
The attached MacOsVideo.pas file provides the class prototype with documentation to complete this project.