Example #1
0
        private void WriteHeader(FileStream target, DPGHeader header)
        {
            //revision (4 bytes)
            WriteText(target, header.version.ToString());
            //frames (4 bytes integer)
            target.Write(BitConverter.GetBytes(header.frames), 0, 4);
            //pad (1 byte)
            target.WriteByte(0);
            //fps (1 byte)
            target.Write(BitConverter.GetBytes(header.fps), 0, 1);
            //pad (2 byte)
            target.WriteByte(0);
            target.WriteByte(0);
            //sample rate (4 bytes integer)
            target.Write(BitConverter.GetBytes(header.samplerate), 0, 4);
            //channels (4 bytes integer)
            target.Write(BitConverter.GetBytes((int)header.audio_id), 0, 4);
            //audio start offset (4 bytes integer)
            target.Write(BitConverter.GetBytes(header.aoffset), 0, 4);
            //audio size (4 bytes integer):
            target.Write(BitConverter.GetBytes(header.asize), 0, 4);
            //video start offset (4 bytes integer)
            target.Write(BitConverter.GetBytes(header.aoffset + header.asize), 0, 4);
            //video size (4 bytes integer)
            target.Write(BitConverter.GetBytes(header.vsize), 0, 4);

            if (header.version == version_id.DPG2 ||
                header.version == version_id.DPG3)
            {
                //gop offset (4 bytes integer)
                target.Write(BitConverter.GetBytes(header.goffset), 0, 4);
                //gop size (4 bytes integer)
                target.Write(BitConverter.GetBytes(header.gsize), 0, 4);
            }
        }
Example #2
0
        public void DemuxVideo(string infile, string outfile)
        {
            DPGHeader header = ReadHeader(infile);

            using (FileStream outstream = new FileStream(outfile, FileMode.Create))
            {
                using (FileStream instream = File.OpenRead(infile))
                {
                    CopyStream(instream, outstream, header.voffset, header.vsize);
                }
            }
        }
Example #3
0
        public void MuxStreams(Massive m)
        {
            //создаём новый файл
            using (FileStream target = new FileStream(m.outfilepath, FileMode.Create))
            {
                //создаём заголовок
                DPGHeader header = new DPGHeader();
                header.version      = version_id.DPG0;
                header.aoffset      = 36;
                header.frames       = m.outframes;
                header.fps          = (int)Calculate.ConvertStringToDouble(m.outframerate);
                header.vsize        = (int)new FileInfo(m.outvideofile).Length;
                header.pixel_format = pixel_format.RGB24;
                if (m.outaudiostreams.Count > 0)
                {
                    AudioStream a = (AudioStream)m.outaudiostreams[m.outaudiostream];
                    header.samplerate = Convert.ToInt32(a.samplerate);
                    header.asize      = (int)new FileInfo(a.audiopath).Length;
                    string aext = Path.GetExtension(a.audiopath).ToLower();

                    if (aext == ".mp2")
                    {
                        header.audio_id = audio_id.MP2;
                    }
                    if (aext == ".gsm" && a.channels == 1)
                    {
                        header.audio_id = audio_id.GSM1;
                    }
                    if (aext == ".gsm" && a.channels == 2)
                    {
                        header.audio_id = audio_id.GSM2;
                    }
                    if (aext == ".ogg")
                    {
                        header.audio_id = audio_id.OGG;
                    }
                }

                //пишем заголовок
                WriteHeader(target, header);

                //вычисляем процент
                long total = header.aoffset + header.asize + header.vsize;

                //пишем звук
                if (m.outaudiostreams.Count > 0)
                {
                    AudioStream a = (AudioStream)m.outaudiostreams[m.outaudiostream];
                    using (FileStream fs = File.OpenRead(a.audiopath))
                    {
                        byte[] buffer = new byte[16384];
                        int    bytesRead;
                        while (true)
                        {
                            //читаем
                            bytesRead = fs.Read(buffer, 0, buffer.Length);

                            //прогресс
                            double progress = ((double)target.Position / (double)total) * 100.0;
                            ProgressChanged(progress);

                            //файл закончился
                            if (bytesRead == 0)
                            {
                                break;
                            }

                            //пишем в новый файл
                            target.Write(buffer, 0, bytesRead);
                            fs.Flush();
                            target.Flush();
                        }
                    }
                }

                //пишем видео
                using (FileStream fs = File.OpenRead(m.outvideofile))
                {
                    byte[] buffer = new byte[16384];
                    int    bytesRead;
                    while (true)
                    {
                        //читаем
                        bytesRead = fs.Read(buffer, 0, buffer.Length);

                        //файл закончился
                        if (bytesRead == 0)
                        {
                            break;
                        }

                        //прогресс
                        double progress = ((double)target.Position / (double)total) * 100.0;
                        ProgressChanged(progress);

                        //пишем в файл
                        target.Write(buffer, 0, bytesRead);
                        fs.Flush();
                        target.Flush();
                    }
                }
            }
        }
