| 12345678910111213141516171819202122232425262728293031323334353637383940 |
- #ifndef __AUDIO_ENCODER_H__
- #define __AUDIO_ENCODER_H__
- #include "abstract_encoder.h"
- #include <string>
- #include <vector>
- template<>
- class Encoder<MediaType::AUDIO> : 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<std::string>& GetUsableEncoders();
- private:
- bool _Init(const Param& audioParam, AVFormatContext* fmtCtx);
- static void _FindUsableEncoders();
- static std::vector<std::string> _usableEncoders;
- // 常见音频编码器名称:优先保证与常见容器/推流(flv/mp4/rtmp)兼容
- static constexpr const char* _encoderNames[5] = {
- "aac", // 通用AAC
- "libfdk_aac", // 可选的高质量AAC
- "libopus", // Opus
- "opus", // 有些构建使用此名
- "libmp3lame" // MP3(不建议用于flv)
- };
- };
- #endif
|