Пример #1
0
 public PpboxSource(
     String url)
 {
     this.demuxer_ = new Demuxer();
     this.url_ = url;
     this.pending_ = false;
     this.mediaStreamTypes_ = new List<MediaStreamType>();
     this.mediaStreamDescriptions_ = new Dictionary<MediaStreamType, MediaStreamDescription>();
     this.mediaStreamSamples_ = new Dictionary<MediaStreamType, List<MediaStreamSample>>();
 }
Пример #2
0
        public void Demux()
        {
            var knownTypes = new[] { 1, 2 };
            var dm = new Demuxer<int, Event<long>>(knownTypes, "@event => @event.Type");
            foreach (var stream in dm.Streams)
                stream.Should().NotBeNull();
            var testInterval = new TestInterval(100, 5);
            testInterval.Interval.Subscribe(dm);

            var expected = new[] {20L, 20L};
            var results = new long[2];

            for (int index = 0; index < knownTypes.Length; index++)
            {
                var x = index;
                dm.Streams[knownTypes[index]].Count().Subscribe(i => results[x] = i);
            }

            testInterval.Start();
            results.ShouldAllBeEquivalentTo(expected);
        }
Пример #3
0
        private void Open_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();

            //ofd.Filter = ""
            if (ofd.ShowDialog() == true)
            {
                m_demuxer = new Demuxer(File.Open(ofd.FileName, FileMode.Open, FileAccess.Read));

                var width  = m_demuxer.Video.Width;
                var height = m_demuxer.Video.Height;
                var format = PixelFormats.Rgb24;
                var buffer = m_demuxer.GetBufferRGB();

                m_bitmap = new WriteableBitmap((int)width, (int)height, 96d, 96d,
                                               format, null);

                Int32Rect rec = new Int32Rect(0, 0, (int)width, (int)height);

                m_bitmap.WritePixels(rec, buffer, m_bitmap.BackBufferStride, 0);
                ui_image.Source = m_bitmap;
            }
        }
Пример #4
0
            public Demuxer Clone()
            {
                Demuxer demuxer = (Demuxer)MemberwiseClone();

                demuxer.AudioFormatOpt = new SerializableDictionary <string, string>();
                foreach (var kv in AudioFormatOpt)
                {
                    demuxer.AudioFormatOpt.Add(kv.Key, kv.Value);
                }

                demuxer.VideoFormatOpt = new SerializableDictionary <string, string>();
                foreach (var kv in VideoFormatOpt)
                {
                    demuxer.VideoFormatOpt.Add(kv.Key, kv.Value);
                }

                demuxer.SubsFormatOpt = new SerializableDictionary <string, string>();
                foreach (var kv in SubsFormatOpt)
                {
                    demuxer.SubsFormatOpt.Add(kv.Key, kv.Value);
                }

                return(demuxer);
            }
Пример #5
0
        public static void Main(string[] args)
        {
            try
            {
                var demuxer = new Demuxer();
                demuxer.Open("C:\\Temp\\Gus.mp3");

                Console.WriteLine("Demuxer opened");

                var audioParameters = demuxer.GetAudioDecoder().GetAudioParameters()
                                      .SetMediaType(MediaType.Audio)
                                      .SetCodecType(CodecType.PCM_Signed16BitLittleEndian)
                                      .SetSampleRate(44100)
                                      .SetBitRate(16 * 44100 * 2)
                                      .SetAudioChannelLayout(0x00000003)
                                      .SetChannelCount(2)
                                      .SetSampleFormat(SampleFormat.Signed16Bit)
                                      .SetTimeBase(new RationalNumber(1, 44100));

                var muxer = new Muxer();
                muxer.Open("C:\\Temp\\Gus.wav", audioParameters, null);

                Console.WriteLine("Muxer opened");

                var resampler = new Resampler();
                resampler.Initialise(demuxer.GetAudioDecoder().GetCodec(), muxer.GetAudioEncoder().GetCodec());

                var frames = 0;

                demuxer.FrameDecodedEvent += (frameWrapper) =>
                {
                    switch (frameWrapper.GetMediaType())
                    {
                    case MediaType.Audio:
                        var resampledFrame = resampler.Convert(frameWrapper);
                        muxer.AddToBuffer(resampledFrame);

                        if (resampler.Flush(resampledFrame) > 0)
                        {
                            muxer.AddToBuffer(resampledFrame);
                        }

                        frames++;

                        Console.WriteLine($"\r{frames} frames decoded");
                        break;

                    case MediaType.Video:
                        // TODO
                        break;

                    default:
                        break;
                    }
                };

                demuxer.DecodePackets(MediaType.Audio);

                Console.WriteLine($"\r{frames} audio frames decoded - muxing...");

                muxer.WriteBuffer();

                Console.WriteLine("Mux complete - cleaning up...");

                muxer.Close();
                demuxer.Close();

                Console.WriteLine("Finished");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Exception: {ex}");
            }

            Console.WriteLine("Enter a character to go away...");
            Console.ReadKey();
        }