I haven't really experimented with audiostreamer, but I would think that the RecordBuffer is called when the buffer is full, which you could calculate the time by reference to the samplerate and buffer size.
You can't have any influence over the timing, you just have to move the buffers between the two when the record buffer is full, and then wait for the next buffer. The problem comes when your processing takes longer than the time to fill the next buffer, then you will get jitters.
AudioStreamer uses AudioTrack under the hood, if you are manipulating the data in anyway, I would think it would be more efficient to use the AudioTrack library to access AudioRecord and AudioTrack directly, as you will remove an extra threaded process.
Attached is an example using AudioTrack, AudioRecord and a thread which just passes the recorded data to the output without any processing, you can hear the latency introduced by the process. It requires the AudioTrack and AudioRecord Libraries, and the Threading library.