前言
项目需要,获取WebRTC封装的VideoFrame中的byte,效率很慢,仅供参考
方法
VideoFrame自带转I420的接口,转I420后,根据格式去除Y,U,V各分量,然后拷贝到数组中(通过实现onFrame接口,然后addSink实现接口的对象获取到VideoFrame)
代码
public void onFrame(VideoFrame var1) {
VideoFrame.I420Buffer buffer = var1.getBuffer().toI420();
int height = buffer.getHeight();
int width = buffer.getWidth();
ByteBuffer yBuffer = buffer.getDataY();
ByteBuffer uBuffer = buffer.getDataU();
ByteBuffer vBuffer = buffer.getDataV();
int yStride = buffer.getStrideY();
int uStride = buffer.getStrideU();
int vStride = buffer.getStrideV();
byte[] data = new byte[height * width * 3 / 2];
yBuffer.get(data, 0, height * width);
int uOffset = width * height;
int vOffset = width * height * 5 / 4;
for (int i = 0; i < height / 2; i++) {
uBuffer.position(i * uStride);
uBuffer.get(data, uOffset, width / 2);
uOffset += width / 2;
vBuffer.position(i * vStride);
vBuffer.get(data, vOffset, width / 2);
vOffset += width / 2;
}
buffer.release();
}