多媒体整体框架
本文容介绍 K1 平台的多媒体整体框架及各层功能。 通过阅读,你将了解应用、框架、MPP 到驱动的关系,以及常用硬件模块的作用。
框架层次图及说明
整个多媒体系统分为 4 层,从上到下依次是:
1. APP 层
这一层包括 第三方应用 和 自研应用。
第三方应用
-
mpv(Bianbu 默认播放器)
- 支持 H.264 / HEVC / VP8 / VP9 / MPEG-4 / MPEG-2 / MJPEG 等多种格式的硬件解码
- 最高支持 4K60 视频播放
-
totem(Ubuntu 默认播放器)
- 支持 H.264 / HEVC / VP8 / VP9 / MPEG-4 / MPEG-2 / MJPEG 等多种格式的硬件解码
- 最高支持 4K30 视频播放
-
cheese(Bianbu/Ubuntu 桌面系统默认相机应用)
- 支持预览,拍照,录像等功能
- 实现 1080P30 流畅录像
-
chromium(Bianbu 系统默认浏览器)
- 支持 H.264/HEVC 等多种格式的硬件解码
- 最高支持 4K30 视频播放
-
kodi(开源播放器)
- H.264/HEVC/VP8/VP9 等多种格式的硬件解码
- 最高支持 4K60 视频的播放
自研应用 主要是我们提供的 API 对接 demo 或测试程序,用于功能验证和参考开发,例如:
-
v2d-test
- 测试 V2D 模块(非压缩图像格式转换、旋转、缩放)
-
mvx-player
- 测试 VPU 模块(视频编解码),命令行操作,输出保存为文件
-
jpu-test
- 测试 JPU 模块(JPEG 图像编解码),命令行操作,输出保存为文件。
-
camera-test
- 测试 CAMERA 模块(CPP-ISP-MIPICSI 通路)
- 仅限平台摄像头,不含 USB camera(USB camera 使用 v4l-utils 测试)
2. 开源多媒体框架层(FRAMEWORK)
在这一层,最常用的是 GStreamer 和 FFmpeg。 它们是功能完整的多媒体解决方案,包含了视频播放所需的各个环节: muxer(复用) / demuxer(解复用) / decoder(解码) / encoder(编码) / display(显示)。 我们在这层实现了多个插件,通过 MPP 将 K1 的硬件编解码库接入到这些框架中。
-
FFmpeg
- 已对接 K1 硬件编解码器
- 解码:H.264 / HEVC / VP8 / VP9 / MPEG-4 / MPEG-2 / MJPEG,最高支持 4K60
- 输出像素格式:AV_PIX_FMT_DRM_PRIME、AV_PIX_FMT_NV12
- 编码:H.264 / H.265 / VP8 / VP9 / MJPEG,最高支持 4K30
-
GStreamer
- 已对接 K1 硬件编解码器
- 解码:H.264 / HEVC / VP8 / VP9 / MPEG-4 / MPEG-2 / MJPEG,最高支持 4K30
- 编码:H.264 / H.265 / VP8 / VP9 / MJPEG,最高支持 1080P60
-
OpenMAX IL
- 编解码功能适配中
3. MPP(Multimedia Processing Platform)
- 对上:提供统一多媒体 API。
- 对下:动态加载不同平台的编解码库插件来调用编解码库。
4. 驱动与库(Driver & Library)
- 由 IP 厂商提供。
- 包含硬件驱动和 API 动态库,直接操作芯片多媒体模块。
概念术语
-
VPU(Video Processing Unit)
- 视频处理单元,负责硬件视频编解码,减轻 CPU 负担。
- K1 基于 V4L2 框架实现,支持 H.264 / HEVC / VP8 / VP9 / MJPEG / MPEG-4 解码,以及 H.264 / HEVC / VP8 / VP9 / MJPEG 编码。
-
V2D
- K1 提供的图像处理硬件模块,支持格式转换、缩放、裁剪等操作。
-
JPU(Jpeg Processing Unit)
- 硬件 JPEG 编解码,提高效率并减少 CPU 占用。
-
ISP
- 图像信号处理模块,优化来自传感器的原始图像,提升画质。
-
CPP
- 图像后处理模块,用于离线处理 ISP 输出的 NV12 数据。
- 金字塔式多层分时处理,主要功能包括:镜头畸变矫正、降噪(空域/时域/频域)、边缘增强等。
-
RVV
- RISC-V 架构的向量扩展指令集,用于加速数据并行计算,类似 ARM NEON。
-
MPP(Multimedia Processing Platform)
- 多媒体处理平台,负责对接硬件编解码与上层框架。
-
Gstreamer
- 开源的、灵活且功能强大的多媒体框架,用于构建流媒体应用程序和处理音频/视频数据。
- 它提供了一套库和工具,可以用来创建、处理和播放各种多媒体流,包括音频、视频、流媒体等。
- 支持多种编解码器和格式,可在多平台运行。
-
FFmpeg
- 跨平台开源音视频处理工具,支持录制、转换、推流和编辑。
- 兼容多种音视频格式和编解码器,可以在不同的操作系统上运行,包括 Windows、Mac 和 Linux。
- 广泛应用于多媒体处理领域。
-
V4L2(Video for Linux 2)
- Linux 系统的视频采集/输出设备 API。
- 为摄像头、视频采集卡等设备提供统一访问接口,便于视频采集、处理和显示。
-
ALSA(Advanced Linux Sound Architecture 高级 Linux 音频架构)
- Linux 系统上主流的音频架构,被广泛应用于各种 Linux 发行版中,用于处理音频和音频设备的软件架构。
- 提供了一个统一的音频接口,使得应用程序可以与音频硬件进行通信,支持多种音频设备和音频格式,并提供了低延迟和高质量的音频处理功能。
- 提供了一组工具和库,用于配置和管理音频设备,以及编写音频应用程序。