有关 Azure 媒体服务的常见问题

本文解答了有关 Azure 媒体服务的常见问题。

使用 SDK 进行开发

在哪里可以找到媒体服务 API 和 SDK?

我应该使用客户端 SDK 还是直接写入 REST API?

建议不要尝试将媒体服务的 REST API 直接包装到你自己的库代码中。 出于生产目的正确执行此操作需要实现完整的 Azure 资源管理器重试逻辑,并了解如何管理资源管理器 API 中长时间运行的操作。 适用于各种语言的客户端 SDK(例如 .NET、Java、TypeScript、Python 和 Ruby)会自动处理,以减少重试逻辑或 API 调用失败的可能性。 Postman 集合更多地是作为一种教学工具提供,用于演示在使用客户端 SDK 进行开发的过程中,它们在线执行的操作。

在哪里可以找到媒体服务示例?

有关示例列表,请参阅媒体服务 v3 示例一文。

大型结果集上的分页(如资产列表)如何在 API 中工作?

使用分页时,应始终使用下一链接来枚举集合,而不依赖特定的页面大小。 有关详细信息和示例,请参阅筛选、排序和分页实体

帐户

如何使用托管标识将数据加密到媒体服务?

请参阅使用 Key Vault 密钥将数据加密到媒体服务帐户教程,了解如何使用 Azure CLI 将媒体服务与 Azure Key Vault 配对,以对数据进行加密。

如何使用托管标识授权媒体服务访问受限制的存储帐户?

如果你希望媒体服务在存储帐户被配置为“阻止来自未知 IP 地址的请求”的情况下访问存储帐户,请按照使用媒体服务托管标识访问存储中的步骤操作。

安全性

Azure 角色可对媒体服务资源执行哪些操作?

资产、上传和存储

什么是媒体服务资产?

媒体服务资产是一个 Azure 存储帐户容器,用于上传的每个视频文件。 它具有一个用于转换和其他操作的唯一标识符。 请参阅 Azure 媒体服务 v3 中的资产

如何创建媒体服务资产?

每次你要上传媒体文件并对其执行编码或流式处理等操作时,都会创建资产来存储该媒体文件和与之关联的文件。 如果使用 Azure 门户,系统将自动创建资产。 如果不使用门户上传文件,则必须先创建资产。 有关详细信息,请参阅创建资产

编码

媒体服务提供哪些编码格式?

媒体服务提供的常见编码格式是标准编码器。 有关所有格式的列表,请参阅标准编码器格式和编解码器

如何创建媒体服务作业?

可以使用 Azure CLI、REST 或任何 SDK 在 Azure 门户作业中创建作业。 有关偏好语言,请参阅媒体服务示例

能否使用媒体服务创建自动生成的比特率阶梯?

媒体服务是否支持内容感知编码?

是的。 媒体服务可以对视频执行两步分析。 然后,它可以根据视频内容推荐最佳自适应比特率集、分辨率和编码设置。 有关详细信息,请参阅如何使用内容感知型编码预设

是否可以在媒体服务中使用外部编码的或现有 MP4 文件?

能。 有关示例应用程序的详细信息和链接,该应用程序演示如何上传预编码的单比特率 MP4 文件并生成服务器清单 (.ism) 和客户端清单 (.ismc),请在有关打包和交付的部分参见问题解答“我能否流式传输其他解决方案中预编码或编码的现有 Mp4 文件?”。 该答案还描述了对源的性能影响。

媒体服务是否可用于短格式的文件内容编码?

但我们不建议这样做。 持续时间不到一分钟或两分钟的非常短的内容并不适用于自适应比特率流式处理。 如果要流式处理非常短格式的文件,建议将内容预编码为可使用单比特率轻松流式处理的格式。

由于大多数自适应比特率播放器需要时间来缓冲多个视频段,并且需要时间在自适应比特率阶梯向上或向下“移动”之前分析网络带宽,因此,为长度不到 30 秒的内容提供大量比特率通常没什么用。 当播放器根据网络状况将其启发式算法锁定在正确的播放比特率时,文件会以流式处理方式完成。

