视频监控客户端-GB28181之转码库-转码格式支持H265、H264、MPEG4、MPEG2
如需交流可联系QQ:123011785
转码库的基本内容是通过ffmepg的函数进行转码,主要针对市面上的基本码流格式进行转码,可以根据分辨率进行码流转换,适用于手机端码流推送,转码效率基本在10:1的比例。
也可以转码成不同格式的码流,支持
H265、H264、MPEG4、MPEG2
转码时间基本在1s内完成。
下面粘贴下头文件源码:
#ifndef __STREAMTRANS_H_ #define __STREAMTRANS_H_ #ifndef __int64 #define __int64 long long #endif typedef enum { STREAMTRANS_MODE_NONE, STREAMTRANS_MODE_DEC, STREAMTRANS_MODE_FILTER, STREAMTRANS_MODE_ENC, }StreamTransMode_E; typedef enum { STREAM_YUV420 = -1, STREAM_NONE = 0, STREAM_MPEG2 = 2, //值对应FFMEPG STREAM_MPEG4 = 13, STREAM_H264 = 28, STREAM_H265 = 174 }StreamCodec_E; typedef struct _StreamTransIn { StreamTransMode_E eMode; //转换模式 解码 滤镜 编码 unsigned char* pBufIn[3]; //输入码流 int nSizeIn[3]; //输入码流大小 StreamCodec_E eType; //码流的编码类型 int nWidth; //图像分辨率宽度 int nHeight; //图像分辨率高度 int nFps; //图像帧率 char* strFilter; //滤镜描述 }StreamTransIn; typedef struct _StreamTransOut { unsigned char* pBufOut[3]; //输出流 int nSizeOut[3]; //输出流大小 __int64 pts; //输出流PTS(显示时间戳) __int64 dts; //输出流DTS(解码时间戳) StreamCodec_E eType; //码流的编码类型 int nWidth; //图像分辨率宽度 int nHeight; //图像分辨率高度 int nFps; //图像帧率 int nMbps; //图像码率 }StreamTransOut; #ifdef __cplusplus extern "C"{ #endif #include "libavcodec/avcodec.h" #include "libswscale/swscale.h" #include "libavformat/avformat.h" #include "libavutil/imgutils.h" #include "libavutil/opt.h" #include "libavfilter/avfiltergraph.h" #include "libavfilter/buffersink.h" #include "libavfilter/buffersrc.h" //打开转码句柄 long STREAMTRANS_Open(void); //关闭转码句柄 long STREAMTRANS_Close(long Handle); //开始转换 long STREAMTRANS_Trans(long Handle, StreamTransIn* pIn, StreamTransOut* pOut); //拷贝数据结构(内部自动alloc数据空间) StreamTransIn* STREAMTRANS_CloneYUV(StreamTransOut* src); #ifdef __cplusplus } #endif #endif