static void Main(string[] args)
        {
            // You can find your API key under Project settings in your Dashboard on Qencode portal
            var apiKey = "your_api_key";

            // This loads API query from file.
            // Make sure you change source video url and destination params to some actual values.
            var transcodingParams = CustomTranscodingParams.FromFile("query.json");

            try
            {
                var q = new QencodeApiClient(apiKey);
                Console.WriteLine("Access token: " + q.AccessToken);

                var task = q.CreateTask();
                Console.WriteLine("Created new task: " + task.TaskToken);
                task.TaskCompleted = new RunWorkerCompletedEventHandler(
                    delegate(object o, RunWorkerCompletedEventArgs e)
                {
                    if (e.Error != null)
                    {
                        Console.WriteLine("Error: ", e.Error.Message);
                    }

                    var response = e.Result as TranscodingTaskStatus;
                    if (response.error == 1)
                    {
                        Console.WriteLine("Error: " + response.error_description);
                    }
                    else if (response.status == "completed")
                    {
                        Console.WriteLine("Video urls: ");
                        foreach (var video in response.videos)
                        {
                            Console.WriteLine(video.url);
                        }
                    }
                    else
                    {
                        Console.WriteLine(response.status);
                    }
                    Console.WriteLine("Done!");
                });

                var started = task.StartCustom(transcodingParams);
                Console.WriteLine("Status URL: " + started.status_url);
            }
            catch (QencodeApiException e)
            {
                Console.WriteLine("Qencode API exception: " + e.Message);
            }
            catch (QencodeException e)
            {
                Console.WriteLine("API call failed: " + e.Message);
            }
            Console.ReadKey();
        }
        static async Task Main(string[] args)
        {
            var apiKey = "your_api_key";
            var file   = new FileInfo(@"your_file_path");



            try
            {
                var             q = new QencodeApiClient(apiKey);
                TranscodingTask transcodingTask = q.CreateTask();
                Console.WriteLine("Access token: " + q.AccessToken);
                Console.WriteLine("Created new task: " + transcodingTask.TaskToken);
                var uploadUrl = $"{transcodingTask.UploadUrl}/{transcodingTask.TaskToken}";
                var res       = await TusTools.UploadAsync(file, uploadUrl, 1000);

                var fileUrl = res.url;

                var transcodingParams = new CustomTranscodingParams();

                transcodingParams.source = fileUrl;
                var format = new Format();
                format.output = "mp4";
                transcodingParams.format.Add(format);
                var startedTask = transcodingTask.StartCustom(transcodingParams);
                Console.WriteLine("Status URL: " + startedTask.status_url);
                TranscodingTaskStatus response;
                do
                {
                    Thread.Sleep(5000);
                    Console.Write("Checking status... ");
                    response = transcodingTask.GetStatus();
                    Console.WriteLine(String.Format("{0} - {1}%", response.status,
                                                    response.percent == null ? "0" : ((float)response.percent).ToString("0.00")));
                } while (response.status != "completed");
                if (response.videos.Count > 0)
                {
                    var video = response.videos[0];
                    Console.WriteLine("Playlist url: " + video.url);
                }
                if (response.error > 0)
                {
                    Console.WriteLine(response.error_description);
                }
                Console.WriteLine("Done!");
                var statusUrl = startedTask.status_url;
            }
            catch (QencodeApiException e)
            {
                Console.WriteLine("Qencode API exception: " + e.Message);
            }
            catch (QencodeException e)
            {
                Console.WriteLine("API call failed: " + e.Message);
            }
            Console.ReadKey();
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Reading regression tests...");
            var jdp   = new JsonDiffPatch();
            var tests = Directory.GetDirectories(regressionTestsPath);

            foreach (var test in tests)
            {
                if (!File.Exists(test + "/query.json"))
                {
                    Console.WriteLine("Skipped: " + test);
                    continue;
                }
                Console.WriteLine(test);
                var originalJson      = File.ReadAllText(test + "/query.json");
                var transcodingParams = CustomTranscodingParams.FromJSON(originalJson);
                var serialized        = JsonConvert.SerializeObject(transcodingParams,
                                                                    Formatting.None,
                                                                    new JsonSerializerSettings {
                    NullValueHandling = NullValueHandling.Ignore
                });
                var left  = JToken.Parse(originalJson);
                var right = JToken.Parse("{ \"query\": " + serialized + " }");
                var patch = jdp.Diff(left, right);
                if (patch != null)
                {
                    Console.WriteLine("FAILED!");
                    Console.WriteLine(patch);
                }
                else
                {
                    Console.WriteLine("SUCCESS!");
                }
            }
            Console.ReadKey();
        }
        static void Main(string[] args)
        {
            var apiKey    = "your_api_key";
            var videoUrl  = "https://nyc3.s3.qencode.com/qencode/bbb_30s.mp4";
            var s3_path   = "s3://s3-eu-west-2.amazonaws.com/qencode-test";
            var s3_key    = "your_s3_key";
            var s3_secret = "your_s3_secret";

            var transcodingParams = new CustomTranscodingParams();

            transcodingParams.source = videoUrl;
            var format = new Format();

            //format.destination = new Destination();
            //format.destination.url = s3_path;
            //format.destination.key = s3_key;
            //format.destination.secret = s3_secret;
            format.output           = "advanced_hls";
            format.segment_duration = 6;
            format.start_time       = 0.2;
            format.duration         = 0.3;

            var stream = new Stream();

            stream.size          = "1920x1080";
            stream.audio_bitrate = 128;

            var vcodec_params = new Libx264_VideoCodecParameters();

            vcodec_params.vprofile        = "baseline";
            vcodec_params.level           = 31;
            vcodec_params.coder           = 0;
            vcodec_params.flags2          = "-bpyramid+fastpskip-dct8x8";
            vcodec_params.partitions      = "+parti8x8+parti4x4+partp8x8+partb8x8";
            vcodec_params.directpred      = 2;
            stream.video_codec_parameters = vcodec_params;

            format.stream = new List <Stream>();
            format.stream.Add(stream);

            transcodingParams.format.Add(format);

            try
            {
                var q = new QencodeApiClient(apiKey);
                Console.WriteLine("Access token: " + q.AccessToken);

                var task = q.CreateTask();
                Console.WriteLine("Created new task: " + task.TaskToken);
                TranscodingTaskStatus response;
                var started = task.StartCustom(transcodingParams);
                Console.WriteLine("Status URL: " + started.status_url);
                do
                {
                    Thread.Sleep(5000);
                    Console.Write("Checking status... ");
                    response = task.GetStatus();
                    Console.WriteLine(String.Format("{0} - {1}%", response.status,
                                                    response.percent == null ? "0" : ((float)response.percent).ToString("0.00")));
                } while (response.status != "completed");
                if (response.videos.Count > 0)
                {
                    var video = response.videos[0];
                    Console.WriteLine("Playlist url: " + video.url);
                }
                if (response.error > 0)
                {
                    Console.WriteLine(response.error_description);
                }
                Console.WriteLine("Done!");
            }
            catch (QencodeApiException e)
            {
                Console.WriteLine("Qencode API exception: " + e.Message);
            }
            catch (QencodeException e)
            {
                Console.WriteLine("API call failed: " + e.Message);
            }
            Console.ReadKey();
        }
