鸿蒙系统的AVMuxer与AVDemuxer模块有什么区别和联系?

我在学习鸿蒙系统的音视频处理时,遇到了AVMuxer和AVDemuxer这两个模块。请问,它们分别负责什么功能?在使用场景上有什么区别和联系?能否通过实例来说明它们的作用?

本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。

阅读 483
avatarAI BotBETA

鸿蒙系统的AVMuxer与AVDemuxer模块的区别和联系

区别

模块功能描述主要接口及作用
AVDemuxer音视频解封装- OH_AVDemuxer_CreateWithSource:通过source实例对象创建解封装器实例。
- OH_AVDemuxer_Destroy:销毁解封装器实例并清理内部资源。
- OH_AVDemuxer_SelectTrackByID:选中指定轨道,解封装器将会从该轨道中读取数据。
- OH_AVDemuxer_ReadSample:从选中轨道中获取当前位置压缩帧及相关信息。
- OH_AVDemuxer_SeekToTime:根据设定的跳转模式,将所有选中的轨道定位到指定时间附近。
AVMuxer音视频封装- OH_AVMuxer_Create:通过文件描述符和封装格式创建封装器实例。
- OH_AVMuxer_SetRotation:设置视频的旋转角度(顺时针,且旋转角度必须为0、90、180或270)。
- OH_AVMuxer_AddTrack:向封装器添加音视频轨。
- OH_AVMuxer_Start:开始封装过程。
- OH_AVMuxer_Destroy:清理内部资源,销毁封装器实例。

联系

  1. 功能上的互补

    • AVDemuxer负责将音视频文件解封装成原始的音视频流数据。
    • AVMuxer则负责将处理后的音视频流数据重新封装成指定格式的音视频文件。
  2. 使用场景上的协同

    • 在音视频处理流程中,AVDemuxer和AVMuxer通常协同工作。首先,使用AVDemuxer对输入的音视频文件进行解封装,获取到原始的音视频流数据;然后,对这些数据进行处理(如解码、编辑、编码等);最后,使用AVMuxer将处理后的音视频流数据封装成新的音视频文件。

实例说明

假设你正在开发一个鸿蒙系统上的音视频处理应用,该应用需要实现以下功能:从用户图库中选择一个视频文件,对其进行解码和二次处理(如添加滤镜),然后将处理后的视频保存为新的文件。在这个过程中,你可以使用AVDemuxer和AVMuxer模块来实现。

  1. 使用AVDemuxer进行解封装

    • 首先,通过选择器模块拉起图库选择视频文件。
    • 然后,将选中的视频文件传递到native侧进行交互。
    • 接着,使用AVDemuxer接口对视频文件进行解封装,获取到视频流数据。
  2. 对视频流数据进行处理

    • 使用VideoDecoder接口对视频数据进行解码。
    • 对解码后的视频数据进行二次处理(如添加滤镜)。
  3. 使用AVMuxer进行封装

    • 创建AVMuxer实例,并设置输出文件的封装格式。
    • 向AVMuxer中添加处理后的视频轨和音频轨(如果有)。
    • 设置视频的旋转角度(如果需要)。
    • 开始封装过程,将处理后的音视频流数据封装成新的音视频文件。
    • 最后,销毁AVMuxer实例并清理内部资源。

通过以上步骤,你就可以实现一个完整的音视频处理流程,包括从用户图库中选择视频、进行解码和二次处理、以及将处理后的视频保存为新的文件。在这个过程中,AVDemuxer和AVMuxer模块分别负责解封装和封装的功能,它们在使用场景上相互协同,共同完成了音视频处理的任务。

1 个回答
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题