/// <summary>
        /// This method starts the live encoding<para />
        ///
        /// API endpoint:
        /// https://bitmovin.com/docs/encoding/api-reference/sections/encodings#/Encoding/PostEncodingEncodingsLiveStartByEncodingId
        /// </summary>
        /// <param name="encoding">The encoding that should be started and checked until it is running</param>
        /// <param name="startLiveEncodingRequest">The request object that is sent with the start call</param>
        private async Task StartLiveEncodingAndWaitUntilRunning(Models.Encoding encoding,
                                                                StartLiveEncodingRequest startLiveEncodingRequest)
        {
            await _bitmovinApi.Encoding.Encodings.Live.StartAsync(encoding.Id, startLiveEncodingRequest);

            await WaitUntilEncodingIsInState(encoding, Status.RUNNING);
        }
        public async Task RunExample(string[] args)
        {
            _configProvider = new ConfigProvider(args);
            _bitmovinApi    = BitmovinApi.Builder
                              .WithApiKey(_configProvider.GetBitmovinApiKey())
                              .WithLogger(new ConsoleLogger())
                              .Build();

            var encoding = await CreateEncoding("Live encoding example", "Live encoding with RTMP input");

            var input = await GetRtmpInput();

            var inputFilePath = "live";

            var output = await CreateS3Output(_configProvider.GetS3OutputBucketName(),
                                              _configProvider.GetS3OutputAccessKey(),
                                              _configProvider.GetS3OutputSecretKey());

            // Add an H.264 video stream to the encoding
            var h264VideoConfig = await CreateH264VideoConfiguration();

            var h264VideoStream = await CreateStream(encoding, input, inputFilePath, h264VideoConfig, 0);

            // Add an AAC audio stream to the encoding
            var aacConfig = await CreateAacAudioConfiguration();

            var aacAudioStream = await CreateStream(encoding, input, inputFilePath, aacConfig, 1);

            await CreateFmp4Muxing(encoding, output, $"/video/${h264VideoConfig.Height}p", h264VideoStream);
            await CreateFmp4Muxing(encoding, output, $"/audio/${aacConfig.Bitrate! / 1000}kbs", aacAudioStream);

            var dashManifest = await CreateDefaultDashManifest(encoding, output, "/");

            var hlsManifest = await CreateDefaultHlsManifest(encoding, output, "/");

            var liveDashManifest = new LiveDashManifest()
            {
                ManifestId = dashManifest.Id
            };

            var liveHlsManifest = new LiveHlsManifest()
            {
                ManifestId = hlsManifest.Id
            };

            var startLiveEncodingRequest = new StartLiveEncodingRequest()
            {
                DashManifests = new List <LiveDashManifest>()
                {
                    liveDashManifest
                },
                HlsManifests = new List <LiveHlsManifest>()
                {
                    liveHlsManifest
                },
                StreamKey = StreamKey
            };

            await StartLiveEncodingAndWaitUntilRunning(encoding, startLiveEncodingRequest);

            var liveEncoding = await WaitForLiveEncodingDetails(encoding);

            Console.WriteLine("Live encoding is up and ready for ingest. " +
                              $"RTMP URL: rtmp://{liveEncoding.EncoderIp}/live StreamKey: {liveEncoding.StreamKey}");

            /*
             * This will enable you to shut down the live encoding from within your script.
             * In production, it is naturally recommended to stop the encoding by using the Bitmovin dashboard
             * or an independent API call - https://bitmovin.com/docs/encoding/api-reference/sections/encodings#/Encoding/PostEncodingEncodingsLiveStopByEncodingId
             */
            Console.WriteLine("Press any key to shutdown the live encoding...");
            Console.ReadKey();

            Console.WriteLine("Shutting down live encoding.");
            await _bitmovinApi.Encoding.Encodings.Live.StopAsync(encoding.Id);

            await WaitUntilEncodingIsInState(encoding, Status.FINISHED);
        }
Example #3
0
        public async Task <string> StartLiveAsync(string id, StartLiveEncodingRequest s)
        {
            var postUrl = string.Format("{0}/{1}/live/start", _url, id);

            return(await _restClient.PostAndGetIdAsync(postUrl, s));
        }
Example #4
0
        public string StartLive(string id, StartLiveEncodingRequest s)
        {
            var postUrl = string.Format("{0}/{1}/live/start", _url, id);

            return(_restClient.PostAndGetId(postUrl, s));
        }