【问题标题】:Azure Functions provide mp4 Video with Azure Media Service in JavaScriptAzure Functions 使用 JavaScript 中的 Azure 媒体服务提供 mp4 视频
【发布时间】:2021-09-12 21:05:10
【问题描述】:

我想将 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 视频播放器。 在教程中,他们创建了一个流式定位器,我不能将其用于 HTML 5 播放器。 我可以直接使用blob吗?或者这不是一个好主意?如果是,我如何在没有任何访问密钥的情况下提供它。

【问题讨论】:

    标签: azure azure-blob-storage azure-media-services


    【解决方案1】:

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

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

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

    【讨论】:

    • 好的,我创建了一个包含 hls、dash 和下载的流式定位器。我可以将下载路径用作 html5 播放器的 src,它以“渐进式下载”方式工作。另外两个不兼容html5播放器还是我错了?
    • 取决于浏览器或操作系统。某些浏览器(如 Safari)在 Video 标签中内置了对 HLS 流式传输的支持。 Microsoft Edge 和 Android 浏览器在视频标签中也原生支持 HLS。但是,如果您认真对待自适应流式传输,请查看适用于您网页的播放器框架,例如 HLS.js、Shaka 播放器、Dash.js、Video.js 或其他。很多选择。
    • 另一个很好的细节来源 - stackoverflow.com/questions/18434803/…
    • 好的,我明白了。最后一个问题是,HLS URL 提供的 AMS 是什么(例如 https://-gewc1.streaming.media.azure.net//.ism/manifest(format=m3u8 -aapl))?当我尝试使用这个端点时,像 hls.js 这样的库会出现 manifest-load-error。
    • 这是带有传输流 (.ts) 文件的 HLS v4 的格式标记。您还可以使用以下格式标记 (format=m3u8-cmaf) 来获取基于 CMAF (.mp4) 的 HLS 清单。这是我推荐的。 HLS.js 应该可以正常工作 - 我需要检查您的清单并查看发生了什么。它是 HLS.js 的最新版本吗?你也试过沙卡或其他玩家并确认吗?
    猜你喜欢
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    相关资源
    最近更新 更多