Basically refactor the former archtecture

TODO: extract many trivival functions contained in FFPlayer into separate interfaces & refine them