Ejemplo n.º 1
0
        private void MapVideoDescription(VideoDescriptionElement videoDescription, TranscodeItem transcodeItem)
        {
            transcodeItem.CustomValues.Upsert(TranscodeCustomValueKeys.FirstFrameTimecodeKey, videoDescription.FirstFrameTimecode);

            if (videoDescription?.Sequence?.Header?.Any() ?? false)
            {
                ProcessSequenceElements(videoDescription.Sequence.Header, transcodeItem, GetHeaderSequenceKeys());
            }
            if (videoDescription?.Sequence?.Tail?.Any() ?? false)
            {
                ProcessSequenceElements(videoDescription.Sequence.Tail, transcodeItem, GetTailSequenceKeys());
            }
        }
Ejemplo n.º 2
0
        public void TestSerializationCode()
        {
            var transcodeBody = new TranscodeBody();


            var transcodeItem = new TranscodeItem
            {
                FileSize   = 144708692,
                Tasks      = GetTranscodeTasks(),
                CheckSum   = "F3653151503CE8F66DBE86E5B8592615F6429EC6343269861E891034AFB4DD45",
                FormatId   = 2211,
                Priority   = 0,
                SourceKey  = "1523924/8201913_20190801_792254.mxf",
                FrameCount = 660,
                SourceFile =
                    "222240064172237095153242202004224178205203037167214040044150229229136024117252237248135044047088035003190228006055134057179049183047132253058139108128020045126044125233192137207135202083081065174030239237117018098068194149190008163011025118252240229244160068052125231153135097140123186175214140000144141078080045212158041043166198172141025215040009231066182239248122001092250135066227246089092054119081053024215252041075167206120187011211147033121072211090173109022159136210178167",
                TargetFile =
                    "8201913-XDC60StrictLG15_29.97fps_8-10bit-v1_24bit_AES_MXF_(GLOBO)-24ec2c15-47f5-46fe-b339-feafe80b8021.mxf",
                CustomValues = GetTranscodeCustomValues(),
                SourceBucket = "ebus-media-sa",
                SourceRegion = "sa-east-1",
                TargetFolder = "1523924"
            };

            transcodeBody.Items = new List <TranscodeItem>()
            {
                transcodeItem
            };
            transcodeBody.Endpoint                  = "https://api.imdcloud.net/mediaservices/message";
            transcodeBody.Priority                  = 6;
            transcodeBody.TargetBucket              = "ebus-media-sa";
            transcodeBody.CorrelationId             = "f219d386-ee82-40a5-a9f1-76b0c2ec6516";
            transcodeBody.CallbackEndpoint          = "http://mediaservicecallback.imdcloud.net/";
            transcodeBody.TargetStorageProviderUser =
                "******";
            transcodeBody.TargetStorageProviderPassword =
                "******";
            transcodeBody.TargetStorageProvider = "Amazon";
            transcodeBody.CustomValues          = GetTranscodeCustomValues();


            var options = new JsonSerializerOptions();

            options.WriteIndented = true;

            var jsonData = JsonSerializer.Serialize(transcodeBody, options);

            Console.WriteLine(jsonData);
            Assert.IsTrue(jsonData.Length > 0);
        }
Ejemplo n.º 3
0
        public void TranscodeStatusTest()
        {
            var musicFile = new MockMusicFile(new MusicMetadata(TimeSpan.FromSeconds(33), 320), "TestFile.wma");
            var item      = new TranscodeItem(musicFile, "TestFile.mp3");

            Assert.AreEqual(TranscodeStatus.Pending, item.TranscodeStatus);

            AssertHelper.PropertyChangedEvent(item, x => x.TranscodeStatus, () => item.Progress = 0.01);
            Assert.AreEqual(TranscodeStatus.InProgress, item.TranscodeStatus);

            AssertHelper.PropertyChangedEvent(item, x => x.TranscodeStatus, () => item.Progress = 1);
            Assert.AreEqual(TranscodeStatus.Completed, item.TranscodeStatus);

            AssertHelper.PropertyChangedEvent(item, x => x.TranscodeStatus, () => item.Error = new InvalidOperationException());
            Assert.AreEqual(TranscodeStatus.Error, item.TranscodeStatus);
        }
Ejemplo n.º 4
0
        public void PropertiesTest()
        {
            var musicFile = new MockMusicFile(new MusicMetadata(TimeSpan.FromSeconds(33), 320), "TestFile.wma");
            var item      = new TranscodeItem(musicFile, "TestFile.mp3");

            Assert.AreEqual(musicFile, item.Source);
            Assert.AreEqual("TestFile.mp3", item.DestinationFileName);

            Assert.AreEqual(0, item.Progress);
            AssertHelper.PropertyChangedEvent(item, x => x.Progress, () => item.Progress = 0.5);
            Assert.AreEqual(0.5, item.Progress);

            Assert.IsNull(item.Error);
            var exception = new InvalidOperationException("Test");

            AssertHelper.PropertyChangedEvent(item, x => x.Error, () => item.Error = exception);
            Assert.AreEqual(exception, item.Error);
        }
