ExternalVideoFrame
外部视频帧。
C++
struct ExternalVideoFrame {
ExternalVideoFrame()
: type(VIDEO_BUFFER_RAW_DATA),
format(VIDEO_PIXEL_DEFAULT),
buffer(NULL),
stride(0),
height(0),
cropLeft(0),
cropTop(0),
cropRight(0),
cropBottom(0),
rotation(0),
timestamp(0),
eglContext(NULL),
eglType(EGL_CONTEXT10),
textureId(0),
metadata_buffer(NULL),
metadata_size(0){}
enum EGL_CONTEXT_TYPE {
EGL_CONTEXT10 = 0,
EGL_CONTEXT14 = 1,
};
enum VIDEO_BUFFER_TYPE {
VIDEO_BUFFER_RAW_DATA = 1,
VIDEO_BUFFER_ARRAY = 2,
VIDEO_BUFFER_TEXTURE = 3,
};
VIDEO_BUFFER_TYPE type;
VIDEO_PIXEL_FORMAT format;
void* buffer;
int stride;
int height;
int cropLeft;
int cropTop;
int cropRight;
int cropBottom;
int rotation;
long long timestamp;
void *eglContext;
EGL_CONTEXT_TYPE eglType;
int textureId;
uint8_t* metadata_buffer;
int metadata_size;
};
type
视频类型。详见 VIDEO_BUFFER_TYPE
。
format
像素格式。详见 VIDEO_PIXEL_FORMAT
。
buffer
视频缓冲区。
stride
传入视频帧的行间距,单位为像素而不是字节。对于 Texture,该值指的是 Texture 的宽度。
height
传入视频帧的高度。
eglContext
该参数仅适用于 Texture 格式的视频数据。
- 当使用 Khronos 定义的 OpenGL 接口 (javax.microedition.khronos.egl.*)时,需要将 eglContext 设置给这个字段。
- 当使用 Android 定义的 OpenGL 接口 (android.opengl.*)时,需要将 eglContext 设置给这个字段。
eglType
该参数仅适用于 Texture 格式的视频数据。指该视频帧的 Texture ID。
textureId
该参数仅适用于 Texture 格式的视频数据。为一个输入的 4x4 变换矩阵,典型值为一个单位矩阵。
metadata_buffer
该参数仅适用于 Texture 格式的视频数据。指 MetaData 的数据缓冲区,默认值为 NULL
。
metadata_size
该参数仅适用于 Texture 格式的视频数据。指 MetaData 的大小,默认值为 0
。
cropLeft
原始数据相关字段。指定左边裁剪掉的像素数量。默认为 0。
cropTop
原始数据相关字段。指定顶边裁剪掉的像素数量。默认为 0。
cropRight
原始数据相关字段。指定右边裁剪掉的像素数量。默认为 0。
cropBottom
原始数据相关字段。指定底边裁剪掉的像素数量。默认为 0。
rotation
原始数据相关字段。指定是否对传入的视频组做顺时针旋转操作,可选值为 0, 90, 180, 270。默认为 0。
timestamp
传入的视频帧的时间戳,以毫秒为单位。不正确的时间戳会导致丢帧或者音视频不同步。