整体方案:
采集端:摄像头采集(YUV)->编码(YUV转H264)->RTMP推流
客户端:RTMP拉流->解码(H264转YUV)->YUV显示(SDL2)
YUV转H264是一个视频编码的过程,具体的代码实现过程如下:
#include <math.h>
#include <stdlib.h>
#ifdef __cplusplus
extern "C"
{
#endif
#include <libavutil/opt.h>
#include <libavcodec/avcodec.h>
#include <libavutil/channel_layout.h>
#include <libavutil/common.h>
#include <libavutil/imgutils.h>
#include <libavutil/mathematics.h>
#include <libavutil/samplefmt.h>
#include <libavutil/frame.h>
#include <libavformat/avformat.h>
#include <libswscale/swscale.h>
#ifdef __cplusplus
}
#endifint framenum = 0;int main(int argc, char **argv)
{AVFrame *frame;AVCodec *codec = NULL;AVPacket packet;AVCodecContext *codecContext;int readSize=0;int ret=0,getPacket;FILE * fileIn,*fileOut;int frameCount=0;/* register all the codecs */av_register_all();if(argc!=2){fprintf(stdout,"usage:./test input.yuv\n");return -1;}//1.我们需要读一帧一帧的数据,所以需要AVFrame结构