此外,某些播放器默认缓冲最多 3 个视频段。 每个段长度为 2 到 6 秒。 对于非常短格式的视频,播放器可能会缓冲并开始播放自适应比特率集的第一个选定比特率。 因此,如果需要生成 HLS 或 DASH 清单,建议使用单比特率 MP4 文件并将其上传到资产。 若要详细了解如何实现此目的,请参阅有关打包和交付部分中的“我能否流式传输其他解决方案中预编码或编码的现有 Mp4 文件?”。

只有当你要从这些协议的功能中获益时,才需要以 HLS 或 DASH 格式传送文件。 对于单比特率流,它们仍可以提供许多功能,例如更快的寻找速度、数字版权管理 (DRM) 支持、与 blob 存储中的渐进式下载 MP4 相比更难以通过 URL 下载(但仍然可能!)。 另一个好处是,为 VTT 和 IMSC1 提供了字幕支持。 此外,能够后期绑定其他音频再现内容或以备用语言进行配音使之在某些情况下成为一个有价值的选择。

实时传送视频流

什么是媒体服务实时事件?

媒体服务实时事件是引入实时视频源,并通过 RTMPS 协议或平滑流式处理进行广播的过程。 有关详细信息,请参阅媒体服务中的实时事件和实时输出

如何创建媒体服务实时事件?

第一步是选择本地编码器。 我们提供了使用 WirecastOBS 创建实时事件的示例。 如果更希望从媒体服务实时事件概述开始,请参阅实时事件类型

如何监视实时事件的运行状况?

可通过订阅 Azure 事件网格事件来监视实时事件。 有关详细信息,请参阅事件网格事件架构。 可以:

  • 订阅流式传输级别 Microsoft.Media.LiveEventEncoderDisconnected 事件,并监视一段时间内没有重新连接来停止和删除实时事件。
  • 订阅跟踪级别检测信号事件。 如果所有跟踪的传入比特率下降到 0,或者最后时间戳不再增大,则可以安全地关闭实时事件。 每个跟踪每隔 20 秒出现一次检测信号事件,因此可能有点冗长。

打包和交付

我已经上传、编码并发布了视频。 为什么在我尝试对视频进行流式处理时,它不播放?

最常见的原因之一是,你播放时使用的流式处理终结点未处于“正在运行”状态。

什么是媒体服务流式处理终结点?

在媒体服务中,流式处理终结点表示动态(即时)打包和源服务,该服务可使用一个常见流式处理媒体协议(HLS 或 DASH)直接将你的实时和按需内容发送到客户端播放器应用。 此外,流式处理终结点为业界领先的 DRM 系统提供动态(实时)加密。 有关详细信息,请参阅 Azure 媒体服务中的流式处理终结点(源)

什么是媒体服务流式处理定位符?

若要使视频可供客户端进行播放,必须创建流式处理定位符,然后生成流式处理 URL。 流式处理定位符还用于应用流式处理策略,其中包含媒体文件使用规则。

如何创建媒体服务流式处理定位符?

要生成流式处理 URL,首先创建一个流式处理定位符。 然后,将流式处理终结点主机名和流式处理定位符路径连接起来。 请参阅创建流定位符并生成 URL

什么是流式处理策略?

使用流式处理策略可为流式处理定位符定义流式处理协议和加密选项。 媒体服务 v3 提供了一些预定义的流式处理策略。 有关详细信息,请参阅流式处理策略

如何创建媒体服务流式处理策略?

有关可用于入门的预定义策略列表,请参阅流式处理策略

如何将 HLS 格式的内容流式传输到 Apple 设备?

确保路径末尾(在 URL 的 /manifest 部分之后)具有 (format=m3u8-cmaf),以告知流式处理源服务器返回供 Apple iOS 本机设备使用的 HLS 内容。 有关详细信息,请参阅传送内容

是否可以流式处理在其他解决方案中预编码或编码的现有 MP4 文件?