Example #4
0
        public DPGHeader ReadHeader(string filepath)
        {
            DPGHeader     header  = new DPGHeader();
            ASCIIEncoding encoder = new ASCIIEncoding();

            //пробуем прочитать header
            using (FileStream fs = File.OpenRead(filepath))
            {
                //revision (4 bytes)
                byte[] buffer = new byte[4];
                fs.Read(buffer, 0, buffer.Length);
                header.version = (version_id)Enum.Parse(typeof(version_id), encoder.GetString(buffer));

                //frames (4 bytes integer)
                fs.Read(buffer, 0, buffer.Length);
                header.frames = BitConverter.ToInt32(buffer, 0);

                //pad (1 byte)
                fs.ReadByte();

                //fps (1 byte)
                buffer = new byte[1];
                fs.Read(buffer, 0, buffer.Length);
                header.fps = buffer[0];

                //pad (2 byte)
                fs.ReadByte();
                fs.ReadByte();

                //sample rate (4 bytes integer)
                buffer = new byte[4];
                fs.Read(buffer, 0, buffer.Length);
                header.samplerate = BitConverter.ToInt32(buffer, 0);

                //audio_id (4 bytes integer)
                fs.Read(buffer, 0, buffer.Length);
                header.audio_id = (audio_id)Enum.Parse(typeof(audio_id), BitConverter.ToInt32(buffer, 0).ToString());

                //audio start offset (4 bytes integer)
                fs.Read(buffer, 0, buffer.Length);
                header.aoffset = BitConverter.ToInt32(buffer, 0);

                //audio size (4 bytes integer):
                fs.Read(buffer, 0, buffer.Length);
                header.asize = BitConverter.ToInt32(buffer, 0);

                //video start offset (4 bytes integer)
                fs.Read(buffer, 0, buffer.Length);
                header.voffset = BitConverter.ToInt32(buffer, 0);

                //video size (4 bytes integer)
                fs.Read(buffer, 0, buffer.Length);
                header.vsize = BitConverter.ToInt32(buffer, 0);

                if (header.version == version_id.DPG2 ||
                    header.version == version_id.DPG3)
                {
                    //gop offset
                    fs.Read(buffer, 0, buffer.Length);
                    header.goffset = BitConverter.ToInt32(buffer, 0);

                    //gop size
                    fs.Read(buffer, 0, buffer.Length);
                    header.gsize = BitConverter.ToInt32(buffer, 0);
                }

                //проверка на целостность
                if ((fs.Length - (header.aoffset + header.asize + header.vsize)) == 0)
                {
                    header.complete = true;
                }
                else
                {
                    header.complete = false;
                }
            }

            return(header);
        }
Example #5
0
        public void MuxStreams(Massive m)
        {
            //создаём новый файл
            using (FileStream target = new FileStream(m.outfilepath, FileMode.Create))
            {
                //создаём заголовок
                DPGHeader header = new DPGHeader();
                header.version = version_id.DPG0;
                header.aoffset = 36;
                header.frames = m.outframes;
                header.fps = (int)Calculate.ConvertStringToDouble(m.outframerate);
                header.vsize = (int)new FileInfo(m.outvideofile).Length;
                header.pixel_format = pixel_format.RGB24;
                if (m.outaudiostreams.Count > 0)
                {
                    AudioStream a = (AudioStream)m.outaudiostreams[m.outaudiostream];
                    header.samplerate = Convert.ToInt32(a.samplerate);
                    header.asize = (int)new FileInfo(a.audiopath).Length;
                    string aext = Path.GetExtension(a.audiopath).ToLower();

                    if (aext == ".mp2")
                        header.audio_id = audio_id.MP2;
                    if (aext == ".gsm" && a.channels == 1)
                        header.audio_id = audio_id.GSM1;
                    if (aext == ".gsm" && a.channels == 2)
                        header.audio_id = audio_id.GSM2;
                    if (aext == ".ogg")
                        header.audio_id = audio_id.OGG;
                }

                //пишем заголовок
                WriteHeader(target, header);

                //вычисляем процент
                long total = header.aoffset + header.asize + header.vsize;

                //пишем звук
                if (m.outaudiostreams.Count > 0)
                {
                    AudioStream a = (AudioStream)m.outaudiostreams[m.outaudiostream];
                    using (FileStream fs = File.OpenRead(a.audiopath))
                    {
                        byte[] buffer = new byte[16384];
                        int bytesRead;
                        while (true)
                        {
                            //читаем
                            bytesRead = fs.Read(buffer, 0, buffer.Length);

                            //прогресс
                            double progress = ((double)target.Position / (double)total) * 100.0;
                            ProgressChanged(progress);

                            //файл закончился
                            if (bytesRead == 0)
                                break;

                            //пишем в новый файл
                            target.Write(buffer, 0, bytesRead);
                            fs.Flush();
                            target.Flush();
                        }
                    }
                }

                //пишем видео
                using (FileStream fs = File.OpenRead(m.outvideofile))
                {
                    byte[] buffer = new byte[16384];
                    int bytesRead;
                    while (true)
                    {
                        //читаем
                        bytesRead = fs.Read(buffer, 0, buffer.Length);

                        //файл закончился
                        if (bytesRead == 0)
                            break;

                        //прогресс
                        double progress = ((double)target.Position / (double)total) * 100.0;
                        ProgressChanged(progress);

                        //пишем в файл
                        target.Write(buffer, 0, bytesRead);
                        fs.Flush();
                        target.Flush();
                    }
                }
            }
        }
