视频解码流程与音频基本一致。
给出实例代码。
#include<iostream>
#include<string>
#include<vector>
#include<fstream>
using namespace std;
extern "C"
{
#include<libavcodec/avcodec.h>
#include<libavutil/frame.h>
#include<libavutil/mem.h>
}
constexpr int VIDEO_INBUF_SIZE = 20480;
constexpr int VIDEO_REFILL_THRESH = 4096;
static char err_buf[128] = { 0 };
static char* av_get_err(int errnum)
{
av_strerror(errnum, err_buf, 128);
return err_buf;
}
static void print_video_frame(const AVFrame* frame)
{
cout << "width: " << frame->width << endl;
cout << "height: " << frame->height << endl;
cout << "format: " << frame->format << endl;
}
static void decode(AVCodecContext* dec_ctx, AVPacket* pkt, AVFrame* frame, ofstream& outfile)
{
int ret;
ret = avcodec_send_packet(dec_ctx, pkt);
if (ret == AVERROR