当前有两个项目:
AV/
├── code/ # 核心代码库(不依赖Qt)
│ ├── base/ # 基础设施
│ │ ├── logger.h/.cpp # 统一日志系统
│ │ ├── thread_base.h/.cpp # 线程基类
│ │ ├── common.h/.cpp # 通用工具
│ │ └── types.h # 类型定义
│ ├── codec/ # 编解码模块
│ │ ├── decoder/ # 解码器
│ │ │ ├── audio_decoder.h/.cpp
│ │ │ ├── video_decoder.h/.cpp
│ │ │ └── decoder_base.h/.cpp
│ │ └── encoder/ # 编码器
│ │ ├── audio_encoder.h/.cpp
│ │ ├── video_encoder.h/.cpp
│ │ └── encoder_base.h/.cpp
│ ├── capture/ # 采集模块
│ │ ├── audio_capture.h/.cpp
│ │ └── video_capture.h/.cpp
│ ├── muxer/ # 复用器
│ │ └── av_muxer.h/.cpp
│ └── utils/ # 工具类
│ ├── frame_queue.h/.cpp
│ ├── packet_queue.h/.cpp
│ └── sync_helper.h/.cpp
├── AvPlayer/ # 播放器项目
│ ├── ui/ # Qt UI相关
│ ├── player/ # 播放器逻辑
│ └── main.cpp
└── AvRecorder/ # 录制器项目
├── ui/ # Qt UI相关
├── recorder/ # 录制器逻辑
└── main.cpp
AV/code/base/ 目录logger.h/.cppthread_base.h/.cpp(基于现有ThreadBase.h改进)types.hAV/code/codec/ 目录AV/code/capture/// 支持Qt的qDebug等,但封装为独立接口
class Logger {
public:
static Logger& instance();
void debug(const std::string& msg);
void info(const std::string& msg);
void warning(const std::string& msg);
void error(const std::string& msg);
// Qt兼容接口
void qtDebug(const QString& msg);
void qtInfo(const QString& msg);
};
// 宏定义,便于使用
#define LOG_DEBUG(msg) Logger::instance().debug(msg)
#define LOG_INFO(msg) Logger::instance().info(msg)
class CodecBase {
public:
virtual bool open(const CodecParams& params) = 0;
virtual bool process(AVFrame* frame) = 0;
virtual void close() = 0;
virtual ~CodecBase() = default;
};
class EncoderBase : public CodecBase {
public:
virtual AVPacket* encode(AVFrame* frame) = 0;
};
class DecoderBase : public CodecBase {
public:
virtual AVFrame* decode(AVPacket* packet) = 0;
};
AV/code/)logger.h/cpp)thread_base.h/cpp)common.h/cpp, types.h)test_basic.cpp)abstract_codec.h/cpp)video_encoder.h/cpp)
audio_encoder.h/cpp)
test_codec.cpp)codec_video_decoder.h/cpp)
codec_audio_decoder.h/cpp)
test_decoder.cpp)capture_video_capturer.h/cpp)
capture_audio_capturer.h/cpp)
muxer_*.h/cpp)
utils_*.h/cpp)
player_core.h/cpp)
queue_manager.h/cpp)
thread_manager.h/cpp)
player_adapter.h/cpp)
test_player.cpp)建议从步骤1开始,创建基础目录结构和日志系统。每完成一个步骤,都要进行充分测试,确保项目功能正常后再进行下一步。