媒体基础中的编码概述

本主题概述 Microsoft Media Foundation 中提供的文件编码 API。

术语

编码 是一个涵盖多个不同过程的一般术语:

  1. 将音频或视频流编码为压缩格式。 例如,将视频流编码为 H.264 视频。
  2. 多路复用 (“复用”) 一个或多个字节流。 通常,传入流首先进行编码。 此步骤可能涉及对编码的流进行数据包化。
  3. 将多路复用字节流写入文件,例如 MP4 或高级系统格式 (ASF) 文件。 或者,可以通过网络发送多路复用流。

下图显示了这三个过程:

diagram showing the encoding and multiplexing processes

此过程的变体包括转码和重新使用:

  • 转码 意味着解码现有文件、重新编码流和重新复用编码流。 可以执行转码,将文件从一种编码类型转换为另一种编码类型;例如,将 H.264 视频转换为Windows媒体视频 (WMV) 。 还可以执行此操作来更改编码的比特率;视频帧大小;帧速率;或其他格式参数。
  • Remultiplexingremuxing 意味着取消复用文件并重新复用流,无需解码/编码步骤。 为此,可以更改音频/视频数据包的复用方式、删除流或合并来自两个不同的源文件的流。
  • 转码 是一种特殊情况,其中比特率会更改而不更改压缩类型。 例如,可以将高比特率文件转换为较低的比特率。 一种典型方案,其中可能使用转译是在将媒体内容从电脑同步到便携式设备时使用。 如果便携式设备不支持高比特率,则文件可能会在将文件复制到便携式设备之前进行转译。

以下块图显示了转码过程。

diagram showing the transcoding process

以下块图显示了重新使用过程。

diagram showing the remuxing process

本文档有时使用术语 编码 来包括转码和重新编码。 当必须区分它们时,文档将记下差异。

另请参阅: 媒体基础:基本概念

Media Foundation 编码体系结构

在 Media Foundation 体系结构的最低层,以下类型的组件用于编码:

  • 对于转码, 媒体源 用于对源文件进行解体。
  • 对于编码过程, 媒体基础转换 用于解码和编码流。
  • 对于多路复用过程, 媒体接收器 用于多路复用流并将多路复用流写入文件或网络。

下图显示了转码方案中这些组件之间的数据流:

diagram showing the components used in transcoding

大多数应用程序不会直接使用这些组件。 相反,应用程序将使用管理这些较低级别的组件的更高级别的 API。 Media Foundation 提供两个用于编码的更高级别的 API:

媒体会话

媒体会话提供端到端管道,用于通过编解码器将数据从媒体源移动,最后移到媒体接收器。 应用程序控制媒体会话并从媒体会话接收状态事件。

源读取器 加上 接收器编写器

源读取器会包装媒体源和解码器(可选)。 它提供应用程序的编码或解码示例。 接收器编写器包装媒体接收器和编码器(可选)。 应用程序将示例传递给接收器编写器。

下图显示了媒体会话:

diagram showing how the media session performs transcoding

转码 API (蓝色着色框) 是 Windows 7 中引入的一组 API,使媒体会话更易于配置编码。

下图显示了源读取器和接收器编写器:

diagram showing transcoding with the source reader and sink writer

编码和文件创作

Media Foundation 编程:基本概念