读取摄像头的图像,转为原始二进制码流vector<uchar>,加上序列帧的下标ID,利用FFmpeg库中的AV_CODEC_ID_H264编码器进行压缩,转为h264视频流。
以下为C++代码中的转换函数,需要在ubuntu中预装FFmpeg库才可以使用。
#include "MjpegtoH264.h"
FILE* outPath;
AVCodec* dec;
AVCodecContext* dec_ctx;
AVCodec* enc;
AVCodecContext* enc_ctx;
SwsContext* sws_cxt;
AVFrame* src_frame;
AVPacket src_packet;
AVFrame* dst_frame;
int dst_size;
AVPacket dst_packet;
bool InitMjpegToH264(const std::string file_name) {
outPath = fopen(file_name.c_str(), "wb");
av_register_all();
dec = avcodec_find_decoder(AV_CODEC_ID_MJPEG);
dec_ctx = avcodec_alloc_context3(dec);
dec_ctx->width = WIDTH;
dec_ctx->height = HEIGHT;
dec_ctx->pix_fmt = AV_PIX_FMT_YUV420P;
if (dec->capabilities & CODEC_CAP_TRUNCATED) dec_ctx->flags|= CODEC_FLAG_TRUNCATED;
if (avcodec_open2(dec_ctx, dec,NULL) < 0) {