可以,媒体服务源服务器(流式处理终结点)支持将 MP4 文件动态打包为 HLS 或 DASH 流式处理格式。 但是,内容必须采用封闭的 GOP 格式进行编码,并且短 GOP 在 2-6 秒的持续时间范围内。 建议采用以下设置:2 秒 GOP、关键帧最大距离和最小距离为 2 秒以及恒定比特率编码(CBR 模式)。 可以支持通过 H.264 或 HEVC 视频编解码器以及 AAC 音频格式进行编码的此格式的大多数内容。 还可以支持预编码的其他音频格式(例如 Dolby DD+)。

使其正常工作的关键是创建资产,使用 Azure Blob 存储客户端 SDK 将预编码的资产上传到资产的容器中,然后生成所需服务器清单 (.ism) 和客户端清单文件。 有关详细信息,请参阅流式处理现有 MP4 文件中的 .NET 示例项目。

请记住,使用此方法时会产生性能影响,因为媒体服务中的内置编码器还会生成二进制索引(.mpi 文件)以改进 MP4 文件的访问时间。 如果没有这些文件,服务器在高负载时可以使用稍微更多的 CPU。 有关详细信息,请参阅使用 HLS 或 Dash 流式处理现有的单比特率 MP4 文件

使用这种方法进行纵向扩展时,应监视流式处理终结点的 CPU 负载。 如果你计划使用在媒体服务外部预编码的大型 MP4 文件库进行生产,请提交支持票证以查看你的体系结构并询问如何提高预编码 MP4 内容的源服务器性能。

2024 年 2 月之后,v2 流式处理定位符是否会继续工作?

关闭 v2 API 后,使用 v2 API 创建的流式处理定位符将继续工作。 在媒体服务后端数据库中创建流式处理定位符数据后,就不再依赖于用于流式处理的 v2 REST API。 2024 年 2 月关闭 v2 时,我们不会从数据库中删除特定于 v2 的记录。

使用 v2 创建的资产和定位符的一些属性无法使用新的 v3 API 访问或更新。 例如,v2 可公开资产文件 API,而 v3 API 中没有等效功能。 对于大多数客户来说,这通常不是一个问题,因为这项功能使用不广泛,你仍然可以流式传输旧定位符,并在不再需要它们时将其删除。

迁移后,应避免对 v2 API 进行任何调用以修改流式处理定位符或资产。

内容保护

如何通过动态加密传送媒体内容?

动态加密在媒体从计算机离开到存储、处理和传送的整个过程中确保其安全。 借助媒体服务,可以传送使用高级加密标准 (AES-128) 或以下两个主要 DRM 系统中的任意一个动态加密的直播和点播内容:Microsoft PlayReady 和 Apple FairPlay。 有关详细信息,请参阅使用媒体服务动态加密保护内容

应使用 AES-128 明文密钥加密还是 DRM 系统?

客户通常希望知道他们应该使用 AES 加密还是 DRM 系统。 这两种系统之间的主要区别是,使用 AES 加密时,内容密钥通过 TLS 传输到客户端。 密钥在传输中加密,无需任何其他加密(“明文”)。 因此,用于解密内容的密钥可由客户端播放器访问,并且可以在客户端上的网络跟踪中以纯文本形式显示。 AES-128 明文密钥加密适合查看者是受信任方的用例(例如,加密员工观看的在公司内部分发的公司视频)。

相比 AES-128 明文密钥,DRM 系统(例如 PlayReady 和 FairPlay)可对用于解密内容的密钥提供额外的加密级别。 内容密钥将会加密成受 DRM 运行时保护的密钥,此外还会进行 TLS 提供的任何传输级加密。 解密是操作系统级别在安全的环境中处理的,在这样的环境中,恶意用户更难进行攻击。 在观看者可能不是受信任方且需要更高等级的安全性的用例中,建议使用 DRM。

如何在不使用 Azure AD 的情况下仅向具有特定权限的用户显示视频?

无需使用任何特定的令牌提供程序,例如 Azure Active Directory (Azure AD)。 可以使用非对称密钥加密创建自己的 JWT 提供程序(所谓的“安全令牌服务”,简称 STS)。 在自定义 STS 中,可以根据业务逻辑添加声明。