Ejemplo n.º 5
0
        private void MapOutputElement(OutputElement outputElement, ActiveMessage activeMessage)
        {
            // outputElement.FileUrl // targerurl

            var targetUrl     = outputElement.Url;
            var transcodeItem = new TranscodeItem();

            transcodeItem.TargetFileUri = outputElement.Url.ToString();
            transcodeItem.TargetFile    = targetUrl.Segments.Last();
            transcodeItem.TargetFolder  = targetUrl.LocalPath.Replace(targetUrl.Segments.Last(), string.Empty);
            // target bucket
            transcodeItem.PresetName = outputElement.Preset;

            // var targetBucket = s3Url.Host;
            //outputElement.VideoDescription

            //outputElement.AudioDescription
        }
Ejemplo n.º 6
0
        public void AddRemoveTranscodeItemsTest()
        {
            var musicFile1 = new MockMusicFile(new MusicMetadata(TimeSpan.FromSeconds(33), 320), "TestFile1.wma");
            var musicFile2 = new MockMusicFile(new MusicMetadata(TimeSpan.FromSeconds(33), 320), "TestFile2.wma");
            var item1      = new TranscodeItem(musicFile1, "TestFile1.mp3");
            var item2      = new TranscodeItem(musicFile1, "TestFile2.mp3");

            var manager = new TranscodingManager();

            Assert.IsFalse(manager.TranscodeItems.Any());

            manager.AddTranscodeItem(item1);
            manager.AddTranscodeItem(item2);

            Assert.IsTrue(new[] { item1, item2 }.SequenceEqual(manager.TranscodeItems));

            manager.RemoveTranscodeItem(item1);

            Assert.AreEqual(item2, manager.TranscodeItems.Single());
        }
Ejemplo n.º 7
0
        private async void TranscodeAsync(MusicFile musicFile)
        {
            var destinationFileName = GetDestinationFileName(musicFile.FileName);
            var transcodeItem       = new TranscodeItem(musicFile, destinationFileName);

            transcodingManager.AddTranscodeItem(transcodeItem);
            Logger.Verbose("Start Transcode: {0} > {1}", musicFile.FileName, destinationFileName);

            var cts = new CancellationTokenSource();

            cancellationTokenSources.Add(transcodeItem, cts);
            UpdateCancelCommands();
            var metadata = await musicFile.GetMetadataAsync();

            uint bitrate = GetConvertBitrate(metadata.Bitrate);

            try
            {
                await TranscodeAsyncCore(transcodeItem, bitrate, cts.Token);
            }
            catch (OperationCanceledException)
            {
                transcodingManager.RemoveTranscodeItem(transcodeItem);
            }
            catch (Exception ex)
            {
                Logger.Error("TranscodeAsync exception: {0}", ex);
                transcodeItem.Error = ex;
            }
            finally
            {
                cancellationTokenSources.Remove(transcodeItem);
                if (allTranscodingsCanceledCompletion != null && !cancellationTokenSources.Any())
                {
                    allTranscodingsCanceledCompletion.SetResult(null);
                }
                UpdateCancelCommands();
                Logger.Verbose("End Transcode: {0} > {1}", musicFile.FileName, destinationFileName);
            }
        }
Ejemplo n.º 8
0
        private async Task TranscodeAsyncCore(TranscodeItem transcodeItem, uint bitrate, CancellationToken token)
        {
            await throttler.WaitAsync(token);  // Throttle the transcoding

            try
            {
                var task = transcoder.Value.TranscodeAsync(transcodeItem.Source.FileName, transcodeItem.DestinationFileName, bitrate,
                                                           token, new Progress <double>(x => transcodeItem.Progress = x / 100d));
                transcodingService.RaiseTranscodingTaskCreated(transcodeItem.DestinationFileName, task);
                await task;

                var destinationMusicFile = musicFileContext.Create(transcodeItem.DestinationFileName);
                var sourceMetadata       = await transcodeItem.Source.GetMetadataAsync();

                var destinationMetadata = await destinationMusicFile.GetMetadataAsync();

                destinationMetadata.ApplyValuesFrom(sourceMetadata);
                await musicFileContext.SaveChangesAsync(destinationMusicFile);
            }
            finally
            {
                throttler.Release();
            }
        }
Ejemplo n.º 9
0
 private void ProcessSequenceElements(IList <VideoSequenceElement> videoSequencesElements, TranscodeItem transcodeItem, IDictionary <SequenceType, Stack <ValueTuple <string, string> > > sequenceKeys)
 {
     foreach (var videoSequencesElement in videoSequencesElements)
     {
         if (!sequenceKeys[videoSequencesElement.SequenceType].TryPop(out var keys))
         {
             continue;
         }
         //  a pity that slate is only duration
         if (videoSequencesElement.SequenceType == SequenceType.Colour)
         {
             transcodeItem.CustomValues.Upsert(keys.Item1, videoSequencesElement.Colour);
             transcodeItem.CustomValues.Upsert(keys.Item2, videoSequencesElement.Duration.ToString());
         }
         else
         {
             transcodeItem.CustomValues.Upsert(keys.Item2, videoSequencesElement.Duration.ToString());
         }
     }
 }
Ejemplo n.º 10
0
 private void MapAudioDescription(AudioDescriptionElement audioDescription, TranscodeItem transcodeItem)
 {
 }