#ifndef _FFMPEG_ENCODER_H_ #define _FFMPEG_ENCODER_H_ #ifdef _WIN32 extern "C" { #include "libavcodec/avcodec.h" #include "libavformat/avformat.h" #include "libavutil/imgutils.h" #include "libavutil/opt.h" } #else #ifdef __cplusplus extern "C" { #endif extern "C" { #include #include #include #include } #ifdef __cplusplus }; #endif #endif #include class VideoEncoder { public: VideoEncoder(); ~VideoEncoder(); int Init(); int Encode( const uint8_t* pData, int nSize, std::function on_encoded_image); virtual int OnEncodedImage(char* encoded_packets, size_t size); void ForceIdr(); private: int frame_width_ = 1280; int frame_height = 720; int keyFrameInterval_ = 3000; int maxBitrate_ = 1000; int fps_ = 30; int max_payload_size_ = 3000; std::vector> encoded_packets_; unsigned char* encoded_image_ = nullptr; FILE* file_ = nullptr; unsigned char* nv12_data_ = nullptr; unsigned int seq_ = 0; const AVCodec* codec_ = nullptr; AVCodecContext* codec_ctx_ = nullptr; AVFrame* frame_ = nullptr; AVPacket* packet_; bool got_output_ = false; uint32_t pts_ = 0; }; #endif