确保颁发者、受众和声明在 JWT 中的内容和 ContentKeyPolicy 中使用的 ContentKeyPolicyRestriction 值之间完全匹配。

有关详细信息,请参阅使用媒体服务动态加密保护内容

在使用 JWT 令牌请求许可证或密钥之前,如何以及在何处获取 JWT 令牌?

在生产环境中,需要获取安全令牌服务(一个 Web 服务),以便根据 HTTPS 请求颁发 JWT 令牌。 对于测试,可以使用 Program.cs 定义的 GetTokenAsync 方法中所示的代码。

对用户进行身份验证后,播放器会向 STS 发出请求以获取此类令牌,并将其分配为令牌的值。 可以使用 Azure Media Player API

有关使用对称密钥或非对称密钥运行 STS 的示例,请参阅 JWT 工具。 有关基于使用此类 JWT 令牌的 Azure Media Player 的播放器示例,请参阅 Azure 媒体测试工具。 (展开“player_settings”链接可查看令牌输入。)

如何授权使用 AES 加密流式传输视频的请求?

正确的方法是使用安全令牌服务。 在 STS 中,根据用户配置文件添加不同的声明(例如“高级用户”、“基本用户”或“免费试用版用户”)。 在 JWT 中添加不同的声明后,用户可以查看不同的内容。 对于不同的内容或资产,ContentKeyPolicyRestriction 会包含相应的 RequiredClaims 值。

使用 Azure 媒体服务 API 来配置许可证/传送密钥以及加密资产(如此示例中所示)。

有关详细信息,请参阅:

为什么在使用 FairPlay 脱机模式时只播放音频而不播放视频?

此行为似乎是示例应用专门设计的。 存在备用音频曲目时(这适用于 HLS),在脱机模式期间,iOS 10 和 iOS 11 都默认播放备用音频曲目。为了补偿 FPS 脱机模式中的这一行为,需要从流删除备用音频曲目。 若要在媒体服务中完成此操作,请添加动态清单筛选器 audio-only=false。 换言之,HLS URL 将以 .ism/manifest(format=m3u8-aapl,audio-only=false) 结尾。

为什么添加 audio-only=false 之后,FairPlay 脱机模式只播放音频而不播放视频?

根据内容分发网络的缓存键设计,可能会缓存该内容。 请清除缓存。

iOS 设备上的已下载/脱机文件结构是什么?

iOS 设备上的已下载文件结构如下屏幕截图所示。 _keys 文件夹存储已下载的 FPS 许可证,每个许可证服务主机一个存储文件。 .movpkg 文件夹存储音频和视频内容。

第一个文件夹(文件名以破折号加数字结尾)包含视频内容。 数值是峰值带宽视频呈现形式。 第二个文件夹(文件名以破折号加 0 结尾)包含音频内容。 第三个文件夹(文件名为“Data”)包含 FPS 内容的主播放列表。 最后,boot.xml 提供 .movpkg 文件夹内容的完整说明。

Screenshot that shows the offline file structure for the FairPlay iOS sample app.

