Azure Functions 在 JavaScript 中通过 Azure 媒体服务提供 mp4 视频

Azure Functions provide mp4 Video with Azure Media Service in JavaScript

我想使用 Azure Blob 存储进行视频托管。这些视频通过 HTML 视频播放器集成在我的网站中:

<video controls>
  <source src="blobstorageurl" type="video/mp4">
  Your browser does not support HTML video.
</video>

所以我创建了一个 blob 容器,我在其中上传了视频。 Azure 函数(Blob 触发器)正在观察此容器。上传新视频时,Azure 函数应启动 AMS 作业,并将新文件作为源。

我用的是官方例子的逻辑(https://github.com/Azure-Samples/media-services-v3-node-tutorials/blob/main/AMSv3Samples/StreamFilesSample/index.ts)。

这是我的代码的一个小分解:

const blobTrigger: AzureFunction = async function (context: Context, myBlob: any): Promise<void> {
  ...
  mediaServicesClient = new AzureMediaServices(creds, subscriptionId, clientOptions);
  let job = await mediaServicesClient.jobs.create(resourceGroup, accountName, transformName, jobName, { input: context.bindingData.uri, outputs: jobOutputs });
}

这基本上是用编码文件创建一个新的 blob 容器。

我的问题是,如何将此文件提供给我的 HTML 视频播放器。 在教程中,他们创建了一个 Streaming Locator,我无法将其用于 HTML 5 Player。 我可以直接使用 blob 吗?或者这不是一个好主意吗?如果是,我如何在没有任何访问密钥的情况下提供它。

首先,您应该确保了解所谓的“渐进式下载”带标签的视频文件与使用 HLS 或 DASH 流式传输协议和“自适应流式传输”的真正流式传输解决方案之间的技术差异.有很多资源可以解释两者之间的差异以及客户体验。

基本上,对于网络状况不佳的客户来说,渐进式下载会涉及较长的缓冲期,并且如果网络条件发生变化(例如在蜂窝网络上),播放体验将不会那么快或流畅。)

只需在存储帐户容器中的 MP4 上创建一个 SAS 定位器(使其成为 public),您就可以轻松地获得渐进式下载 URL,或者您可以通过流式定位器传送它同样,如果您将流媒体策略名称设置为:'Predefined_DownloadAndClearStreaming'。 这将允许您列出 HLS、DASH 和 SAS(渐进式下载)路径。您还可以在 AMSE 工具中更轻松地看到这一点。 有关内置策略类型的详细信息,请参阅此内容(您还可以为流式传输定义自定义策略类型。) https://docs.microsoft.com/en-us/rest/api/media/streaming-locators/create