コード例 #1
0
        public static async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]
            HttpRequest req, ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            dynamic data;

            try
            {
                data = JsonConvert.DeserializeObject(new StreamReader(req.Body).ReadToEnd());
            }
            catch (Exception ex)
            {
                return(IrdetoHelpers.ReturnErrorException(log, ex));
            }

            AssetEntry assetEntry1 = null;

            if (data.assetMain != null)
            {
                assetEntry1 = ((JObject)data?.assetMain).ToObject <AssetEntry>();
            }

            AssetEntry assetEntry2 = null;

            if (data.assetSub != null)
            {
                assetEntry2 = ((JObject)data?.assetSub).ToObject <AssetEntry>();
            }

            string newHostName = (string)data.cdnHostName;

            if (string.IsNullOrWhiteSpace(newHostName))
            {
                newHostName = null;
            }

            VodResource vodResource = new VodResource()
            {
                Urn          = assetEntry1.Urn,
                ResourceList = new List <ResourceList>(),
                MainAsset    = assetEntry1
            };


            var subtitlesList = new List <Subtitles>();

            if (assetEntry2 != null)
            {
                var locator2      = assetEntry2.StreamingLocators.FirstOrDefault();
                var subtitlesUrl  = locator2?.Urls.Where(p => p.Protocol == "Download");
                var subtitlesSema = assetEntry2?.Semaphore.Files.Where(f => f.CopyToSubAsset);

                var query = from subInfo in subtitlesSema
                            join sub in subtitlesUrl on subInfo.FileName equals(new Uri(sub.Url)).Segments[(new Uri(sub.Url)).Segments.Length - 1]
                            select new Subtitles
                {
                    Url = MediaServicesHelpers.UpdateHostNameIfNeeded(newHostName, sub.Url), TextLanguage = subInfo.TextLanguage, TextTitle = subInfo.TextTitle
                };
                subtitlesList = query.ToList();
            }

            var locator1 = assetEntry1.StreamingLocators.FirstOrDefault();

            var resDashCsf = new ResourceList()
            {
                Url            = MediaServicesHelpers.UpdateHostNameIfNeeded(newHostName, locator1?.Urls.Where(u => u.Protocol == "DashCsf").FirstOrDefault()?.Url),
                Protocol       = "DASH",
                MimeType       = "application/dash+xml",
                VideoCodec     = "H264",
                AudioCodec     = "AAC",
                MediaContainer = "MP4",
                Quality        = "SD",
                Live           = false,
                DrmList        = new List <DrmList>()
                {
                    new DrmList()
                    {
                        Type = "PlayReady", LicenseUrl = locator1?.Drm?.Where(d => d.Type == "PlayReady").FirstOrDefault()?.LicenseUrl
                    },
                    new DrmList()
                    {
                        Type = "Widevine", LicenseUrl = locator1?.Drm?.Where(d => d.Type == "Widevine").FirstOrDefault()?.LicenseUrl
                    }
                },
                SubTitles = subtitlesList
            };

            vodResource.ResourceList.Add(resDashCsf);

            var resHlsTs = new ResourceList()
            {
                Url            = MediaServicesHelpers.UpdateHostNameIfNeeded(newHostName, locator1?.Urls.Where(u => u.Protocol == "HlsTs").FirstOrDefault()?.Url),
                Protocol       = "HLS",
                MimeType       = "application/x-mpegURL",
                VideoCodec     = "H264",
                AudioCodec     = "AAC",
                MediaContainer = "MP4",
                Quality        = "SD",
                Live           = false,
                DrmList        = new List <DrmList>()
                {
                    new DrmList()
                    {
                        Type           = "FairPlay",
                        LicenseUrl     = locator1.Drm.Where(d => d.Type == "FairPlay").FirstOrDefault().LicenseUrl,
                        CertificateUrl = locator1.Drm.Where(d => d.Type == "FairPlay").FirstOrDefault().CertificateUrl
                    },
                },
                SubTitles = subtitlesList
            };

            vodResource.ResourceList.Add(resHlsTs);


            // let's write it to Cosmos
            if (!await CosmosHelpers.CreateOrUpdateVODResourceDocument(vodResource))
            {
                log.LogWarning("Cosmos access not configured.");
            }


            return(new OkObjectResult(
                       JsonConvert.SerializeObject(vodResource, Formatting.Indented)
                       ));
        }