OpenHarmony4.0源码解析之媒体框架

这篇具有很好参考价值的文章主要介绍了OpenHarmony4.0源码解析之媒体框架。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

媒体框架简介

媒体框架 multimedia_player_framework 主要提供音视频的录制与播放功能。

框架简介

OpenHarmony4.0源码解析之媒体框架,移动开发,HarmonyOS,OpenHarmony,媒体,harmonyos,Openharmony,鸿蒙开发,华为,深度学习

OpenHarmony4.0源码解析之媒体框架,移动开发,HarmonyOS,OpenHarmony,媒体,harmonyos,Openharmony,鸿蒙开发,华为,深度学习

从框架图中可以看出,媒体框架的主要工作模式为通过 Gstreamer 的插件自动化注册及插件组合功能,将其余媒体播放相关的框架功能插件化,配合 Gstreamer 自身丰富的插件,共同来对外提供音视频的录制与播放功能。如通过 audio-sink 及 audio-source 插件调用音频框架的播放及采集功能来实现音频的播放与录制;通过 surface-sink 调用图形框架,video-decoder 调用解码驱动模块实现视频的硬解播放等。

Gstreamer 基本概念

Gstreamer 是媒体框架中的重要组成部分,采用基于插件(plugin)和管道(pipeline)的体系结构,框架中的所有的功能模块都被实现成可以插拔的组件(plugin),能够很方便地安装到任意管道上。插件架构是 GStreamer 的核心,几乎所有的媒体处理功能都可以抽象成为插件的一部分。

OpenHarmony4.0源码解析之媒体框架,移动开发,HarmonyOS,OpenHarmony,媒体,harmonyos,Openharmony,鸿蒙开发,华为,深度学习

以一个图中完整的 ogg 播放流程为例: GStreamer 内部使用 pipeline(管线)机制来做信令控制,元素组件管理和数据传输,一个 pipeline 内部存在多个 element(元素),每个元素内部存在输入和输出的端口(pad);

解码流程具体为 ogg 文件源 source 经过解封装器 demuxer 产生 vorbis 编码的数据流,之后经过解码器 decoder 解码为浮点 float 格式的 raw 数据,浮点 raw 数据通过转换器转换为整形 raw 数据,最后通过输出 sink 完成音频信号输出。虚线下面的标注为经过每个 pad 的输入格式和输出格式。

GStreamer 定义了以下元素概念:

OpenHarmony4.0源码解析之媒体框架,移动开发,HarmonyOS,OpenHarmony,媒体,harmonyos,Openharmony,鸿蒙开发,华为,深度学习

Source:可以理解为数据源,也就是数据流的起始地。例如文件,网络源,摄像机麦克风的输入。

OpenHarmony4.0源码解析之媒体框架,移动开发,HarmonyOS,OpenHarmony,媒体,harmonyos,Openharmony,鸿蒙开发,华为,深度学习

Filter: 过滤器, 也可理解为中间处理单元,将 sink pad 传入的数据经过内部处理通过 src pad 传出。编解码器,封装/解封装都可以认为是 Filter。有人可能会与 Ffmpeg 的 filter 相混淆,Ffmpeg 中 Filter 定义为处理原始数据(解码后数据的)的功能单元。提供音视频后处理功能。Gstreamer 中 Filter 更强调同时存在输入和输出的概念,功能的范围更大一些。

OpenHarmony4.0源码解析之媒体框架,移动开发,HarmonyOS,OpenHarmony,媒体,harmonyos,Openharmony,鸿蒙开发,华为,深度学习

Sink:数据接受者,source 产生的数据流最终要流向的地方。例如输出文件,屏幕显示,扬声器输出。

OpenHarmony4.0源码解析之媒体框架,移动开发,HarmonyOS,OpenHarmony,媒体,harmonyos,Openharmony,鸿蒙开发,华为,深度学习

