예제 #1
0
        public override void BuildPipeline(StreamContext context)
        {
            SetupAssemblyLoader();

            // input
            bool doInputReader = context.Source.NeedsInputReaderUnit;

            if (doInputReader)
            {
                context.Pipeline.AddDataUnit(context.Source.GetInputReaderUnit(), 1);
            }

            // get parameters
            VLCParameters vlcparam = GenerateVLCParameters(context);
            int           duration = (int)Math.Round((decimal)context.MediaInfo.Duration / 1000);

            // add the unit
            VLCManagedEncoder unit;

            if (doInputReader)
            {
                unit = new VLCManagedEncoder(vlcparam.Sout, vlcparam.Arguments, context, VLCManagedEncoder.InputMethod.NamedPipe);
            }
            else
            {
                unit = new VLCManagedEncoder(vlcparam.Sout, vlcparam.Arguments, context, VLCManagedEncoder.InputMethod.File, context.Source.GetPath());
            }
            context.Pipeline.AddDataUnit(unit, 5);
        }
예제 #2
0
        public void BuildPipeline(StreamContext context, EncoderUnit.LogStream log)
        {
            // input
            bool doInputReader = context.Source.NeedsInputReaderUnit;

            if (doInputReader)
            {
                context.Pipeline.AddDataUnit(context.Source.GetInputReaderUnit(), 1);
            }

            // get parameters
            VLCParameters vlcparam = GenerateVLCParameters(context);
            string        path     = @"\#OUT#";
            string        sout     = vlcparam.Sout.Replace("#OUT#", path);

            // generate vlc argument string
            var    quotedArgList = vlcparam.Arguments.Select(x => x.Replace("\"", "\\\""));
            string vlcArguments  = "\"" + String.Join("\" \"", quotedArgList) + "\"";
            string arguments     = GenerateArguments(vlcparam.Input, sout, vlcArguments);

            // add the unit
            EncoderUnit.TransportMethod input        = doInputReader ? EncoderUnit.TransportMethod.NamedPipe : EncoderUnit.TransportMethod.Other;
            EncoderUnit.TransportMethod outputMethod = readOutputStream ? EncoderUnit.TransportMethod.NamedPipe : EncoderUnit.TransportMethod.Other;
            // waiting for output pipe is meaningless for VLC as it opens it way earlier then that it actually writes to it. Instead, log parsing
            // in VLCWrapped handles the delay (yes, this class is standalone probably useless but is provided for debugging).
            EncoderUnit unit = new EncoderUnit(context.Profile.CodecParameters["path"], arguments, input, outputMethod, log);

            unit.DebugOutput = false; // change this for debugging
            context.Pipeline.AddDataUnit(unit, 5);
        }
예제 #3
0
        protected override void AddEncoderToPipeline(bool hasInputReader)
        {
            SetupAssemblyLoader();

            // get parameters
            VLCParameters vlcparam = GenerateVLCParameters();
            int           duration = (int)Math.Round((decimal)Context.MediaInfo.Duration / 1000);

            // add the unit
            VLCManagedEncoder unit;

            if (hasInputReader)
            {
                unit = new VLCManagedEncoder(vlcparam.Sout, vlcparam.Arguments, Context, VLCManagedEncoder.InputMethod.NamedPipe);
            }
            else
            {
                unit = new VLCManagedEncoder(vlcparam.Sout, vlcparam.Arguments, Context, VLCManagedEncoder.InputMethod.File, Context.Source.GetPath());
            }
            Context.Pipeline.AddDataUnit(unit, 5);
        }