# LiveStream **Repository Path**: peng5233/LiveStream ## Basic Information - **Project Name**: LiveStream - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 13 - **Created**: 2025-09-17 - **Last Updated**: 2025-09-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README HMOS_LiveStream项目架构分析 我已为您创建了一个SVG格式的架构图,直观展示了HMOS_LiveStream项目的组件关系、调用流程和数据流向。您可以在路径下查看该图表。 项目整体架构 该项目是HarmonyOS平台上的音视频处理应用,主要分为两个核心模块: 1. Player模块:负责音视频播放功能 2. Recorder模块:负责音视频录制功能,且依赖于Player模块 主要组件及调用关系 1. 模块间依赖关系 Recorder模块依赖Player模块 两个模块均依赖核心功能组件和通用工具 整体采用分层架构,从JS调用层到Native实现层再到系统API层 2. 核心功能组件 Player组件: AudioDecoder:音频解码组件 Demuxer:媒体解复用组件 Recorder组件: VideoEncoder:视频编码组件,支持人脸ROI优化 AudioEncoder:音频编码组件 Muxer:媒体复用组件,用于生成最终文件 AudioCapturer:音频采集组件 渲染组件: PluginRender:插件渲染实现 PluginManager:插件管理 RenderThread:渲染线程 通用工具: SampleCallback:回调处理 AudioBgmQueue:BGM队列管理 SampleInfo:样本信息定义 日志和错误处理工具 线程模型 项目采用多线程架构处理不同的任务: Player线程: audioDecInputThread:音频解码输入线程 audioDecOutputThread:音频解码输出线程 Recorder线程: encOutputThread:编码输出线程 audioEncInputThread:音频编码输入线程 audioEncOutputThread:音频编码输出线程 renderThread:渲染线程 数据流向 播放流程 输入文件 → Demuxer解复用 → AudioDecoder解码 → 音频渲染输出 录制流程 相机/麦克风采集 → 编码器编码 → Muxer混合封装 → 输出文件 特殊功能数据流 音频混合:麦克风音频 + BGM(来自AudioBgmQueue) → 混音处理 → AudioEncoder编码 人脸ROI优化:相机人脸信息 → VideoEncoder → 优化编码区域(提升人脸画质) 技术特点 1. 单例模式:Player和Recorder均采用单例模式,确保全局唯一实例 2. NAPI桥接:通过PlayerNative和RecorderNative实现JS与C++的桥接 3. 异步回调:使用回调机制处理事件通知和数据流传递 4. ROI编码:支持基于人脸检测的ROI(感兴趣区域)编码优化 5. 音视频同步:通过时间戳和队列管理实现音视频同步 这个架构图清晰展示了项目的组件结构、调用关系、线程模型和数据流向,有助于您理解整个项目的设计思路和实现方式。 Mask 复制 删除 请分析本工程,梳理出各个代码文件中的引用和调用关系 Builder 思考过程 我需要分析这个HMOS_LiveStream-dev工程的代码结构和文件间引用关系。首先,我将查看CMakeLists.txt文件,这通常包含项目的整体结构和依赖关系,帮助我理解项目的组织方式。 CMakeLists.txt 1 - 200 根据CMakeLists.txt文件,我了解到项目分为两个主要模块:player和recorder。player包含播放功能,recorder包含录制功能并依赖player。接下来,我将查看PlayerNative.cpp和Player.cpp文件,了解播放器模块的核心实现和引用关系。 sample\player\PlayerNative.cpp 1 - 200 sample\player\Player.cpp 1 - 200 从PlayerNative.cpp和Player.cpp可以看出,Player模块实现了音视频播放功能。PlayerNative作为JS与C++的桥接层,调用Player单例的方法。Player类依赖于AudioDecoder、Demuxer和SampleCallback等组件。接下来,我将查看Player.h以了解完整的类定义,并检查Recorder相关文件。 sample\player\Player.h 1 - 100 sample\recorder\RecorderNative.cpp 1 - 100 sample\recorder\Recorder.cpp 1 - 200 从Player和Recorder的相关文件可以看出,两个模块都使用了单例模式,并且Recorder依赖于Player。现在我需要查看Recorder.h以了解完整的录制器类定义,以及一些关键功能组件的头文件,如VideoEncoder.h、AudioEncoder.h、Muxer.h等,来梳理更完整的引用关系。 sample\recorder\Recorder.h 1 - 100 capbilities\include\VideoEncoder.h 1 - 80 capbilities\include\AudioEncoder.h 1 - 80 capbilities\include\Muxer.h 1 - 80 现在我需要继续查看其他核心组件的头文件,如AudioDecoder.h、Demuxer.h以及渲染相关的文件,以便更全面地梳理项目的引用和调用关系。 capbilities\include\AudioDecoder.h 1 - 80 capbilities\include\Demuxer.h 1 - 80 capbilities\include\AudioCapturer.h 1 - 80 render\include\render_thread.h 1 - 80 现在我需要查看一些关键组件的实现文件,以便更完整地了解它们的交互方式。我将查看VideoEncoder.cpp和AudioEncoder.cpp,以及渲染相关的PluginRender.cpp,这些是项目的核心实现文件。 capbilities\VideoEncoder.cpp 1 - 150 capbilities\AudioEncoder.cpp 1 - 100 render\PluginRender.cpp 1 - 100 # HMOS_LiveStream项目代码结构与引用关系分析 ## 项目概览 HMOS_LiveStream是一个HarmonyOS平台上的音视频处理项目,主要实现了音视频播放和录制功能。项目采用C++开发,通过NAPI机制与JavaScript层进行交互。 ## 整体架构 项目分为两个主要模块: player(播放器) 和 recorder(录制器) ,它们共享一些核心功能组件。整体架构如下: ## 模块依赖关系 ### 1. 模块间依赖 具体从CMakeLists.txt可以看出: # player库依赖的基础库 target_link_libraries(player PUBLIC ${BASE_LIBRARY}) # recorder库依赖player库和基础库 target_link_libraries(recorder PUBLIC ${BASE_LIBRARY} player) 思考过程 我将创建一个SVG格式的架构图,展示HMOS_LiveStream项目的组件关系、调用流程和线程模型。这个图表将帮助直观理解项目的整体结构和各模块之间的交互方式。 architecture_diagram.svg +230 -0 审查 HMOS_LiveStream项目架构分析 我已为您创建了一个SVG格式的架构图,直观展示了HMOS_LiveStream项目的组件关系、调用流程和数据流向。您可以在c:\Users\Roc\Downloads\HMOS_LiveStream-dev\HMOS_LiveStream-dev\entry\src\main\cpp\architecture_diagram.svg路径下查看该图表。 项目整体架构 该项目是HarmonyOS平台上的音视频处理应用,主要分为两个核心模块: 1. Player模块:负责音视频播放功能 2. Recorder模块:负责音视频录制功能,且依赖于Player模块 主要组件及调用关系 1. 模块间依赖关系 Recorder模块依赖Player模块 两个模块均依赖核心功能组件和通用工具 整体采用分层架构,从JS调用层到Native实现层再到系统API层 2. 核心功能组件 Player组件: AudioDecoder:音频解码组件 Demuxer:媒体解复用组件 Recorder组件: VideoEncoder:视频编码组件,支持人脸ROI优化 AudioEncoder:音频编码组件 Muxer:媒体复用组件,用于生成最终文件 AudioCapturer:音频采集组件 渲染组件: PluginRender:插件渲染实现 PluginManager:插件管理 RenderThread:渲染线程 通用工具: SampleCallback:回调处理 AudioBgmQueue:BGM队列管理 SampleInfo:样本信息定义 日志和错误处理工具 线程模型 项目采用多线程架构处理不同的任务: Player线程: audioDecInputThread:音频解码输入线程 audioDecOutputThread:音频解码输出线程 Recorder线程: encOutputThread:编码输出线程 audioEncInputThread:音频编码输入线程 audioEncOutputThread:音频编码输出线程 renderThread:渲染线程 数据流向 播放流程 输入文件 → Demuxer解复用 → AudioDecoder解码 → 音频渲染输出 录制流程 相机/麦克风采集 → 编码器编码 → Muxer混合封装 → 输出文件 特殊功能数据流 音频混合:麦克风音频 + BGM(来自AudioBgmQueue) → 混音处理 → AudioEncoder编码 人脸ROI优化:相机人脸信息 → VideoEncoder → 优化编码区域(提升人脸画质) 技术特点 1. 单例模式:Player和Recorder均采用单例模式,确保全局唯一实例 2. NAPI桥接:通过PlayerNative和RecorderNative实现JS与C++的桥接 3. 异步回调:使用回调机制处理事件通知和数据流传递 4. ROI编码:支持基于人脸检测的ROI(感兴趣区域)编码优化 5. 音视频同步:通过时间戳和队列管理实现音视频同步 这个架构图清晰展示了项目的组件结构、调用关系、线程模型和数据流向,有助于您理解整个项目的设计思路和实现方式。 Mask 复制 删除 你生成的svg 绘制的有问题。 请以文本字符或者可生成图的代码表示 Builder 思考过程 由于用户反馈之前生成的SVG图有问题,我将创建一个文本格式的项目架构图,以更清晰地表示代码结构、调用关系和数据流。 architecture_text_diagram.txt +75 -0 审查 已为HMOS_LiveStream项目创建了文本格式的架构图,文件路径为: architecture_text_diagram.txt 该文本图详细展示了以下内容: 1. 整体架构层次:从应用层(JS/TS)到底层OHOS平台API的完整分层结构 2. 核心模块:Player和Recorder两大主要功能模块及其Native接口层 3. 能力组件:AudioDecoder、Demuxer、VideoEncoder、AudioEncoder、Muxer、AudioCapturer等核心组件 4. 调用流程:详细的Player播放流程和Recorder录制流程 5. 线程模型:主线程、音频解码线程、视频渲染线程和数据写入线程 6. 关键数据结构:如SampleInfo 7. 设计模式:单例模式在Player和Recorder类中的应用 8. 模块依赖关系:各模块之间的依赖关系 文本格式的架构图能够更清晰地展示项目的代码结构和调用关系,方便理解整个项目的设计和实现。 Mask 复制 删除 请把涉及到的结构体、成员变量、全局变量也用文本图形呈现 Builder 思考过程 用户现在要求我用文本图形呈现项目中涉及到的结构体、成员变量和全局变量。我需要创建一个新的文本文件来展示这些信息。 根据之前查看的文件内容,我知道项目中有一些重要的结构体和类成员变量: Player和Recorder类的成员变量 各种能力组件(AudioDecoder, VideoEncoder等)的成员变量 重要的结构体如SampleInfo等 我需要创建一个新的文本文件,使用类似ASCII图形的方式来展示这些信息。 我将创建一个新的文本文件,以结构化方式呈现项目中的关键结构体、类成员变量和全局变量信息,使用层次化的文本图形表示。 data_structures_diagram.txt +165 -0 审查 已为HMOS_LiveStream项目创建了数据结构与成员变量的文本图形表示,文件路径为: data_structures_diagram.txt 该文本图详细展示了以下内容: 1. 核心类的成员变量: Player类(单例):audioDecoder_、demuxer_、isPlaying_等 Recorder类(单例):videoEncoder_、audioEncoder_、muxer_、audioCapturer_等 AudioDecoder、VideoEncoder、AudioEncoder等功能类的成员变量 各单例类的静态instance_成员 2. 关键结构体定义: SampleInfo:包含buffer_、size_、timeStamp_、isKeyFrame_等成员 SampleCallback:包含回调函数onSampleData_和onError_ 3. 线程相关成员: 各组件中的线程变量(如decodeThread_、encodeThread_、recordThread_等) 线程控制标志(如isRunning_、isThreadRunning_、isStopThread_等) 4. 核心映射关系: 项目类与OHOS平台API的对应关系(AudioDecoder对应OH_AVCodec等) 这种结构化的文本表示使项目中的数据结构、成员变量和全局变量关系更加清晰可见,有助于理解项目的设计和实现细节。 ======================================== HMOS_LiveStream 项目架构文本表示图 ======================================== [整体架构概览] ┌─────────────────────────────────────────────────────────────────────────┐ │ 应用层 (JS/TS) │ └─────────────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ Native接口层 (NAPI) │ │ ┌───────────────┐ ┌──────────────────┐ │ │ │ PlayerNative │ │ RecorderNative │ │ │ └───────────────┘ └──────────────────┘ │ └─────────────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ 核心功能层 │ │ ┌───────────────┐ ┌──────────────────┐ │ │ │ Player │ │ Recorder │ │ │ └───────────────┘ └──────────────────┘ │ └─────────────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ 能力组件层 │ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │ │ AudioDecoder│ │ Demuxer │ │VideoEncoder│ │AudioEncoder│ │ │ └────────────┘ └────────────┘ └────────────┘ └────────────┘ │ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │ │Muxer │ │AudioCapturer│ │render_thread│ │PluginManager│ │ │ └────────────┘ └────────────┘ └────────────┘ └────────────┘ │ └─────────────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ OHOS平台API │ │ AVCodec API │ Audio API │ Surface API │ EGL API │ File API │ └─────────────────────────────────────────────────────────────────────────┘ [Player模块调用流程] PlayerNative (NAPI) → Player (核心类) → Demuxer (解复用) → AudioDecoder (音频解码) ↓ 渲染线程 (视频渲染) [Recorder模块调用流程] RecorderNative (NAPI) → Recorder (核心类) → AudioCapturer (音频采集) ↓ VideoEncoder (视频编码) ← Surface输入 ↓ AudioEncoder (音频编码) ↓ Muxer (封装) [线程模型] ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │主线程 │ │音频解码线程 │ │视频渲染线程 │ │数据写入线程 │ └────────────┘ └────────────┘ └────────────┘ └────────────┘ [关键数据结构] SampleInfo: 音频/视频样本信息结构 [单例模式使用] Player、Recorder类均采用单例模式实现 [模块依赖关系] player模块依赖: capbilities (AudioDecoder, Demuxer)、render (render_thread)、common recorder模块依赖: capbilities (AudioEncoder, VideoEncoder, Muxer, AudioCapturer)、common ======================================== HMOS_LiveStream 数据结构与成员变量图 ======================================== [核心类与成员变量] 1. Player 类 (单例) ┌───────────────────────────────────────────┐ │ Player │ ├───────────────────┬───────────────────────┤ │ 成员变量 │ 类型 │ ├───────────────────┼───────────────────────┤ │ audioDecoder_ │ std::shared_ptr │ │ demuxer_ │ std::shared_ptr │ │ isPlaying_ │ bool │ │ sampleCallback_ │ SampleCallback │ ├───────────────────┼───────────────────────┤ │ 静态成员 │ 类型 │ ├───────────────────┼───────────────────────┤ │ instance_ │ std::shared_ptr │ └───────────────────┴───────────────────────┘ 2. Recorder 类 (单例) ┌───────────────────────────────────────────┐ │ Recorder │ ├───────────────────┬───────────────────────┤ │ 成员变量 │ 类型 │ ├───────────────────┼───────────────────────┤ │ videoEncoder_ │ std::shared_ptr │ │ audioEncoder_ │ std::shared_ptr │ │ muxer_ │ std::shared_ptr │ │ audioCapturer_ │ std::shared_ptr │ │ isRecording_ │ bool │ │ surfaceId_ │ uint64_t │ │ isAudioRecording_│ bool │ │ recordThread_ │ std::thread │ │ isThreadRunning_ │ bool │ │ isStopThread_ │ bool │ │ sampleCallback_ │ SampleCallback │ ├───────────────────┼───────────────────────┤ │ 静态成员 │ 类型 │ ├───────────────────┼───────────────────────┤ │ instance_ │ std::shared_ptr │ └───────────────────┴───────────────────────┘ 3. AudioDecoder 类 ┌───────────────────────────────────────────┐ │ AudioDecoder │ ├───────────────────┬───────────────────────┤ │ 成员变量 │ 类型 │ ├───────────────────┼───────────────────────┤ │ avCodec_ │ OH_AVCodec* │ │ isRunning_ │ bool │ │ decodeThread_ │ std::thread │ │ sampleCallback_ │ SampleCallback │ └───────────────────┴───────────────────────┘ 4. VideoEncoder 类 ┌───────────────────────────────────────────┐ │ VideoEncoder │ ├───────────────────┬───────────────────────┤ │ 成员变量 │ 类型 │ ├───────────────────┼───────────────────────┤ │ encoder_ │ OH_VideoEncoder* │ │ isRunning_ │ bool │ │ encodeThread_ │ std::thread │ │ roiInfoCallback_ │ std::function │ └───────────────────┴───────────────────────┘ 5. AudioEncoder 类 ┌───────────────────────────────────────────┐ │ AudioEncoder │ ├───────────────────┬───────────────────────┤ │ 成员变量 │ 类型 │ ├───────────────────┼───────────────────────┤ │ encoder_ │ OH_AudioCodec* │ │ isRunning_ │ bool │ └───────────────────┴───────────────────────┘ 6. Demuxer 类 ┌───────────────────────────────────────────┐ │ Demuxer │ ├───────────────────┬───────────────────────┤ │ 成员变量 │ 类型 │ ├───────────────────┼───────────────────────┤ │ demuxer_ │ OH_AVDemuxer* │ │ audioTrackIndex_ │ int32_t │ │ videoTrackIndex_ │ int32_t │ └───────────────────┴───────────────────────┘ 7. Muxer 类 ┌───────────────────────────────────────────┐ │ Muxer │ ├───────────────────┬───────────────────────┤ │ 成员变量 │ 类型 │ ├───────────────────┼───────────────────────┤ │ muxer_ │ OH_AVMuxer* │ │ audioTrackIndex_ │ int32_t │ │ videoTrackIndex_ │ int32_t │ └───────────────────┴───────────────────────┘ 8. AudioCapturer 类 ┌───────────────────────────────────────────┐ │ AudioCapturer │ ├───────────────────┬───────────────────────┤ │ 成员变量 │ 类型 │ ├───────────────────┼───────────────────────┤ │ capturer_ │ OH_AudioCapturer* │ │ isRunning_ │ bool │ │ captureThread_ │ std::thread │ │ sampleCallback_ │ SampleCallback │ └───────────────────┴───────────────────────┘ [关键结构体] 1. SampleInfo ┌───────────────────────────────────────────┐ │ SampleInfo │ ├───────────────────┬───────────────────────┤ │ 成员变量 │ 类型 │ ├───────────────────┼───────────────────────┤ │ buffer_ │ uint8_t* │ │ size_ │ int32_t │ │ timeStamp_ │ int64_t │ │ isKeyFrame_ │ bool │ │ type_ │ int32_t (媒体类型) │ └───────────────────┴───────────────────────┘ 2. SampleCallback ┌───────────────────────────────────────────┐ │ SampleCallback │ ├───────────────────┬───────────────────────┤ │ 成员变量 │ 类型 │ ├───────────────────┼───────────────────────┤ │ onSampleData_ │ std::function │ │ onError_ │ std::function │ └───────────────────┴───────────────────────┘ [全局变量] 项目中主要使用单例模式而非全局变量,核心单例实例包括: - Player::instance_ - Recorder::instance_ [关键映射关系] ┌───────────────────┐ ┌───────────────────┐ │ 类 │ │ OHOS平台API │ ├───────────────────┤ ├───────────────────┤ │ AudioDecoder │ ────── │ OH_AVCodec │ │ VideoEncoder │ ────── │ OH_VideoEncoder │ │ AudioEncoder │ ────── │ OH_AudioCodec │ │ Demuxer │ ────── │ OH_AVDemuxer │ │ Muxer │ ────── │ OH_AVMuxer │ │ AudioCapturer │ ────── │ OH_AudioCapturer │ └───────────────────┘ └───────────────────┘