Example #1
0
        private static IProgram CreateProgram(CloudMediaContext context, IChannel amsChannel, AMSEvent eventData)
        {
            string assetName = string.Format("{0}-{1}", amsChannel.Name, GetProgramName(eventData));

            IAsset asset = GetAssetByName(context, assetName);

            if (asset == null)
            {
                asset = TraceOperation("Create " + assetName, () => CreateAsset(context, assetName));
            }

            if (asset.Locators.Count == 0)
            {
                TraceOperation("Create Locator", () => CreateLocator(context, asset));
            }

            ProgramCreationOptions options = new ProgramCreationOptions();

            options.Name                = GetProgramName(eventData);
            options.AssetId             = asset.Id;
            options.Description         = eventData.Name;
            options.ArchiveWindowLength = TimeSpan.FromHours(4);

            return(TraceOperation("Create Program {0}", () => amsChannel.Programs.Create(options), options.Name));
        }
Example #2
0
        //Live protection: given channel name and program name, set up dynamic PlayReady protection for live and start the program
        public static void SetupLiveDynamicPlayReadyProtection(CloudMediaContext objCloudMediaContext, string channelName, string programName, string manifestFileName)
        {
            //get channel
            IChannel objIChannel = objCloudMediaContext.Channels.Where(c => c.Name == channelName).FirstOrDefault();

            Console.WriteLine(string.Format("IChannel.IngestUrl = {0}", objIChannel.Input.Endpoints.FirstOrDefault().Url.ToString()));
            Console.WriteLine(string.Format("IChannel.PreviewUrl = {0}", objIChannel.Preview.Endpoints.FirstOrDefault().Url.ToString()));

            //create program asset
            IAsset objIAsset = objCloudMediaContext.Assets.Create(string.Format("{0}_Program_Asset_PR", channelName), AssetCreationOptions.None);

            //set up dynamic PlayReady protection for the asset exactly as VOD
            SetupDynamicPlayReadyProtection(objCloudMediaContext, objIAsset);

            //create a program using this asset
            ProgramCreationOptions options = new ProgramCreationOptions()
            {
                Name                = programName,
                Description         = "Dynamic PlayReady protection for live",
                ArchiveWindowLength = TimeSpan.FromMinutes(120.0),
                ManifestName        = manifestFileName, //manifest file name to be duplicated (without .ism suffix)
                AssetId             = objIAsset.Id
            };
            IProgram objIProgram = objIChannel.Programs.Create(options);

            //publish the asset
            Program.GetStreamingOriginLocator(objIAsset.Id, Program.MediaContentType.SmoothStreaming, true);

            //start the program
            objIProgram.Start();
            Console.WriteLine("Program {0} has started", programName);
        }
        private void CreateProgram(IChannel channel, IAsset asset, int?archiveWindowMinutes)
        {
            if (!archiveWindowMinutes.HasValue)
            {
                string settingKey            = Constant.AppSettingKey.MediaChannelProgramArchiveMinutes;
                string programArchiveMinutes = AppSetting.GetValue(settingKey);
                archiveWindowMinutes = int.Parse(programArchiveMinutes);
            }
            ProgramCreationOptions programOptions = new ProgramCreationOptions()
            {
                Name                = asset.Name,
                AssetId             = asset.Id,
                ArchiveWindowLength = new TimeSpan(0, archiveWindowMinutes.Value, 0)
            };

            channel.Programs.Create(programOptions);
        }
