MediaSuite.NET Sample code

Using AVIWriter

This sample demonstrates using the AVIWriter with MPEG-4 and MP3 codecs.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using StreamCoders;
using StreamCoders.Encoder;
using StreamCoders.Writer;
using StreamCoders.Wave;
using StreamCoders.Devices;
using System.Drawing.Imaging;
using System.Drawing;
using StreamCoders.Tools;
 
 
namespace AVIWriterTest
{
    class Program
    {
        static void Main(string[] args)
        {
 
            double framerate = 10.0;
            CamCapture cam = new CamCapture();
            System.Collections.Generic.List<string> devices = cam.GetDeviceList();
            cam.DeviceName = devices[0];
            cam.Start();
 
            int width = cam.Metrics.Width;
            int height = cam.Metrics.Height;
 
 
            MPEG4Encoder venc = new MPEG4Encoder();
            venc.SetInputResolution((uint)width, (uint)height);
            venc.Framerate = framerate;
            venc.IFrameFrequency = 10;
            venc.Init();
 
            int audioChannels = 1;
            int audioSampleFreq = 44100;
            int audioBitrate = 128000;
            int audioBitsPerSample = 16;
 
            MP3Encoder aenc = new MP3Encoder();
            aenc.InputBitsPerSample = audioBitsPerSample;
            aenc.BitrateMode = BitrateModes.CONSTANT_BITRATE;
            aenc.OutputBitrate = audioBitrate;
            aenc.InputChannels = audioChannels;
            aenc.InputSampleFrequency = audioSampleFreq;
            aenc.AdvancedNoiseShaping = false;
            aenc.LowPassFilter = false;
            aenc.MPEG1Upsample = true;
            aenc.StereoMode = StereoModes.MONO;
            aenc.Init();
 
            WaveInput win = new WaveInput();
            win.BitsPerSample = audioBitsPerSample;
            win.Channels = audioChannels;
            win.SampleRate = audioSampleFreq;
 
            win.OpenDevice();
            win.Start();
 
 
            AVIWriter writer = new AVIWriter();
            writer.Filename = "c:\\avfile.avi";
            string fname = writer.Filename;
            writer.Init();
 
            TrackInfo vtrack = new TrackInfo();
            vtrack.TrackCategory = TrackCategories.VIDEO;
            vtrack.TrackType = TrackTypes.MPEG4V;
            vtrack.Video = new VideoTrack();
            vtrack.Video.Framerate = framerate;
            vtrack.Video.Width = width;
            vtrack.Video.Height = height;
 
            vtrack = writer.AddTrack(vtrack);
 
            TrackInfo atrack = new TrackInfo();
            atrack.TrackCategory = TrackCategories.AUDIO;
            atrack.TrackType = TrackTypes.MP3;
            atrack.Audio = new AudioTrack();
            atrack.Audio.Bitrate = audioBitrate;
            atrack.Audio.BitsPerSample = audioBitsPerSample;
            atrack.Audio.SampleFrequency = audioSampleFreq;
            atrack.Audio.BitsPerSample = audioBitsPerSample;
            atrack.Audio.Channels = audioChannels;
 
            atrack = writer.AddTrack(atrack);
 
            win.ClearBuffers();
 
            int startTicker = System.Environment.TickCount;
            double frameduration = 1000.0 / framerate;
            int absoluteTicker = System.Environment.TickCount;
            int videoEncoded = 0;
            while (Console.KeyAvailable == false)
            {
                int delta = System.Environment.TickCount - startTicker;
                if (delta > frameduration)
                {
                    Console.WriteLine("Preparing Video Frame");
                    int deltaErrordelta - (int)frameduration;
                    startTicker = System.Environment.TickCount - deltaError;
                    int absDelta = System.Environment.TickCount - absoluteTicker;
                    byte[] pic = cam.GetFrame();
                    if (pic != null)
                    {
                        byte[] cpic = venc.EncodeToArray(Visuals.Array24Rotate(vtrack.Video.Width, vtrack.Video.Height, pic, RotateFlipType.Rotate180FlipX));
                        MediaPackage mp = new MediaPackage();
                        mp.Buffer = cpic;
                        bool writeres = writer.WriteTrack(vtrack, mp, venc.LastEncodedFrameType == FrameTypes.I_FRAME? true:false);
                        if (writeres == false)
                            Console.WriteLine("Unable to write to track");
                        videoEncoded++;
                    }
                }
                if (win.SamplesAvailable)
                {
                    Console.WriteLine("Preparing Audio Frame");
                    byte[] samples = win.GetAllData();
                    while (true)
                    {
                        byte[] csamples = aenc.Encode(samples);
                        samples = null;
                        if (csamples != null)
                        {
                            MediaPackage mp = new MediaPackage();
                            mp.Buffer = csamples;
                            bool writeres = writer.WriteTrack(atrack, mp, false);
                            if (writeres == false)
                                Console.WriteLine("Unable to write to track");
 
                        }
                        else
                            break;
                    }
                }
 
            }
 
            writer.EndTrack(vtrack);
            writer.EndTrack(atrack);
            writer.Dispose();
        }
    }
}