首页 > 其他分享 >HarmonyOS音视频开发概述

HarmonyOS音视频开发概述

时间:2023-10-17 15:15:17浏览次数:33  
标签:视频 Framework 音频 录制 音视频 HarmonyOS 概述 播放

 

在音视频开发指导中,将介绍各种涉及音频、视频播放或录制功能场景的开发方式,指导开发者如何使用系统提供的音视频API实现对应功能。比如使用TonePlayer实现简单的提示音,当设备接收到新消息时,会发出短促的“滴滴”声;使用AVPlayer实现音乐播放器,循环播放一首音乐。

在每个功能中,会介绍多种实现方式以应对不同的使用场景,以及该场景相关的子功能点。比如在音频播放功能内,会同时介绍音频的并发策略、音量管理和输出设备等在操作系统中的处理方式,帮助开发者能够开发出功能覆盖更全面的应用。

本开发指导仅针对音视频播放或录制本身,由@ohos.multimedia.audio(下文简称audio模块)和@ohos.multimedia.media(下文简称media模块)提供相关能力,不涉及UI界面、图形处理、媒体存储或其他相关领域功能。

开发说明

在开发音频功能之前,尤其是要实现处理音频数据的功能前,建议开发者先了解声学相关的知识,帮助理解操作系统提供的API是如何控制音频系统,从而开发出更易用、体验更好的音视频类应用。建议了解的相关概念包括但不限于:

● 音频量化的过程:采样 > 量化 > 编码

● 音频量化过程的相关概念:模拟信号和数字信号、采样率、声道、采样格式、位宽、码率、常见编码格式(如AAC、MP3、PCM、WMA等)、常见封装格式(如WAV、MPA、FLAC、AAC、OGG等)

在开发音乐、视频播放功能之前,建议了解流媒体播放的相关概念包括但不限于:

● 播放过程:网络协议 > 容器格式 > 音视频编解码 > 图形/音频渲染

● 网络协议:比如HLS、HTTP/HTTPS;容器格式:比如mp4,mkv,mpeg-ts,webm。

● 编码格式:比如h263/h264/h265,MPEG4/MPEG2。

音频流介绍

在开发音频应用之前,还需要了解什么是音频流,它是HarmonyOS音频系统中的关键概念,在之后的章节中会多次提及。

音频流,是音频系统中对一个具备音频格式和音频使用场景信息的独立音频数据处理单元的定义,可以表示播放,也可以表示录制,并且具备独立音量调节和音频设备路由切换能力。

音频流基础信息通过AudioStreamInfo表示,包含采样、声道、位宽、编码信息,是创建音频播放或录制流的必要参数,描述了音频数据的基本属性。在配置时开发者需要保证基础信息与传输的音频数据是相匹配的,音频系统才能正确处理数据。

音频流使用场景信息

除了基本属性,音频流还需要具备使用场景信息。基础信息只能对音频数据进行描述,但在实际的使用过程中,不同的音频流,在音量大小,设备路由,并发策略上是有区别的。系统就是通过音频流所附带的使用场景信息,为不同的音频流制定合适的处理策略,以达到最佳的音频用户体验。

● 播放场景音频播放场景的信息,通过StreamUsageContentType进行描述。

StreamUsage指音频流本身的用途类型,包括媒体、语音通信、语音播报、通知、铃声等。

ContentType指音频流中数据的内容类型,包括语音、音乐、影视、通知、铃声等。

● 录制场景音频流录制场景的信息,通过SourceType进行描述。

SourceType指音频流中录音源的类型,包括麦克风音频源、语音识别音频源、语音通话音频源等。

支持的音频格式

audio模块下的接口支持PCM编码,包括AudioRenderer、AudioCapturer、TonePlayer、OpenSL ES等。

音频格式说明:

● 支持的常用的音频采样率(Hz):8000、11025、12000、16000、22050、24000、32000、44100、48000、64000、96000,具体参考枚举AudioSamplingRate。不同设备支持的采样率规格会存在差异。