Bin: 与 pipeline 类似,它们的区别为 pipeline 肯定是一个 bin,但 bin 不一定是 pipeline,它就像一个盒子,存放了多个元素,实现了部分甚至完整的由 source 到 sink 的流程。Bin 提供了软总线 Bus 用于处理内部产生的信号(这些消息包括:错误消息(error messages),卷标消息(tag messages),EOS 消息(EOS messages))。**PipeLine: pipeline 是高级的 Bin。**当你设定管道的暂停或者播放状态的时候,数据流将开始流动,并且媒体数据处理也开始处理。一旦开始,管道将在一个单独的线程中运行,直到被停止或者数据流播放完毕。

音视频播放流程

1.视频播放流程如下:

OpenHarmony4.0源码解析之媒体框架,移动开发,HarmonyOS,OpenHarmony,媒体,harmonyos,Openharmony,鸿蒙开发,华为,深度学习

2.视频播放的接口调用时序图如下:播放器在设置播放源时,完成 Gstreamer engine 的加载,在 prepare 时 完成对于 gsreamer playbin 的初始化,后续的播放,暂停等接口都是通过控制 Gstreamer playbin 的状态来控制播放流。

OpenHarmony4.0源码解析之媒体框架,移动开发,HarmonyOS,OpenHarmony,媒体,harmonyos,Openharmony,鸿蒙开发,华为,深度学习

音视频录制流程

1.音视频录制流程如下:

OpenHarmony4.0源码解析之媒体框架,移动开发,HarmonyOS,OpenHarmony,媒体,harmonyos,Openharmony,鸿蒙开发,华为,深度学习

2.音视频录制接口调用时序图如下:以音频录制为例,用户在调用 prepare 接口时,会依次设置音频源,音频输出格式,以及音频配置参数和音频输出路径,在基本配置完成后,才会形成音频录制的 pipeline,与播放器不同,该 pipeline 为框架自定义。在音频录制的 pipeline 形成后,即可通过 recorderPipeline 的状态来控制录制流。

OpenHarmony4.0源码解析之媒体框架,移动开发,HarmonyOS,OpenHarmony,媒体,harmonyos,Openharmony,鸿蒙开发,华为,深度学习

媒体框架 4.0 新增能力

1 ScreenCapture

ScreenCapture 为屏幕采集模块,提供屏幕画面采集及音频采集功能。主要提供如下接口:

class ScreenCapture {
public:
    virtual ~ScreenCapture() = default;
    virtual int32_t Init(AVScreenCaptureConfig config) = 0;
    virtual int32_t SetMicrophoneEnabled(bool isMicrophone) = 0;
    virtual int32_t StartScreenCapture() = 0;
    virtual int32_t StopScreenCapture() = 0;
    virtual int32_t AcquireAudioBuffer(std::shared_ptr<AudioBuffer> &audiobuffer, AudioCaptureSourceType type) = 0;
    virtual sptr<OHOS::SurfaceBuffer> AcquireVideoBuffer(int32_t &fence, int64_t ×tamp, Rect &damage) = 0;
    virtual int32_t ReleaseAudioBuffer(AudioCaptureSourceType type) = 0;
    virtual int32_t ReleaseVideoBuffer() = 0;
    virtual int32_t Release() = 0;
    virtual int32_t SetScreenCaptureCallback(const std::shared_ptr<ScreenCaptureCallBack> &callback) = 0;
};

从提供的结构体 AVScreenCaptureConfig 来看,主要采集类型如下:CaptureMode : 采集模式包括了主屏幕、特定屏幕(暂不支持)、特定窗口(暂不支持)采集;DataType : 数据类型包括原始流,编码流(暂不支持)和文件(暂不支持);AudioInfo : 音频信息包括对采样率,采样格式以及音频源的设置。音频源支持麦克风以及系统内部音源;VideoInfo : 视频信息主要包括分辨率以及视频源类型,视频源类型主要为 yuv(暂不支持),es 流(暂不支持),rgba;