Example #6
0
        private void WriteHeader(FileStream target, DPGHeader header)
        {
            //revision (4 bytes)
            WriteText(target, header.version.ToString());
            //frames (4 bytes integer)
            target.Write(BitConverter.GetBytes(header.frames), 0, 4);
            //pad (1 byte)
            target.WriteByte(0);
            //fps (1 byte)
            target.Write(BitConverter.GetBytes(header.fps), 0, 1);
            //pad (2 byte)
            target.WriteByte(0);
            target.WriteByte(0);
            //sample rate (4 bytes integer)
            target.Write(BitConverter.GetBytes(header.samplerate), 0, 4);
            //channels (4 bytes integer)
            target.Write(BitConverter.GetBytes((int)header.audio_id), 0, 4);
            //audio start offset (4 bytes integer)
            target.Write(BitConverter.GetBytes(header.aoffset), 0, 4);
            //audio size (4 bytes integer):
            target.Write(BitConverter.GetBytes(header.asize), 0, 4);
            //video start offset (4 bytes integer)
            target.Write(BitConverter.GetBytes(header.aoffset + header.asize), 0, 4);
            //video size (4 bytes integer)
            target.Write(BitConverter.GetBytes(header.vsize), 0, 4);

            if (header.version == version_id.DPG2 ||
                header.version == version_id.DPG3)
            {
                //gop offset (4 bytes integer)
                target.Write(BitConverter.GetBytes(header.goffset), 0, 4);
                //gop size (4 bytes integer)
                target.Write(BitConverter.GetBytes(header.gsize), 0, 4);
            }
        }
Example #7
0
        public DPGHeader ReadHeader(string filepath)
        {
            DPGHeader header = new DPGHeader();
            ASCIIEncoding encoder = new ASCIIEncoding();

            //пробуем прочитать header
            using (FileStream fs = File.OpenRead(filepath))
            {
                //revision (4 bytes)
                byte[] buffer = new byte[4];
                fs.Read(buffer, 0, buffer.Length);
                header.version = (version_id)Enum.Parse(typeof(version_id), encoder.GetString(buffer));

                //frames (4 bytes integer)
                fs.Read(buffer, 0, buffer.Length);
                header.frames = BitConverter.ToInt32(buffer, 0);

                //pad (1 byte)
                fs.ReadByte();

                //fps (1 byte)
                buffer = new byte[1];
                fs.Read(buffer, 0, buffer.Length);
                header.fps = buffer[0];

                //pad (2 byte)
                fs.ReadByte();
                fs.ReadByte();

                //sample rate (4 bytes integer)
                buffer = new byte[4];
                fs.Read(buffer, 0, buffer.Length);
                header.samplerate = BitConverter.ToInt32(buffer, 0);

                //audio_id (4 bytes integer)
                fs.Read(buffer, 0, buffer.Length);
                header.audio_id = (audio_id)Enum.Parse(typeof(audio_id), BitConverter.ToInt32(buffer, 0).ToString());

                //audio start offset (4 bytes integer)
                fs.Read(buffer, 0, buffer.Length);
                header.aoffset = BitConverter.ToInt32(buffer, 0);

                //audio size (4 bytes integer):
                fs.Read(buffer, 0, buffer.Length);
                header.asize = BitConverter.ToInt32(buffer, 0);

                //video start offset (4 bytes integer)
                fs.Read(buffer, 0, buffer.Length);
                header.voffset = BitConverter.ToInt32(buffer, 0);

                //video size (4 bytes integer)
                fs.Read(buffer, 0, buffer.Length);
                header.vsize = BitConverter.ToInt32(buffer, 0);

                if (header.version == version_id.DPG2 ||
                    header.version == version_id.DPG3)
                {
                    //gop offset
                    fs.Read(buffer, 0, buffer.Length);
                    header.goffset = BitConverter.ToInt32(buffer, 0);

                    //gop size
                    fs.Read(buffer, 0, buffer.Length);
                    header.gsize = BitConverter.ToInt32(buffer, 0);
                }

                //проверка на целостность
                if ((fs.Length - (header.aoffset + header.asize + header.vsize)) == 0)
                    header.complete = true;
                else
                    header.complete = false;
            }

            return header;
        }