【问题标题】:Azure media player How to get the source url for the playerAzure 媒体播放器如何获取播放器的源 url
【发布时间】:2019-10-02 12:38:20
【问题描述】:

我有一个 azure 媒体服务帐户,其中包含一些上传的视频,但这些视频只能在浏览器上播放,并带有一些额外的参数,比如这些 (?sv=2017-04-17&sr=c&sig=QMSr...),比如身份验证密钥. 我想要一个可以随时播放的通用永久渐进式视频 URL,我尝试使用带有 .ism/manifest 和 .mp4 的视频 URL 的 azure 媒体播放器,但两者都无法播放 经验:

https://<MY_BLOBSTORAGE_ACCOUNT>.blob.core.windows.net/<Asset-ID>/Video_FILE_NAME>.ism/manifest

https://<MY_BLOBSTORAGE_ACCOUNT>.blob.core.windows.net/<Asset-ID>/<Video_FILE_NAME>_1280x720_AACAudio.mp4

我已经从这个官方的微软文档中试用了播放器: http://amp.azure.net/libs/amp/latest/docs/index.html#full-setup-of-azure-media-player

另请注意,Azure Media Services V3 文档和 ams 本身的社区在解释以编程方式获取播放器视频 URL 的步骤方面非常糟糕和薄弱。

【问题讨论】:

    标签: azure-media-services azure-media-player


    【解决方案1】:

    使用 AMS v3,您必须创建流式定位器,并且可以使用预构建的流式传输策略。有针对的政策 - 仅流式传输 - 流式传输和下载 - 只下载

    使用下载策略,您将获得资产中每个 blob 的 URL。例如 : https://myaccount-uswc.streaming.media.azure.net/1544fcae-a248-4f53-b653-cd02074b04b6/video_848x480_2200.mp4

    使用流式传输策略(推荐),您将获得 DASH、HLS 和平滑 URL,例如: https://myaccount-uswc.streaming.media.azure.net/0eef6f88-47c6-4662-9111-60305d7c1000/video.ism/manifest(format=mpd-time-csf).mpd

    【讨论】:

      【解决方案2】:

      您似乎在混合渐进式下载和流式传输。我在https://blogs.msdn.microsoft.com/randomnumber/2016/03/23/progressive-download-and-streaming-differences-with-azure-media-services/ 上写了一篇关于与 Azure 媒体服务相关的差异的博客文章。如果您将视频编码为自适应比特率 MP4 集,那么您很可能希望流式传输视频,而不是在单个 MP4 上使用渐进式下载。这可能有助于流式传输:https://docs.microsoft.com/en-us/azure/media-services/latest/dynamic-packaging-overview

      【讨论】:

        【解决方案3】:

        我在朋友的帮助下找到了解决方案,在创建流式定位器后,我必须确保流式端点正在运行,然后通过循环遍历我需要使用StreamingLocators.ListPathsAsync 获取的路径来获取构建 URL,如下是代码sn-p。

                private async Task<StreamingLocator> CreateStreamingLocatorAsync(
                    IAzureMediaServicesClient client,
                    string resourceGroup,
                    string accountName,
                    string assetName,
                    string locatorName)
                {
                    StreamingLocator locator = await client.StreamingLocators.CreateAsync(
                        resourceGroup,
                        accountName,
                        locatorName,
                        new StreamingLocator
                        {
                            AssetName = assetName,
                            StreamingPolicyName = PredefinedStreamingPolicy.ClearStreamingOnly
                        });
        
                    return locator;
                }
        
                private async Task<IList<string>> GetStreamingUrlsAsync(
                    IAzureMediaServicesClient client,
                    string resourceGroupName,
                    string accountName,
                    String locatorName)
                {
                    const string DefaultStreamingEndpointName = "default";
        
                    IList<string> streamingUrls = new List<string>();
        
                    StreamingEndpoint streamingEndpoint = await client.StreamingEndpoints.GetAsync(resourceGroupName, accountName, DefaultStreamingEndpointName);
        
                    if (streamingEndpoint != null)
                    {
                        if (streamingEndpoint.ResourceState != StreamingEndpointResourceState.Running)
                        {
                            await client.StreamingEndpoints.StartAsync(resourceGroupName, accountName, DefaultStreamingEndpointName);
                        }
                    }
        
                    ListPathsResponse paths = await client.StreamingLocators.ListPathsAsync(resourceGroupName, accountName, locatorName);
        
                    foreach (StreamingPath path in paths.StreamingPaths)
                    {
                        UriBuilder uriBuilder = new UriBuilder();
                        uriBuilder.Scheme = "https";
                        uriBuilder.Host = streamingEndpoint.HostName;
        
                        uriBuilder.Path = path.Paths[0];
                        streamingUrls.Add(uriBuilder.ToString());
                    }
        
                    return streamingUrls;
                }
        

        在我的服务方法中,我执行以下操作:

        StreamingLocator locator = await CreateStreamingLocatorAsync(client,
        config.ResourceGroup, config.AccountName, outputAsset.Name, locatorName);
        
        IList<string> streamingUrls = await GetStreamingUrlsAsync(client, config.ResourceGroup, config.AccountName, locator.Name);
        foreach (var url in streamingUrls)
           {
               urls.Add(url);
               Console.WriteLine(url);
           }
        myModel.StreamingUrls = urls;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-02-27
          相关资源
          最近更新 更多