//在編碼視頻時,并不是每次呼叫avcodec_send_frame都會在avcodec_receive_packet中的到編碼后的資料,可能連續送進去幾幀沒有一幀輸出,然后后面再送進去一幀就出來好幾幀,因此在接受時avcodec_receive_packet應該設定在while中,
在編碼器資料不足時會回傳EAGAIN,讀到資料尾時會回傳AVERROR_EOF,
在最后應該向avcodec_send_frame(enc_ctx, NULL)傳入NULL資料,這樣編碼器知道后面不會再有資料,就把放在緩沖區中的資料,全部編碼并通過avcodec_receive_packet輸出出來,
func()
{
avcodec_send_frame(enc_ctx, frame);
if(ret < 0)
{
//Error
}
while(ret >= 0)
{
ret = avcodec_receive_packet(enc_ctx, newpkt);
if(ret == AVERROR(EAGAIN) || ret == AVERROR_EOF){return;}
else if(ret < 0){//Error}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/321301.html
標籤:其他