示例#5
0
        /*
         * This example upload a local file,
         * transcode it and then,
         * download the transcoded file
         */

        static void Main(string[] args)
        {
            // You can find your API key under Project settings in your Dashboard on Qencode portal
            const string apiKey = "YOUR_API_KEY_HERE";
            const string relative_output_dir = "TranscodedOutput";             // relative output dir

            // This is the full file name of the source video
            string sourceVideoFullFileName = "E:\\dev\\My\\Sample720.flv";

            // if an argument is specified, the source video file will be readed from the first argument
            if (args.Length >= 1 && !string.IsNullOrEmpty(args[0]))
            {
                sourceVideoFullFileName = args[0];
            }

            try
            {
                // get access token
                Console.WriteLine("Requesting access token...");
                var q = new QencodeApiClient(apiKey);
                Console.WriteLine("\taccess token: '" + q.AccessToken + "'");

                // create a new task
                Console.WriteLine("Creating a new task...");
                var task = q.CreateTask();
                Console.WriteLine("\tcreated new task with token: '" + task.TaskToken + "' and url for direct video upload (TUS) '" + task.UploadUrl + "'");

                // direct video upload - initiate upload (get endpoint for task)
                Console.WriteLine("Initiate upload...");
                var srcFI  = new FileInfo(sourceVideoFullFileName);
                var client = new TusClient();
                var tusUploadLocationUrl = client.CreateAsync(task.UploadUrl + "/" + task.TaskToken, srcFI.Length).Result;
                Console.WriteLine("\tobtained TUS upload location: '" + tusUploadLocationUrl + "'");

                // direct video upload - send data
                var uploadOperation = client.UploadAsync(tusUploadLocationUrl, srcFI);
                Console.WriteLine("\ttransfer started");
                uploadOperation.Progressed += (transferred, total) =>
                {
                    Console.CursorLeft = 0;
                    Console.Write($"Progress: {transferred}/{total}");
                };
                Console.WriteLine();
                Console.WriteLine();
                uploadOperation.GetAwaiter().GetResult();
                Console.WriteLine("\tupload done");

                // define a custom task by reading query.json and filling the ##TUS_FILE_UUID## placeholder
                var tusFileUUID             = tusUploadLocationUrl.Substring(tusUploadLocationUrl.LastIndexOf('/') + 1);
                var customTrascodingJSON    = File.ReadAllText("query.json").Replace("##TUS_FILE_UUID##", tusFileUUID);
                var customTranscodingParams = CustomTranscodingParams.FromJSON(customTrascodingJSON);

                // start a custom task
                Console.WriteLine("Custom task starting..");
                Console.WriteLine(customTrascodingJSON);

                // start a custom task - set event handler
                bool taskCompletedOrError = false;
                task.TaskCompleted = new RunWorkerCompletedEventHandler(
                    delegate(object o, RunWorkerCompletedEventArgs e)
                {
                    if (e.Error != null)
                    {
                        taskCompletedOrError = true;
                        Console.WriteLine("Error: ", e.Error.Message);
                    }

                    var response = e.Result as TranscodingTaskStatus;
                    if (response.error == 1)
                    {
                        taskCompletedOrError = true;
                        Console.WriteLine("Error: " + response.error_description);
                    }
                    else if (response.status == "completed")
                    {
                        taskCompletedOrError = true;
                        Console.WriteLine("Video urls: ");
                        foreach (var video in response.videos)
                        {
                            Console.WriteLine(video.url);
                        }
                    }
                    else
                    {
                        Console.WriteLine(response.status);
                    }
                });
                // start a custom task - start
                Console.WriteLine("\tstarting...");
                var started = task.StartCustom(customTranscodingParams);                 // starts and poll

                // waiting
                Console.WriteLine("Waiting..");
                while (!taskCompletedOrError)
                {
                    Thread.Sleep(1000);
                }

                // get download url
                if (task.LastStatus == null)
                {
                    throw new InvalidOperationException("Unable to obtain download url");
                }
                var outputDownloadUrl = new Uri(task.LastStatus.videos.First().url);
                Console.WriteLine("Output download url: '" + outputDownloadUrl.ToString() + "'");
                string output_file_name = GetOutputFileName(sourceVideoFullFileName, outputDownloadUrl.Segments.Last());
                Console.WriteLine("Output file name: '" + output_file_name + "'");


                // download
                Console.WriteLine("Downloading..");
                HttpFileDownload(outputDownloadUrl, relative_output_dir, output_file_name);
                Console.WriteLine("\tdownload done");
                Environment.Exit(0);
            }
            catch (QencodeApiException e)
            {
                Console.WriteLine("Qencode API exception: " + e.Message);
                Environment.Exit(-1);
            }
            catch (QencodeException e)
            {
                Console.WriteLine("API call failed: " + e.Message);
                Environment.Exit(-1);
            }
        }