audio_encoder.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #ifndef __AUDIO_ENCODER_H__
  2. #define __AUDIO_ENCODER_H__
  3. #include "abstract_encoder.h"
  4. #include <string>
  5. #include <vector>
  6. template<>
  7. class Encoder<MediaType::AUDIO> : public AbstractEncoder
  8. {
  9. public:
  10. struct Param
  11. {
  12. int bitRate;
  13. // 可选:优先使用的编码器名称,例如 "aac"、"libopus"、"libmp3lame"
  14. std::string name;
  15. };
  16. ~Encoder() { Close(); }
  17. bool Open(const Param& audioParma, AVFormatContext* fmtCtx);
  18. virtual void Close() override;
  19. virtual bool PushFrame(AVFrame* frame, bool isEnd, uint64_t pts) override;
  20. // 获取可用的音频编码器名称列表(按优先级排序)
  21. static const std::vector<std::string>& GetUsableEncoders();
  22. private:
  23. bool _Init(const Param& audioParam, AVFormatContext* fmtCtx);
  24. static void _FindUsableEncoders();
  25. static std::vector<std::string> _usableEncoders;
  26. // 常见音频编码器名称:优先保证与常见容器/推流(flv/mp4/rtmp)兼容
  27. static constexpr const char* _encoderNames[5] = {
  28. "aac", // 通用AAC
  29. "libfdk_aac", // 可选的高质量AAC
  30. "libopus", // Opus
  31. "opus", // 有些构建使用此名
  32. "libmp3lame" // MP3(不建议用于flv)
  33. };
  34. };
  35. #endif