● 支持单声道、双声道,具体参考AudioChannel

● 支持的采样格式:U8(无符号8位整数)、S16LE(带符号的16位整数,小尾数)、S24LE(带符号的24位整数,小尾数)、S32LE(带符号的32位整数,小尾数)、F32LE(带符号的32位浮点数,小尾数),具体参考AudioSampleFormat。由于系统限制,S24LE、S32LE、F32LE仅部分设备支持,请根据实际情况使用。

小尾数指的是小端模式,即数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。这种存储模式将地址的高低和数据的位权有效结合起来,高地址部分权值高,低地址部分权值低。

media模块下的接口支持的音视频格式将在AVPlayer和AVRecorder的介绍中承载。

media模块提供了AVPlayerAVRecorder用于播放、录制音视频。

AVPlayer

AVPlayer主要工作是将Audio/Video媒体资源(比如mp4/mp3/mkv/mpeg-ts等)转码为可供渲染的图像和可听见的音频模拟信号,并通过输出设备进行播放。

AVPlayer提供功能完善一体化播放能力,应用只需要提供流媒体来源,不负责数据解析和解码就可达成播放效果。

音频播放

当使用AVPlayer开发音乐应用播放音频时,其交互关系如图所示。

图1 音频播放外部模块交互图

 

音类应用通过调用JS接口层提供的AVPlayer接口实现相应功能时,框架层会通过播放服务(Player Framework)将资源解析成音频数据流(PCM),音频数据流经过软件解码后输出至音频服务(Audio Framework),由音频服务输出至音频驱动渲染,实现音频播放功能。完整的音频播放需要应用、Player Framework、Audio Framework、音频HDI共同实现。

图1中,数字标注表示需要数据与外部模块的传递。

1.  音乐应用将媒体资源传递给AVPlayer接口。

2.  Player Framework将音频PCM数据流输出给Audio Framework,再由Audio Framework输出给音频HDI。

视频播放

当使用AVPlayer开发视频应用播放视频时,其交互关系如图所示。

图2 视频播放外部模块交互图

应用通过调用JS接口层提供的AVPlayer接口实现相应功能时,框架层会通过播放服务(Player Framework)解析成单独的音频数据流和视频数据流,音频数据流经过软件解码后输出至音频服务(Audio Framework),再至硬件接口层的音频HDI,实现音频播放功能。视频数据流经过硬件(推荐)/软件解码后输出至图形渲染服务(Graphic Framework),再输出至硬件接口层的显示HDI,完成图形渲染。

完整的视频播放需要:应用、XComponent、Player Framework、Graphic Framework、Audio Framework、显示HDI和音频HDI共同实现。

图2中,数字标注表示需要数据与外部模块的传递。

1.  应用从XComponent组件获取窗口SurfaceID,获取方式参考XComponent

2.  应用把媒体资源、SurfaceID传递给AVPlayer接口。

3.  Player Framework把视频ES数据流输出给解码HDI,解码获得视频帧(NV12/NV21/RGBA)。

4.  Player Framework把音频PCM数据流输出给Audio Framework,Audio Framework输出给音频HDI。

5.  Player Framework把视频帧(NV12/NV21/RGBA)输出给Graphic Framework,Graphic Framework输出给显示HDI。

支持的格式与协议

推荐使用以下主流的播放格式,音视频容器、音视频编码属于内容创作者所掌握的专业领域,不建议应用开发者自制码流进行测试,以免产生无法播放、卡顿、花屏等兼容性问题。若发生此类问题不会影响系统,退出播放即可。

支持的协议如下:

协议类型

协议描述

本地点播

协议格式:支持file descriptor,禁止file path

网络点播

协议格式:支持http/https/hls

支持的音频播放格式如下:

音频容器规格

规格描述

m4a

音频格式:AAC

aac

音频格式:AAC

mp3

音频格式:MP3

ogg

音频格式:VORBIS

wav

音频格式:PCM

说明

