鸿蒙开发学习:【媒体引擎组件】

简介

HiStreamer是一个轻量级的媒体引擎组件,提供播放、录制等场景的媒体数据流水线处理。

  • 播放场景分为如下几个节点:数据源读取、解封装、解码、输出;
  • 录制场景分为如下几个节点:数据源读取、编码、封装、输出。

这些节点的具体功能,主要在插件中实现。可以插件的形式扩展支持新的数据源、封装格式、编解码格式、输出方式。

逻辑架构

HiStreamer作为媒体引擎,向上对接player_framework(standard设备上)或者media_lite(mini/small设备上),再对外提供应用API。它内部分为三层:

  • 应用场景封装层: 比如HiPlayer, HiRecorder。
  • Pipeline框架层: 包括Pipeline框架,各个Filter节点实现。
  • 插件层: 包括插件框架,各种插件。

逻辑架构图

插件列表

HiStreamer插件列表如下:

插件名称路径外部依赖License功能适用场景
FFMPEG Adapterplugins/ffmpeg_adapterFFMPEGLGPL etc.解封装:mp3,m4a,mp4,wav 解码:mp3,aac支持动态链接的 small/standard设备
File Sourceplugins/source/file_sourceFileSystemApache读取文件数据所有设备
Minimp3 Adapterplugins/minimp3_adapterminimp3CC0解封装: mp3 解码: mp3所有设备
Minimp4 Demuxerplugins/demuxer/minimp4_demuxerminimp4CC0解封装: m4a所有设备
Aac Demuxerplugins/demuxer/aac_demuxerNAApache解封装: aac所有设备
HDI Sinkplugins/hdi_adapterAudio HDIApache播放音乐mini/small设备

目录

仓目录结构如下:

/foundation/multimedia/histreamer      # HiStreamer媒体引擎组件业务代码
├─LICENSE                              # 证书文件
├─engine                               # 引擎代码
│  ├─foundation                        # 基础工具类, 包括OS适配
│  ├─include                           # 为其它模块调用histreamer暴露必要的头文件,包括调用pipeline/filter,或者调用插件
│  │  ├─foundation                     # histreamer基础工具库,包括日志打印、Buffer工具、操作系统适配、语言扩展等
│  │  ├─pipeline                       # pipeline框架的头文件,主要是pipeline/filter接口
│  │  └─plugin                         # 插件相关的头文件
│  │      ├─common                     # 插件接口依赖的基础类型头文件
│  │      └─interface                  # 插件接口
│  ├─pipeline                          # pipeline框架
│  │  ├─core                           # pipeline核心实现
│  │  ├─factory                        # filter工厂
│  │  └─filters                        # 若干filter节点实现
│  │      ├─codec                      # 编解码节点实现
│  │      ├─common                     # filters依赖的基础类型定义
│  │      ├─demux                      # 解封装节点实现
│  │      ├─muxer                      # 封装节点实现
│  │      ├─sink                       # 输出节点实现
│  │      └─source                     # 数据源节点实现
│  ├─plugin                            # 插件
│  │  ├─common                         # 插件接口依赖的基础类型定义
│  │  ├─core                           # 插件框架,各个插件的代理类
│  │  └─plugins                        # 若干插件实现
│  │      ├─codec_adapter              # 硬件编解码适配
│  │      ├─minimp3_adapter            # minimp3适配
│  │      ├─ffmpeg_adapter             # FFMPEG适配(适配成封装解封装、编解码插件)
│  │      ├─hdi_adapter                # HDI适配(适配成输出插件)
│  │      ├─lite_aac_decoder           # 轻量级AAC解码器插件
│  │      ├─demuxer                    # 解封装插件
│  │      ├─sink                       # 输出插件
│  │      └─source                     # 数据源插件
│  └─scene                             # 播放录制等场景的封装实现
│  │  ├─common                         # 共用的基础类型定义
│  │  ├─lite                           # 对接到轻量设备的接口实现
│  │  ├─player                         # 播放场景实现
│  │  ├─recorder                       # 录制场景实现
│  │  └─standard                       # 对接到标准设备的接口实现
└─interface                            # 引擎对外接口

鸿蒙OpenHarmony知识已更新←前往

腾讯T10级高工技术,安卓全套VIP课程全网免费送docs.qq.com/doc/DUmN4VVhBd3NxdExK


http://www.niftyadmin.cn/n/5423632.html

相关文章

Redis底层源码分析系列(前提准备)

文章目录 一、 面试题二、 源码分析1. 源码导入2. 源码核心部分 一、 面试题 1. redis跳跃列表了解吗?这个数据结构有什么缺点? 2. redis项目里面怎么用? redis的数据结构都了解哪些? 3. redis的zset底层实现? redi…

【Linux】Linux小结

LVS、Nginx、HAproxy的区别 LVS、Nginx和HAproxy都是常见的负载均衡器,用于将网络负载分散到多个服务器上,以提高系统的可用性和性能 功能不同: LVS是一个Linux内核模块,在网络层(第四层)运行的。 Nginx和…

《父母的语言:3000万词汇塑造更强大的学习型大脑》早期家庭语言环境的重要性(二)

目录 简介 经典内容摘录 简介 本书作者是美国芝加哥大学妇科及儿科教授达娜萨斯金德博士。作者发起了“3000万词汇倡议”,“3000万词汇倡议”发现了一个秘密,即低收入家庭的孩子为什么“输在起跑线”上。调查显示,低收入家庭…

Centos7 使用docker来部署mondb

参考官方手册: https://www.mongodb.com/docs/manual/tutorial/install-mongodb-community-with-docker/#std-label-docker-mongodb-community-install 使用脚本快速安装docker curl -fsSL https://get.docker.com -o get-docker.sh | bash get-docker.sh使用 Doc…

CSS 用 flex 布局绘制骰子

<!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>.box {height: 100px;width: 100px;border: 2px solid grey;border-radius: 10px;display: flex;justify-content: center; // 水平居中/* alig…

【消息队列开发】 背景知识与需求分析

文章目录 &#x1f343;前言&#x1f332;消息队列背景知识&#x1f333;需求分析&#x1f6a9;核心概念&#x1f6a9;核心API&#x1f6a9;交换机类型(Exchange Type)&#x1f6a9;持久化&#x1f6a9;网络通信&#x1f6a9;消息应答&#x1f6a9;模块划分 ⭕总结 &#x1f34…

Ubuntu 14.04:安装PaddlePaddle(Conda安装)

目录 一、PaddlePaddle 概要 二、PaddlePaddle安装要求 三、PaddlePaddle安装 3.1 安装 Anaconda3 3.2 创建Anaconda虚拟环境&#xff08;python 3.8&#xff09; 3.3 进入Anaconda虚拟环境 3.4 检测 Anaconda 虚拟环境配置是否符合PaddlePaddle安装要求 3.4.1 确认 py…

超越Transformer!基于Patch的时间序列预测新SOTA!

目前基于深度学习的时间序列预测主要有两大创新方向&#xff1a;一是模型结构创新&#xff0c;以informer为代表&#xff1b;二是数据输入创新&#xff0c;以PatchTST为代表。 在多变量时序预测领域&#xff0c;Patch的使用是为了将时间序列数据转换成适合深度学习模型处理的形…