struct AVScreenCaptureConfig {
    CaptureMode captureMode;
    DataType dataType;
    AudioInfo audioInfo;
    VideoInfo videoInfo;
    RecorderInfo recorderInfo;
};

音视频数据的流转如下图,分别存在音频和视频数据的缓存队列,通过 bufferavailable 来通知用户可用 buffer,用户可通过 acquireBuffer 和 releaseBuffer 来获取和删除音视频数据

OpenHarmony4.0源码解析之媒体框架,移动开发,HarmonyOS,OpenHarmony,媒体,harmonyos,Openharmony,鸿蒙开发,华为,深度学习

2 SoundPool

SoundPool 为音频池管理模块,提供集中管理多个音频资源的功能。该框架实际并未经过媒体框架的 IPC,而是在 client 端直接调用了音频解码器和音频渲染器。

SoundPool 通过 SoundIdManager 来管理 SoundParser 获取音频流解码数据,通过 StreamIdManager 来管理 CacheBuffer 控制音频流的播放,加载资源及播放的调用流程如下:

OpenHarmony4.0源码解析之媒体框架,移动开发,HarmonyOS,OpenHarmony,媒体,harmonyos,Openharmony,鸿蒙开发,华为,深度学习

3 Monitor

媒体框架的播放及录制 client 与 stub 分别通过继承 MonitorClientObject,MonitorServerObject 来实现对于媒体播放录制运行状态的监控。client 在开始播放或者录制后每隔 1s 向 server 端发送 click 指令,Server 端每隔 1.5s 检查对应的 client 是否过长时间未发送指令,若出现异常,则调用暂停命令,否则调用恢复播放指令。

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

OpenHarmony4.0源码解析之媒体框架,移动开发,HarmonyOS,OpenHarmony,媒体,harmonyos,Openharmony,鸿蒙开发,华为,深度学习

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

OpenHarmony4.0源码解析之媒体框架,移动开发,HarmonyOS,OpenHarmony,媒体,harmonyos,Openharmony,鸿蒙开发,华为,深度学习

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

OpenHarmony4.0源码解析之媒体框架,移动开发,HarmonyOS,OpenHarmony,媒体,harmonyos,Openharmony,鸿蒙开发,华为,深度学习

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

OpenHarmony4.0源码解析之媒体框架,移动开发,HarmonyOS,OpenHarmony,媒体,harmonyos,Openharmony,鸿蒙开发,华为,深度学习

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

OpenHarmony4.0源码解析之媒体框架,移动开发,HarmonyOS,OpenHarmony,媒体,harmonyos,Openharmony,鸿蒙开发,华为,深度学习文章来源地址https://www.toymoban.com/news/detail-854741.html