下面是一个示例 boot.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<HLSMoviePackage xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns="http://apple.com/IMG/Schemas/HLSMoviePackage" xsi:schemaLocation="http://apple.com/IMG/Schemas/HLSMoviePackage /System/Library/Schemas/HLSMoviePackage.xsd">
  <Version>1.0</Version>
  <HLSMoviePackageType>PersistedStore</HLSMoviePackageType>
  <Streams>
    <Stream ID="1-4DTFY3A3VDRCNZ53YZ3RJ2NPG2AJHNBD-0" Path="1-4DTFY3A3VDRCNZ53YZ3RJ2NPG2AJHNBD-0" NetworkURL="https://willzhanmswest.streaming.mediaservices.windows.net/e7c76dbb-8e38-44b3-be8c-5c78890c4bb4/MicrosoftElite01.ism/QualityLevels(127000)/Manifest(aac_eng_2_127,format=m3u8-aapl)">
      <Complete>YES</Complete>
    </Stream>
    <Stream ID="0-HC6H5GWC5IU62P4VHE7NWNGO2SZGPKUJ-310656" Path="0-HC6H5GWC5IU62P4VHE7NWNGO2SZGPKUJ-310656" NetworkURL="https://willzhanmswest.streaming.mediaservices.windows.net/e7c76dbb-8e38-44b3-be8c-5c78890c4bb4/MicrosoftElite01.ism/QualityLevels(161000)/Manifest(video,format=m3u8-aapl)">
      <Complete>YES</Complete>
    </Stream>
  </Streams>
  <MasterPlaylist>
    <NetworkURL>https://willzhanmswest.streaming.mediaservices.windows.net/e7c76dbb-8e38-44b3-be8c-5c78890c4bb4/MicrosoftElite01.ism/manifest(format=m3u8-aapl,audio-only=false)</NetworkURL>
  </MasterPlaylist>
  <DataItems Directory="Data">
    <DataItem>
      <ID>CB50F631-8227-477A-BCEC-365BBF12BCC0</ID>
      <Category>Playlist</Category>
      <Name>master.m3u8</Name>
      <DataPath>Playlist-master.m3u8-CB50F631-8227-477A-BCEC-365BBF12BCC0.data</DataPath>
      <Role>Master</Role>
    </DataItem>
  </DataItems>
</HLSMoviePackage>

如何为某些客户端/用户传送永久许可证(允许脱机)并为其他人传送非永久许可证(禁用脱机)? 是否必须复制内容并使用单独的内容密钥?

由于媒体服务 v3 允许资产有多个 StreamingLocator 实例,因此你可以有:

  • 一个 license_type = "persistent"ContentKeyPolicy 实例,其中的 ContentKeyPolicyRestriction 包含对 "persistent" 的声明,此外还有 StreamingLocator 实例。
  • 另一个 license_type="nonpersistent"ContentKeyPolicy 实例,其中的 ContentKeyPolicyRestriction 包含对 "nonpersistent 的声明,此外还有 StreamingLocator 实例。
  • 两个具有不同 ContentKey 值的 StreamingLocator 实例。

根据自定义 STS 的业务逻辑,在 JWT 令牌中发出不同的声明。 使用该令牌,只能获得相应的许可证,并且只能播放相应的 URL。

监视

如何监视媒体服务资源?

使用 Azure Monitor 跟踪媒体服务资源的动态。 有关详细信息,请参阅监视媒体服务。 操作指南包括监视诊断媒体服务指标监视媒体服务诊断日志

如何监视媒体服务实时事件?

高可用性

媒体服务是否支持高可用性?

有关媒体服务和高可用性的信息,请参阅使用媒体服务和点播视频 (VOD) 实现高可用性

从 v2 迁移

如何从媒体服务 v2 迁移到媒体服务 v3?

我们创建了从 v2 迁移到 v3 的综合指南。 我们非常期待了解你的迁移体验和需求,所以请随时通过 GitHub 问题或支持票证提供反馈。

故障排除

如何查明此错误代码的含义?

我们在以下参考中记录了错误代码:流式处理终结点错误代码实时事件错误代码作业错误代码。 如果在该列表找不到你要的答案,请创建支持票证。

如何重置帐户凭据?

计费和成本估算

媒体服务的费用是多少?

配额和限制

媒体服务配额和限制是多少?

合规性和客户数据

媒体服务是否在服务区域之外存储任何客户数据?

客户将自己的存储帐户附加到 Azure 媒体服务帐户。 所有资产数据都存储在这些关联的存储帐户中,客户控制此存储的位置和复制类型。

与媒体服务帐户关联的其他数据(包括内容加密密钥、令牌验证密钥、JobInputHttp URL 以及其他实体元数据)存储在为媒体服务帐户选择的区域中的 Azure 所有存储中。

其他帐户数据还可以存储在配对区域中的 Azure 所有存储中。

媒体服务是否提供高可用性或数据复制?

Azure 媒体服务是一种区域服务,不提供高可用性或数据复制。 建议需要这些功能的客户使用多个区域的媒体服务构建解决方案。 我们以指南的形式提供了一个示例,展示了如何使用媒体服务点播视频构建解决方案以实现高可用性