If you get an isStreamStarted() after a video starts, that should be a reliable indication that a rebuffer happened. And the structure that you get back from GetInfo() has an isUnderrun flag that you can use to help determine if the event was triggered by a buffer underrun.