视频播放支持的视频格式分为必选规格和可选规格。必选规格为所有设备均支持的视频格式。对于可选规格,不同设备的实际实现不同。建议开发者做对应的兼容处理,保证应用功能全平台兼容。

视频格式

是否必选规格

H264

MPEG2

MPEG4

H263

VP8

支持的视频播放格式和主流分辨率如下:

视频容器规格

规格描述

分辨率

mp4

视频格式:H264/MPEG2/MPEG4/H263

音频格式:AAC/MP3

主流分辨率,如4K/1080P/720P/480P/270P

mkv

视频格式:H264/MPEG2/MPEG4/H263

音频格式:AAC/MP3

主流分辨率,如4K/1080P/720P/480P/270P

ts

视频格式:H264/MPEG2/MPEG4

音频格式:AAC/MP3

主流分辨率,如4K/1080P/720P/480P/270P

webm

视频格式:VP8

音频格式:VORBIS

主流分辨率,如4K/1080P/720P/480P/270P

AVRecorder

AVRecorder主要工作是捕获音频信号,接收视频信号,完成音视频编码并保存到文件中,帮助开发者轻松实现音视频录制功能,包括开始录制、暂停录制、恢复录制、停止录制、释放资源等功能控制。它允许调用者指定录制的编码格式、封装格式、文件路径等参数。

● 图3 视频录制外部模块交互图

音频录制:应用通过调用JS接口层提供的AVRecorder接口实现音频录制时,框架层会通过录制服务(Player Framework),调用音频服务(Audio Framework)通过音频HDI捕获音频数据,通过软件编码封装后保存至文件中,实现音频录制功能。

● 视频录制:应用通过调用JS接口层提供的AVRecorder接口实现视频录制时,先通过Camera接口调用相机服务(Camera Framework)通过视频HDI捕获图像数据送至框架层的录制服务,录制服务将图像数据通过视频编码HDI编码,再将编码后的图像数据封装至文件中,实现视频录制功能。

说明

AVRecorder只负责视频数据的处理,需要与视频数据采集模块配合才能完成视频录制。视频数据采集模块需要通过Surface将视频数据传递给AVRecorder进行数据处理。

当前常用的数据采集模块为相机模块,相关说明以相机举例,相机模块目前仅对系统应用开放。

通过音视频录制组合,可分别实现纯音频录制、纯视频录制,音视频录制。

图3中,数字标注表示需要数据与外部模块的传递。

1.  应用通过AVRecorder接口从录制服务获取SurfaceID。

2.  应用将SurfaceID设置给相机服务,相机服务可以通过SurfaceID获取到Surface。相机服务通过视频HDI捕获图像数据送至框架层的录制服务。

3.  相机服务通过Surface将视频数据传递给录制服务。

4.  录制服务通过视频编码HDI模块将视频数据编码。

5.  录制服务将音频参数设置给音频服务,并从音频服务获取到音频数据。

支持的格式

支持的音频源如下:

音频源类型

说明

mic

系统麦克风作为音频源输入。

支持的视频源如下:

视频源类型

说明

surface_yuv

输入surface中携带的是raw data。

surface_es

输入surface中携带的是ES data。

支持的音视频编码格式如下:

音视频编码格式

说明

audio/mp4a-latm

音频/mp4a-latm类型

video/mp4v-es

视频/mpeg4类型

video/avc

视频/avc类型

支持的输出文件格式如下:

输出文件格式

说明

mp4

视频的容器格式,MP4。

m4a

音频的容器格式,M4A。

 

标签:视频,Framework,音频,录制,音视频,HarmonyOS,概述,播放
From: https://www.cnblogs.com/HarmonyOSDev/p/17769724.html

