This has been tested with VRChat in Proton, and with one change to `IMFMediaEngine` and some small changes to winegstreamer it is able to play YouTube videos in Unity video player based players. The AVPro based players have many more issues, because that API uses YouTube's HLS files instead of the direct MP4 links, and new media source would need many fixes to be able to play HLS correctly. Which it isn't supposed to do anyway since that's the `IMFMediaEngine`'s job.
There are some things that I did not implement: - `IMFByteStreamBuffering::SetBufferingParams`, the parameters don't have any obvious effect on the functionality of the byte stream or the HTTP requests it makes. It's probably not used by anything anyway. - How much data has to be pre-buffered before it considers buffering to be complete and sends `MEBufferingStopped`. I didn't put much time into this and just chose 64 KiB. - Persistent caching of downloaded data; Native seems to be able to omit redownloading data it has previously downloaded before by using the `If-Modified-Since` header. This seems like more work and unnecessary complexity than it's worth. - Mapping of all the WinHTTP errors to HRESULTs; HTTP status codes are handled, as well as the most common `ERROR_WINHTTP_*` values, but anything else just goes through `HRESULT_FROM_WIN32`. I don't even know how to trigger most of the WinHTTP errors; It's probably fine, the most important info is just that there has been an error anyway.