예제 #1
0
        public static FFprobeSerializerResult Serialize(ICommandProcessor processor)
        {
            if (processor.Status == CommandProcessorStatus.Faulted)
            {
                return(null);
            }

            var standardOutputString = processor.StdOut;
            var serializerResult     = FFprobeSerializerResult.Create();

            var serializers = new List <IFFprobeSerializer>
            {
                new FFprobeStreamSerializer(),
                new FFprobeFormatSerializer()
            };

            serializers.ForEach(serializer =>
            {
                var serializerStartIndex = 0;

                while (serializerStartIndex > -1)
                {
                    var searchingStartTag = string.Format("[{0}]", serializer.Tag);
                    var searchingEndTag   = string.Format("[/{0}]", serializer.Tag);

                    var startTagIndex = standardOutputString.IndexOf(searchingStartTag, serializerStartIndex, StringComparison.OrdinalIgnoreCase);
                    if (startTagIndex == -1)
                    {
                        break;
                    }

                    var endTagIndex = standardOutputString.IndexOf(searchingEndTag, startTagIndex + 1, StringComparison.OrdinalIgnoreCase);
                    if (endTagIndex == -1)
                    {
                        break;
                    }

                    var startAt  = startTagIndex + searchingStartTag.Length;
                    var lengthOf = endTagIndex - startAt;
                    var unserializedValueString = standardOutputString.Substring(startAt, lengthOf);

                    var rawSerializedValues = FFprobeGeneralSerializer.Serialize(unserializedValueString);

                    var serializedValues = serializer.Serialize(rawSerializedValues);

                    if (serializedValues != null)
                    {
                        var serializerResultItem = FFprobeSerializerResultItem.Create(serializer.Tag, serializedValues);

                        serializerResult.Results.Add(serializerResultItem);
                    }

                    serializerStartIndex = endTagIndex;
                }
            });

            return(serializerResult);
        }
예제 #2
0
        public List <FFprobeKeyValuePair> Serialize(List <FFprobeKeyValuePair> rawSerializedValues)
        {
            var returnValues = new List <FFprobeKeyValuePair>();

            //serialize the values that we want to capture
            var encodeApplication = FFprobeGeneralSerializer.SerializeAsFFprobeString(rawSerializedValues, "TAG:encoder");

            if (encodeApplication != null)
            {
                returnValues.Add(encodeApplication);
            }

            return(returnValues);
        }
예제 #3
0
        public List <FFprobeKeyValuePair> Serialize(List <FFprobeKeyValuePair> rawSerializedValues)
        {
            var returnValues = new List <FFprobeKeyValuePair>();

            //serialize the values that we want to capture
            var codecType = FFprobeGeneralSerializer.SerializeAsFFprobeString(rawSerializedValues, "codec_type");

            if (codecType != null)
            {
                returnValues.Add(codecType);
            }

            var timebase = FFprobeGeneralSerializer.SerializeAsFFprobeFraction(rawSerializedValues, "time_base");

            if (timebase != null)
            {
                returnValues.Add(timebase);
            }

            var frameRate = FFprobeGeneralSerializer.SerializeAsFFprobeFraction(rawSerializedValues, "r_frame_rate");

            if (frameRate != null)
            {
                returnValues.Add(frameRate);
            }

            var avgFrameRate = FFprobeGeneralSerializer.SerializeAsFFprobeFraction(rawSerializedValues, "avg_frame_rate");

            if (avgFrameRate != null)
            {
                returnValues.Add(avgFrameRate);
            }

            var duration = FFprobeGeneralSerializer.SerializeAsFFprobeDouble(rawSerializedValues, "duration");

            if (duration != null)
            {
                returnValues.Add(duration);
            }

            var bitrate = FFprobeGeneralSerializer.SerializeAsFFprobeLong(rawSerializedValues, "bit_rate");

            if (bitrate != null)
            {
                returnValues.Add(bitrate);
            }

            var width = FFprobeGeneralSerializer.SerializeAsFFprobeInt(rawSerializedValues, "width");

            if (width != null)
            {
                returnValues.Add(width);
            }

            var height = FFprobeGeneralSerializer.SerializeAsFFprobeInt(rawSerializedValues, "height");

            if (height != null)
            {
                returnValues.Add(height);
            }

            return(returnValues);
        }