#ifndef __AUDIO_ENCODER_H__ #define __AUDIO_ENCODER_H__ #include "abstract_encoder.h" #include #include template<> class Encoder : public AbstractEncoder { public: struct Param { int bitRate; // 可选:优先使用的编码器名称,例如 "aac"、"libopus"、"libmp3lame" std::string name; }; ~Encoder() { Close(); } bool Open(const Param& audioParma, AVFormatContext* fmtCtx); virtual void Close() override; virtual bool PushFrame(AVFrame* frame, bool isEnd, uint64_t pts) override; // 获取可用的音频编码器名称列表(按优先级排序) static const std::vector& GetUsableEncoders(); private: bool _Init(const Param& audioParam, AVFormatContext* fmtCtx); static void _FindUsableEncoders(); static std::vector _usableEncoders; // 常见音频编码器名称:优先保证与常见容器/推流(flv/mp4/rtmp)兼容 static constexpr const char* _encoderNames[5] = { "aac", // 通用AAC "libfdk_aac", // 可选的高质量AAC "libopus", // Opus "opus", // 有些构建使用此名 "libmp3lame" // MP3(不建议用于flv) }; }; #endif