This is actually a very good example of why a framework like DirectShow (as old and "deprecated" as it is) is a good thing: You have a fully defined interface between splitter, decoder, renderer and media player. And the interface will never change. So a media player developer using DirectShow never has to worry about ffmpeg breaking stuff, because the media player developer will just leave it up to DirectShow to pick a suitable external splitter/decoder DirectShow filter installed on the OS.
That said, I don't really understand why ffmpeg has an ever changing API with ever changing structure definitions etc. I find it highly annoying. They should define some sort of higher level API that is designed in such a way that it can be extended without breaking compatability. If they did that, no software using ffmpeg would ever have to worry about ffmpeg breaking stuff again (except for simple bugs being introduced in ffmpeg).
For example, they could create an API where a video frame is simply a CVideoFrame class, with only some methods like "GetDwordProperty(LPSTR propertyName)", GetBoolProperty, GetDataProperty etc. All information of the video frame could be retrieved by the media player by calling these general GetXxxProperty APIs. This would allow the CVideoFrame class to add new properties without changing the API at all.