Example #4
0
        private void CreateProgram(IChannel channel)
        {
            string assetName = channel.Name;
            AssetCreationOptions assetEncryption = AssetCreationOptions.None;
            IAsset asset = _media.Assets.Create(assetName, assetEncryption);

            ProgramCreationOptions creationOptions = new ProgramCreationOptions();

            creationOptions.Name    = channel.Name;
            creationOptions.AssetId = asset.Id;

            int    archiveMinutesInt;
            string settingKey     = Constants.AppSettingKey.MediaChannelProgramArchiveMinutes;
            string archiveMinutes = AppSetting.GetValue(settingKey);

            if (int.TryParse(archiveMinutes, out archiveMinutesInt))
            {
                creationOptions.ArchiveWindowLength = new TimeSpan(0, archiveMinutesInt, 0);
            }
            channel.Programs.Create(creationOptions);
        }
        public static async Task <object> Run([HttpTrigger(WebHookType = "genericJson")] HttpRequestMessage req, TraceWriter log)

        {
            log.Info($"Webhook was triggered!");

            string jsonContent = await req.Content.ReadAsStringAsync();

            dynamic data = JsonConvert.DeserializeObject(jsonContent);

            log.Info(jsonContent);

            if (data.channelName == null)
            {
                return(req.CreateResponse(HttpStatusCode.BadRequest, new
                {
                    error = "Please pass channelName in the input object"
                }));
            }
            if (data.programName == null)
            {
                return(req.CreateResponse(HttpStatusCode.BadRequest, new
                {
                    error = "Please pass programName in the input object"
                }));
            }
            string   channelName   = data.channelName;
            string   programName   = data.programName;
            string   assetName     = data.assetName;
            IProgram program       = null;
            TimeSpan archiveLength = new TimeSpan(0, data.archiveWindowLength != null ? (int)data.archiveWindowLength : 5, 0); // default 5 min

            MediaServicesCredentials amsCredentials = new MediaServicesCredentials();

            log.Info($"Using Azure Media Service Rest API Endpoint : {amsCredentials.AmsRestApiEndpoint}");

            IAsset newAsset = null;

            try
            {
                AzureAdTokenCredentials tokenCredentials = new AzureAdTokenCredentials(amsCredentials.AmsAadTenantDomain,
                                                                                       new AzureAdClientSymmetricKey(amsCredentials.AmsClientId, amsCredentials.AmsClientSecret),
                                                                                       AzureEnvironments.AzureCloudEnvironment);

                AzureAdTokenProvider tokenProvider = new AzureAdTokenProvider(tokenCredentials);

                _context = new CloudMediaContext(amsCredentials.AmsRestApiEndpoint, tokenProvider);

                log.Info("Context object created.");

                var channel = _context.Channels.Where(c => c.Name == channelName).FirstOrDefault();
                if (channel == null)
                {
                    return(req.CreateResponse(HttpStatusCode.BadRequest, new
                    {
                        error = string.Format("Channel {0} not found", channelName)
                    }));
                }

                newAsset = _context.Assets.Create(assetName, (string)data.assetStorage, AssetCreationOptions.None);

                log.Info("new asset created.");

                if (data.alternateId != null)
                {
                    newAsset.AlternateId = (string)data.alternateId;
                    newAsset.Update();
                }


                ProgramCreationOptions options = new ProgramCreationOptions()
                {
                    Name                = programName,
                    ManifestName        = data.manifestName,
                    Description         = data.description,
                    AssetId             = newAsset.Id,
                    ArchiveWindowLength = archiveLength
                };
                program = channel.Programs.Create(options);

                log.Info("new program created.");


                if (data.startProgram == null || (data.startProgram != null && (bool)data.startProgram))
                {
                    log.Info("starting program...");
                    program.Start();
                    log.Info("Program started.");
                }

                program = _context.Programs.Where(p => p.Id == program.Id).FirstOrDefault(); // refresh
            }
            catch (Exception ex)
            {
                string message = ex.Message + ((ex.InnerException != null) ? Environment.NewLine + MediaServicesHelper.GetErrorMessage(ex) : "");
                log.Info($"ERROR: Exception {message}");
                return(req.CreateResponse(HttpStatusCode.InternalServerError, new { error = message }));
            }

            log.Info("asset Id: " + newAsset.Id);
            log.Info("container Path: " + newAsset.Uri.Segments[1]);

            return(req.CreateResponse(HttpStatusCode.OK, new
            {
                containerPath = newAsset.Uri.Segments[1],
                assetId = newAsset.Id,
                manifestName = program.ManifestName,
                id = program.Id,
                state = program.State
            }));
        }