到了这里,关于OpenHarmony4.0源码解析之媒体框架的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenHarmony4.0系列(一)编译环境搭建+代码上库

    1. VMware + Ubuntu20.04 + 内存8G+ + 硬盘150G+ 2. Ubuntu20.04 Server + 内存64G + 硬盘24T 3. Ubuntu20.04 + 内存16G+ + 硬盘1T 4. Windows 10 通过子系统方式安装Ubuntu20.04 四种方案,推荐方案四。 VMware下载: Vmware Workstation pro 15.5.5 清华开源镜像站: ubuntu-20.04.6-desktop-amd64.iso 开源USB启动盘制作工具: Rufus-

    2024年01月22日
    浏览(57)
  • RK3568 OpenHarmony4.0适配HDMI液晶屏

            先看下最终适配效果视频: OpenHarmony_V40_HDMI液晶屏         本文基于如下开发环境进行开发调试: 处理器:RK3568 CPU:四核64位Cortex-A55,主频最高达2.0GHz GPU:ARM G52 2EE,支持OpenGL ES 1.1/2.0/3.2,OpenCL 2.0,Vulkan 1.1,支持内嵌高性能2D加速硬件 NPU:支持1T算力 多媒体

    2024年02月02日
    浏览(86)
  • openHarmony4.0Release-riscv64荔枝派版本新增glmark2三方库

    如题,需要在openHarmony4.0Release-riscv64荔枝派版本的third_party目录下增加glmark2。 由于其他同事已经在别的环境上完成代码适配,可以直接拿过来用。 https://gitee.com/wawanala/glmark2-es2 在third_party目录下直接git clone下载后解压即可。 参考https://www.51cto.com/article/745922.html 文件增加以下内

    2024年04月12日
    浏览(35)
  • OpenHarmony源码学习之编译框架

    云将东游,过扶摇之枝,而适遭鸿蒙。—《庄子·在宥》 OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目,目标是面向全场景、全连接、全智能时代、基于开源的方式,搭建一个智能终端设备操作系统的框架和平台,促进万物互联产业的繁荣发展。

    2024年02月01日
    浏览(48)
  • OpenHarmony 源码解析之SystemUi—Statusbar(TS)

    作者:董伟 SystemUI应用是OpenHarmony中预置的系统应用,为用户提供系统相关信息展示及交互界面,包括系统状态、系统提示、系统提醒等,例如系统时间、电量信息。 本文主要分析batterycomponent、clockcomponent、wificomponent三大组件: 导入batteryInfo模块,监听系统电池事件,实时获

    2024年04月09日
    浏览(52)
  • OpenHarmony中基于HDF框架的驱动开发和使用

    代码版本:openharmony 3.2 release 主要内容         HDF框架基础知识         HDF驱动框架的开发         HDF驱动框架的应用 HDF框架基础知识  HDF(Hardware Driver Foundation)驱动框架,为驱动开发者提供驱动框架能力,包括驱动加载、驱动服务管理和驱动消息机制。旨在构建统一的

    2024年02月20日
    浏览(39)
  • OpenHarmony 标准系统 HDF 框架音视频驱动开发

    OpenHarmony 操作系统为了做到给千行百业提供全场景业务能力,达到设备快速互联、硬件互助、资源共享;统一 OS、一次开发多端弹性部署的目标。在此背景下 OpenHarmony 提出在传统的单设备系统能力基础上,基于同一套系统能力、适配多种终端形态的分布式理念,并且内核层、

    2023年04月22日
    浏览(53)
  • OpenHarmony鸿蒙源码下载编译和开发环境搭建

    目录 一、开发环境搭建和源码下载 二、编译 三、总结  一、开发环境搭建 最好是在如Ubuntu18.04以上的系统中搭建,不然有些软件依赖需要解决,加大搭建时间 如gitee中开源OpenHarmony中的文档所示,搭建开发环境,搭建文档网站如下: zh-cn/device-dev/get-code/sourcecode-acquire.md ·

    2024年01月21日
    浏览(63)
  • OpenHarmony多媒体-metadata-extractor

    metadata-extractor是用于从图像、视频和音频文件中提取 Exif、IPTC、XMP、ICC 和其他元数据的组件。 OpenHarmony ohpm环境配置等更多内容,请参考 如何安装OpenHarmony ohpm包 。 引入文件及代码依赖 读取数据 展示数据 说明:支持ImageMetadataReader.readMetadata(path)统一入口;也支持对应文件格

    2024年04月25日
    浏览(39)
  • 前端移动端开发分类及跨平台开发框架简述

    前端移动端主流分为以下三种:Native App ,Hybrid App ,Web App 优点: (1)用户体验好 (2)性能稳定 (3)操作速度快 (4)能够访问本地资源(通讯录,相册) (5)能够设计出色的动效,转场 (6)拥有系统级别的贴心通知或提醒 (7)用户留存率高 缺点: (1)开发成本高

    2024年02月04日
    浏览(77)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包