You can check if mBufferPlayer->isEof() is true from the update loop.
In case you’re wondering, there aren’t any callbacks for things like this at present because we don’t want to call out from the audio thread (which is where we find out in BufferPlayerNode's implementation when we’ve reached EOF) for both performance and thread safety reasons, and at current audio::Context doesn’t have any notion of a main-thread update mechanism.