while (av_read_frame(fmtCtx, packet) >= 0)
{
if (packet->stream_index == VideoStream)
{
int ret = avcodec_send_packet(codecContext, packet);
if (ret < 0 || ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
{
std::cout << "avcodec_send_packet: " << ret << std::endl;
char szErr[1024] = { 0 };
av_strerror(ret, szErr, sizeof(szErr));
//break;
// 尝试滤过处理
continue;
}
while (ret >= 0)
{
ret = avcodec_receive_frame(codecContext, frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
{
break;
}
std::cout << "frame: " << codecContext->frame_number << std::endl;
}
}
av_packet_unref(packet);
}
注意当avcodec_send_packet 返回值出现 -1094995529 可以直接过滤掉 不做处理,直接continue而不是用break