As of Android 4.1 they added a MediaCodec Api that allows you to access pretty much everything.
And in Android 4.3 they added the possibility to get the stream from a Surface.
http://developer.android.com/reference/android/media/MediaCodec.html
Before that, you are pretty much stuck. You can try to use the ffmpeg + JNI via NDK solution. It seems pretty hard to accomplish but the good news is if you make it, your frames will already be read at the C++ level.