# 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 不能定期輸出關鍵幀,則可能導致對方接收到視頻流之后無法正常解碼。