If you implement IMFByteStream, you have to implement IMFAsyncCallback too.
I can't explain here. But when i will update my project with Mpeg2 source: MFNode
you will see an implementation of IMFByteStream. I use it because original IMFByteStream fails on some video files with no reason. My implementation works well with all files i've tested. (For now my implementation does not handle big file.)
Edit: i checked my code. I don't implement IMFByteStream. i created a class that acts like IMFByteStream. I implement IMFAsyncCallback for BeginRead/EndRead.