相关文章

  • 标题:计算机音视频技术的现状与未来发展
    摘要:随着计算机技术的不断进步,音视频技术也取得了巨大的发展。本文将探讨计算机音视频技术的现状以及未来的发展方向,包括音频编解码、视频压缩和流媒体传输等方面。引言:计算机音视频技术的快速发展使得我们能在网络上观看高清视频、进行远程聊天和视频会议,享受丰富多样的音频娱乐体......
  • HarmonyOS/OpenHarmony原生应用开发-华为Serverless服务支持情况(四)
    文档中的TS作者认为就是ArkTS之意。一、云存储AppGalleryConnect(简称AGC)云存储是一种可伸缩、免维护的云端存储服务,可用于存储图片、音频、视频或其他由用户生成的内容。借助云存储服务,您可以无需关心存储服务器的开发、部署、运维、扩容等事务,大大降低了应用使用存储的门槛,让您可......
  • 标题:探索计算机音视频技术的发展与应用
    摘要:本文将探讨计算机音视频技术的发展历程以及它们在各个领域的应用。从最初的音频播放器和视频播放器,到现在的音频编解码器和视频流媒体服务,音视频技术已经取得了长足的进步。随着互联网的普及和带宽的提升,计算机音视频技术正在成为许多行业的重要组成部分,涵盖了音乐、电影、游戏......
  • 标题:探索计算机音视频技术的发展与应用
    摘要:本文将探讨计算机音视频技术的发展历程以及它们在各个领域的应用。从最初的音频播放器和视频播放器,到现在的音频编解码器和视频流媒体服务,音视频技术已经取得了长足的进步。随着互联网的普及和带宽的提升,计算机音视频技术正在成为许多行业的重要组成部分,涵盖了音乐、电影、游戏......
  • HarmonyOS/OpenHarmony原生应用-ArkTS万能卡片组件Radio
    单选框,提供相应的用户交互选择项。该组件从APIVersion8开始支持。无子组件。一、接口Radio(options:{value:string,group:string})从APIversion9开始,该接口支持在ArkTS卡片中使用。参数:二、属性除支持通用属性外,还支持以下属性:三、事件除支持通用事件外,还支持以下事件:四、......
  • Maven概述
    依赖管理依赖调节当多个手动创建的版本同时出现时,哪个依赖版本将会被使用。 (如果两个依赖版本在依赖树里的深度是一样的时候,第一个被声明的依赖将会被使用)。依赖管理可以直接指定手动创建的某个版本供使用。 依赖范围包含在构建过程每个阶段的依赖;......
  • 再学Blazor——概述
    简介Blazor是一种.NET前端Web框架,同时支持服务器端呈现和客户端交互性。使用C#语言创建丰富的交互式UI共享前后端应用逻辑可以生成混合桌面和移动应用受益于.NET的性能、可靠性和安全性需要有HTML、CSS、JS相关基础(开发UI框架的话)组件化设计,类似React、Vue......
  • 标题:计算机音视频的革新与应用
    标题:计算机音视频的革新与应用摘要:计算机音视频技术正在以前所未有的速度发展,并广泛应用于娱乐、教育、通信等领域。本文将探讨计算机音视频的革新和应用,包括虚拟现实、增强现实、多媒体编码与解码技术、音视频传输协议等方面的进展。引言:随着科技的飞速进步,计算机音视频技术在过去......
  • HarmonyOS跨进程通信—IPC与RPC通信开发指导
    HarmonyOS跨进程通信—IPC与RPC通信开发指导一、IPC与RPC通信概述基本概念IPC(Inter-ProcessCommunication)与RPC(RemoteProcedureCall)用于实现跨进程通信,不同的是前者使用Binder驱动,用于设备内的跨进程通信,后者使用软总线驱动,用于跨设备跨进程通信。需要跨进程通信的原因是因为......
  • 【HarmonyOS】低代码平台组件拖拽使用技巧之堆叠容器
    ​【关键字】HarmonyOS、低代码平台、组件拖拽、堆叠组件 1、写在前面从本篇开始,我们一起来学习一下低代码平台中组件的托拉拽,虽然组件拖拽十分简单,但实际上还是有一定的技巧,新手上路难免会遇到一定的问题,如果能熟练掌握拖拽的技巧,能够有效地提升咱们的开发效率哦,今天我们先......