# 4.2 视频数据编码
**接口定义**: DWORD MediaCodec_VideoCodec_Encode(MediaCodecContext* lpContext, MediaPacket* InPacket, MediaPacket* OutPacket);
**返 回 值**:编码成功返回 0,否则返回出错代码,或-1
**参 数** :
MediaCodecContext* lpContext CODEC 上下文句柄
MediaPacket* InPacket 输入数据包,指向视频帧 YUV 数据
MediaPacket* OutPacket 输出数据包,返回编码后的视频流
**详细说明**:
AnyChat 内核每次输入一帧完整的图像数据,编码完成后,CODEC 内部将编码后的数据保存在“OutPacket”所指向的内存空间,并将“OutPacket”中的“dwSize”修改为实际输出的数据长度。
当 视 频 编 码 CODEC 输 出 的 数 据 是 关 键 帧 时 , 标 志 域 需 要 设 置“ MEDIACODEC_FLAGS_KEYFRAME ”标志 ( 当 初 始 化 编 码 器 时 设置MEDIACODEC_FLAGS_WANTSPSPPS 标志后,AnyChat 内核会自动探测帧类型并设置关键帧标志)。
AnyChat 内核要求编码器能定期输出关键帧(如 H.264 的 IDR 帧,同时包含
PPS、SPS 等 NAL 信息),输出间隔可参考 CODEC 上下文句柄中的 dwGopSize 参数值,如果 CODEC 不能定期输出关键帧,则可能导致对方接收到视频流之后无法正常解码。