繁体   English   中英

如何为 Azure 媒体服务直播 stream 事件构建流媒体 URL? rest api 通话中的流媒体定位器路径在哪里?

[英]How to construct a streaming URL for Azure Media Services live stream event? Where is the streaming locator path on the rest api call?

在 rest api 服务或 sdk 中,文档中没有很好地说明如何提出 stream url。

在 Azure 门户中,它会在您创建直播流媒体事件时创建一个直播 output 和一个 stream 定位器。

同样,文档没有解决这个问题。

要使 output 资产中的视频可供客户端播放,您必须创建流媒体定位器,然后构建流媒体 URL。 要构建 URL,您需要连接 Streaming Endpoint 主机名和 Streaming Locator 路径。

使用 rest api 流媒体定位器路径在哪里? 它不在响应中。

许多示例也展示了如何执行此操作,Node.js/Typescript 示例是一个很好的起点,因为所有 SDK 的镜像彼此和 REST API 实体。

当前 Streaming 定位器 API 的问题之一是它没有返回完整路径……对于某些客户来说,这已经是一个问题一段时间了,我更希望我们为人们构建整个路径。 我们不这样做的原因是因为我们提供了在单个帐户中拥有多个流媒体端点(原始服务器)的灵活性。 这允许一些客户为来自一个端点的实时流和来自第二个端点的 VOD 点播流构建定位器,第二个端点可能具有不同的 CDN 配置或缓存设置,或 CNAME 等。我们提供太多灵活性的错误 - 这导致复杂的 API。我认为我们不会在未来简化的 API 中这样做。

请参阅此基本流式传输示例 - https://github.com/Azure-Samples/media-services-v3-node-tutorials/blob/main/Streaming/StreamFilesSample/index.ts

   async function getStreamingUrls(locatorName: string) {
      // Make sure the streaming endpoint is in the "Running" state on your account
      let streamingEndpoint = await mediaServicesClient.streamingEndpoints.get(resourceGroup, accountName, "default");
    
      let paths = await mediaServicesClient.streamingLocators.listPaths(resourceGroup, accountName, locatorName);
      if (paths.streamingPaths) {
        paths.streamingPaths.forEach(path => {
          path.paths?.forEach(formatPath => {
            let manifestPath = "https://" + streamingEndpoint.hostName + formatPath
            console.log(manifestPath);
            console.log(`Click to playback in AMP player: http://ampdemo.azureedge.net/?url=${manifestPath}`)
          });
        });
      }
    }

请注意,您应尽量避免直接使用 REST api,而应使用 SDK。 原因是 Azure 资源管理器重试等需要大量样板重试逻辑,除非您在您选择的开源 SDK 中深入研究该逻辑并处理 Azure REST,否则您很难自己完全滚动响应对象和长时间运行的操作模式。 我总是鼓励人们尽可能避免“滚动他们自己的语言”SDK。 我曾遇到过大客户项目因实施错误或忘记处理某些重试而失败。

不久前我将其添加到文档中以处理该问题:

警告

不建议尝试将媒体服务的 REST API 直接包装到您自己的库代码中,因为为了生产目的正确地这样做将需要您实现完整的 Azure 资源管理重试逻辑并了解如何管理 Azure 中的长时间运行操作资源管理 API。 这是由各种语言的客户端 SDK 处理的 - .NET、Java、TypeScript、Python 等 - 自动处理并减少您遇到重试逻辑问题或 API 调用失败的可能性。 客户端 SDK 都已经为您处理了这个问题。

在从头开始创建 api 并分解生成的 URL 之后,我发现了这里。

https://<stream-endpoint-url>/<stream-locator-id>/<manifestName>.ism/manifest(format=m3u8-cmaf)

  1. 首先创建一个直播,默认情况下您将拥有一个来自 Azure 媒体服务的流端点。 您创建的那个或流媒体端点将是您的`<-stream-endpoint-url>

  2. 此处列出的streamLocatorId地“properties.streamingLocatorId string The StreamingLocatorId of the Streaming Locator”。 实际上是一个 32 位 GUID。 “xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx” ***注意你可以设置这个但实际上你应该让它随机生成。

  3. manifestName来自于创建实时 output 并且是您可以设置的属性字符串。 "properties.manifestName string 清单文件名。如果未提供,服务将自动生成一个。"

  4. 最后, /manifest(format for HLS or Dash)将完成 url。

不幸的是,我在文档中找不到这个,但希望这会对某人有所帮助。

更新:

我在文档中找到的是这个Stream 路径 api。

这样做的好处在于它会告诉您路径是什么,您只需要将链接连接在一起即可。 然而,这又是一个如此有趣的事后调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM