如何构造Azure Media Services实时流事件的流URL?流定位器路径在rest API调用上的何处?

qoefvg9y  于 2023-01-02  发布在  其他
关注(0)|答案(2)|浏览(111)

无论是在API服务还是sdk中,文档中都没有很好地解释如何提出流url。
在Azure门户中,当您创建实时流媒体事件、实时输出和流定位器时,它将创建一个。
同样,文档没有解决这个问题。
若要使输出资产中的视频可供客户端播放,你必须创建流式定位器,然后构建流式URL。若要构建URL,你需要将流式端点主机名和流式定位器路径连接起来。
使用restapi流定位器路径在哪里?它不在响应中。

t9aqgxwy

t9aqgxwy1#

许多示例也展示了如何做到这一点,Node.js/Typescript示例是一个很好的起点,因为所有SDK都是彼此镜像和REST API实体镜像的。
当前的流定位器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 for Media Services直接 Package 到您自己的库代码中,因为如果出于生产目的正确 Package ,则需要您实现完整的Azure资源管理重试逻辑并了解如何管理Azure资源管理API中的长时间运行操作。这由各种语言的客户端SDK处理-. NET、Java、TypeScript、Python、等-自动执行,减少了重试逻辑或API调用失败的问题。客户端SDK已经为您处理了这些问题。*
dgenwo3n

dgenwo3n2#

在从头开始创建API并分解生成的URL后,我发现了以下内容。
第一个月
1.首先创建实况流,默认情况下,你将具有来自Azure Media Services的流终结点。该终结点或你创建的流终结点将成为你的"<-stream-endpoint-url>
1.这里列出的streamLocatorId不可能是"properties. streamingLocatorId string The StreamingLocatorId of the Streaming Locator.",实际上是一个32位GUID。"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"***注意,您可以设置此值,但实际上您应该允许此值,但可能应该让它随机生成。

  1. manifestName来自创建实时输出,是一个可以设置的属性字符串。"properties. manifestName string清单文件名。如果未提供,服务将自动生成一个。"
    1.最后,/manifest(format for HLS or Dash)将完成url。
    不幸的是,我在文档中找不到这一点,但希望这将有助于一些人。
    更新:
    我在文档中找到的是Stream Paths api.
    这个函数的好处是它告诉你路径是什么,你只需要把链接连接在一起,然而,这是一个非常有趣的事后调用。

相关问题