Меню
© Международный образовательный портал современных компетенций Cвидетельство о регистрации СМИ ЭЛ № ФС 77 - 55893 от 07.11.2013 г. Международные и Всероссийские олимпиады, конкурсы и викторины

Исследовательская работа ИЗВЛЕЧЕНИЕ АУДИОДОРОЖЕК ИЗ ВИДЕО ФАЙЛА ФОРМАТА MPEG2-TS
  • Категория:
  • Автор:
    Старшинова Ольга Николаевна
  • Рейтинг:
    1.0/7
Государственное бюджетное образовательное учреждение
cреднего профессионального образования
Нижегородский экономико-правовой колледж
имени Героя Советского Союза Бориса Павловича Трифонова

ИЗВЛЕЧЕНИЕ АУДИОДОРОЖЕК
ИЗ ВИДЕО ФАЙЛА ФОРМАТА MPEG2-TS

Выполнил: студент IVкурса группы 41П, А.П.Половинкин
Руководитель: О.Н.Старшинова

Нижний Новгород
2013 год

СОДЕРЖАНИЕ
Введение 3
ГЛАВА 1. Теоретические аспекты применения mpeg в повседневной жизни 6
1.1 Понятие Mpeg. и его стандарты сжатия. 6
1.2 Транспортный поток. MPEG2-TS 7
1.3 Важные элементы транспортного потока 8
ГЛАВА 2. Разработка программы 10
2.1 Выбор системы программирования 10
2.2 Технология разработки программы 14
2.3 Инструкция по работе с программой. 17
Заключение 18
Литература 20
Приложение 21


ВВЕДЕНИЕ
Начиная с 1995 года во всех странах мира началось активное внедрение цифрового спутникового и кабельного телевидения, и сейчас в мире используется более 30 миллионов цифровых приемников. С 1998 года, в буквальном понимании, началась цифровая технологическая революция в сфере телерадиовещания и связи. В мире, начиная со «старой консервативной» Великобритании, началось внедрение новейших эффективных цифровых технологий стандарта DVB-T в эфирном (наземном) телерадиовещании. Активно продвигается DVB-T в других странах мира.
В соответствии с принятой в России «Концепцией развития наземного (эфирного) цифрового телевизионного и звукового вещания» признано целесообразным для наземного цифрового телевизионного и звукового вещания использовать европейские стандарты систем DVB-Т и DAB-Т. В декабре 1999 года Коллегией Минсвязи России принята стратегия перехода России от аналогового к цифровому телевизионному вещанию с развертыванием опытных зон вещания. Уже состоялся запуск тестового вещания в Санкт-Петербурге, Нижнем Новгороде, Москве и Владивостоке. В 2006–2015 годах предусматривается развертывание региональных передающих сетей наземного цифрового вещания по всей территории страны.
На каком принципе основана реализация видео в цифровом телевидение? На том же, что и все остальное видео и кино. Кадры последовательно сменяют друг друга 25 раз в секунду (для Pal/Secam), что наш мозг воспринимает как непрерывное движение. Из такого принципа делаем вывод: длинные видеопоследовательности имеют огромные размеры. Так, пусть мы сохраняем видео с размером кадра 352×288, 24 бит на пиксель. Для сохранения хотя бы минуты видео потребуется примерно 435 Мбайт. В этом и есть основная проблема цифрового видео — неимоверная прожорливость по части размера файла.
Как бороться с огромными размерами? Есть два основных способа борьбы: уменьшение основных параметров видеозахвата и сжатие. Основными параметрами видеозахвата являются: размер кадра, кодировка цвета и частота кадров.
Достаточно часто вводят термин «битрейт». Средний битрейт — это размер видеопоследовательности в битах, отнесенный к его длительности в секундах. Единицей измерения битрейта служит 1 бит/с — 1 бит в секунду (1bps — 1 bit(s)-per-second). Поскольку 1 бит/с — величина очень маленькая в приложении к цифровому видео, также вводятся Килобит/с (Кбит/с) и Мегабит/с (Мбит/с). Для видео из предыдущего вопроса битрейт составляет 58 Мбит/с. Битрейт сжатого видео на Mpeg, имеющего такой же размер кадра и частоту кадров, равен 1,1 Мбит/с.
Сжатия разделяют на два типа: без потери качества (часто кратко называются «без потерь») и с потерей качества («с потерями»). Разница между этими типами понятна из их названия. Большинство методов сжатия без потери качества не учитывают визуальную похожесть соседних кадров видеопотока. Методы сжатия с потерей качества, наоборот, в большинстве случаев используют эту похожесть. Из-за этого максимальная степень сжатия среднестатистического видеофрагмента, достигаемая алгоритмами без потерь, не превышает 3 к 1, в то время как алгоритмы, работающие с потерей качества, могут сжимать вплоть до 100 к 1.
В следствие широкого распространения мультимедиа появилась необходимость в редактировании такого рода информации с целью получения наивысшего качества виде и звука., что привело к идее написания приложения, которое должно обеспечивать извлечение аудиодорожки из одного видео файла и добавление еев другой или, по желанию пользователя, сохранять аудиодорожку в wav файл. Программа должна поддерживать формат медиаконтейнера MPEG-TS. На входе программа получает имена файла источника, откуда будет осуществляться копирование аудиодорожки и конечного файла, куда будет вставляться аудиопоток. Второй параметр не обязателен, если его не указать то программа просто сохранит аудио поток, в wav файл. В процессе выполнения программы пользователю предлагается выбрать номер аудидорожки, с которой будут производиться манипуляции.
Плюсы данной программы в отличие от аналогичных программ:
• простота в использовании;
• не коммерческое использование;
• производительность. 
ГЛАВА 1. ТЕОРЕТИЧЕСКИЕ АСПЕКТЫ ПРИМЕНЕНИЯ MPEG В ПОВСЕДНЕВНОЙ ЖИЗНИ
1.1 Понятие Mpeg. И его стандарты сжатия.
MPEG (англ. Moving Picture Experts Group; произносится «эмпег» — рус. Экспертная группа по движущемуся изображению) — группа специалистов, сформированная международной организацией ISO для выработки стандартов сжатия и передачи цифровой видео и аудио информации; также имеет официальное обозначение — ISO/IEC JTC1/SC29 WG11 (ISO/IEC Joint Technical Committee 1, Subcommittee 29, Working Group 11). Первое собрание группы происходило в мае 1988 года в Оттаве. К 2005 году в собраниях участвовало до 350 человек.
Группа MPEG стандартизовала следующие стандарты сжатия и вспомогательные стандарты:
• MPEG-1: Исходный стандарт видео и аудио компрессии. Позднее использовался как стандарт для Video CD; включает в себя Layer 2 формат аудио сжатия.
• MPEG-2: Транспортные, видео и аудио стандарты для широковещательного телевидения. Используется в цифровом телевидении ATSC, DVB и ISDB, цифровых спутниковых ТВ службах, таких, как Dish Network, цифровом кабельном телевидении, и (с небольшими изменениями) в DVD.
• MPEG-3: Изначально разрабатывался для HDTV, но от него отказались, когда обнаружилось, что MPEG-2 (с расширениями) вполне достаточно для HDTV. (Не следует путать MPEG-3 с MP3, который на самом деле является MPEG-1 Layer 3.)
• MPEG-4: Расширяет MPEG-1 для поддержки видео/аудио «объектов», 3D контента, сжатия с низким битрейтом и DRM. В него включено несколько новых высокоэффективных видео стандартов (альтернатив MPEG-2), таких, как:
o MPEG-4 Part 2 (ASP) и
o MPEG-4 Part 10 (или AVC, или H.264). MPEG-4 Part 10 используетсяв HD DVD и Blu-Ray дисках.
В дополнение к вышеупомянутым существуют стандарты, которые являются не усовершенствованием предыдущих стандартов сжатия, а определяют различные языки описания:
• MPEG-7: Стандарт индексации мультимедиа-содержимого.
• MPEG-21: MPEG описывает стандарт как мультимедийная среда разработки.
1.2 Транспортный поток. MPEG2-TS
Транспортный поток (TS, TP, MPEG-TS, или M2TS) является протоколом для передачи аудио и видео данных, описанным в MPEG2 Часть 1. Цель разработки этого стандарта — мультиплексирование аудио и видео данных и синхронизация их выхода.
TS — формат медиаконтейнера который инкапсулирует пакеты элементарных потоков и других данных.
Структура потока. В транспортном потоке можно выделить несколько уровней абстракции, иерархическая структура которых напоминает сетевую модель OSI. Например поток, содержащий видео, можно представить следующим образом:
• Смесь различных программ.
• Пакетизированный элементарный поток (Packetized elementary stream, PES);
• Элементарныйпоток (Elementary stream, ES);
• Группа изображений (Group of pictures, GOP) — предоставляет случайный доступ к картинке;
• Отдельное изображение (кадр);
• Срез (Slice) — часть кадра, выделенная для предотвращения распространения ошибок квантования;
• Макроблок — в составе от 6 до 12 DCT блоков;
• Элементарный блок кодирования (DCT блок) размером 8x8 точек.
1.3 Важные элементы транспортного потока
Пакет. Пакет, базовая единица транспортного потока. Заголовок начинается с известного Байта Синхронизации (8 бит) 0x47 (0100 0111). Следующие три битовых флага используются, чтобы указать, как должна быть обработана полезная нагрузка.
PID. Каждая таблица или элементарный поток в транспортном потоке идентифицируется по 13-битовому PID. Демультиплексор извлекает элементарные потоки из общего транспортного потока, объединяя их в потоки с одинаковыми PID. В большинстве приложений планируется использовать временное мультиплексирование, чтобы решать, как часто конкретный PID будет появляться в транспортном потоке.
Программы. Транспортный поток имеет концепцию программы. Единая программа Program Map Table (PMT), которая имеет уникальный PID, и элементарные потоки, связанные с этой программой и имеющие свои PID-ы, которые перечислены в PMT. Например, транспортный поток, используемый в цифровом телевидении может состоять из трех программ, и нести в себе три телевизионных канала. Предположим, каждый канал состоит из одного видео потока и одного или двух аудио потока, и любые необходимые метаданные. Приемник, желающий декодировать один из каналов использует для декодирования лишь PID-ы нужные для данного канала, которые связаны с его программой. Он может отказаться от содержащихся в ней всех других PID-ов.
Program Specific Information (PSI).
Специальная информация о программах
1. Program Association Table (PAT). Таблицапрограмм (Program Association Table, PAT) содержит PID-ывсех PMT. Еёсобственный PID всегда 0x0.
2. ProgramMapTable (PMT). Таблица структуры программ (Program Map Table, PMT) содержит PIDы и основные характеристики элементарных потоков конкретной программы — видео, звука, дополнительных данных. Для каждой программы есть свой PMT с собственным PID. Кроме того PMT содержит сообщения EMC системы условного доступа, если в программе присутствуют зашифрованные элементарные потоки.
PCR.Чтобы декодер мог воспроизводить программы в правильное время, на правильной скорости и с синхронизацией, обычно программы периодически передают Program Clock Reference, или PCR, в одном из потоков программы. Это так же называется основной источник опорной частоты (Master Clock). Временные интервалы в MPEG2 рассчитываются по этой частоте. Для примера, временная метка представления (PTS) соответствует PCR.
Null packets.Некоторые протоколы передачи, такие как в стандартах ATSC и DVB, жестко ограничены требованиями к битрейту транспортного потока. Таким образом, чтобы поток данных поддерживал постоянную жестко заданную скорость передачи, Multiplexer должен иметь возможность добавлять в поток дополнительные пакеты. Пакеты с PID 0x1FFF как раз служат для этих целей. Поле полезной нагрузки этих пакетов не содержит какой-либо полезной информации, таким образом ресивер получая такой пакет игнорирует его содержимое. 
ГЛАВА 2. РАЗРАБОТКА ПРОГРАММЫ
2.1 Выбор системы программирования
В качестве средств программирования была выбрана система программирования С++.
C++ - компилируемый статически типизированный язык программирования общего назначения.
Поддерживает такие парадигмы программирования как процедурное программирование, модульность, раздельная компиляция, обработка исключений, абстракция данных, типы (объекты), виртуальные функции, объектно-ориентированное программирование, обобщенное программирование, контейнеры и алгоритмы, сочетает свойства как высокоуровневых, так и низкоуровневых языков. В сравнении с его предшественником — языком C, — наибольшее внимание уделено поддержке объектно-ориентированного и обобщённого программирования.
C++ — чрезвычайно мощный язык, содержащий средства создания эффективных программ практически любого назначения, от низкоуровневых утилит и драйверов до сложных программных комплексов самого различного назначения. В частности:
• Поддерживаются различные стили и технологии программирования, включая традиционное директивное программирование, ООП, обобщённое программирование, метапрограммирование (шаблоны, макросы).
• Предсказуемое выполнение программ является важным достоинством для построения систем реального времени. Весь код, неявно генерируемый компилятором для реализации языковых возможностей (например, при преобразовании переменной к другому типу), определён в стандарте. Также строго определены места программы, в которых этот код выполняется. Это даёт возможность замерять или рассчитывать время реакции программы на внешнее событие.
• Автоматический вызов деструкторов объектов при их уничтожении, причём в порядке, обратном вызову конструкторов. Это упрощает (достаточно объявить переменную) и делает более надёжным освобождение ресурсов (память, файлы, семафоры и т. п.), а также позволяет гарантированно выполнять переходы состояний программы, не обязательно связанные с освобождением ресурсов (например, запись в журнал).
• Пользовательские функции-операторы позволяют кратко и ёмко записывать выражения над пользовательскими типами в естественной алгебраической форме.
• Язык поддерживает понятия физической (const) и логической (mutable) константности. Это делает программу надёжнее, так как позволяет компилятору, например, диагностировать ошибочные попытки изменения значения переменной. Объявление константности даёт программисту, читающему текст программы дополнительное представление о правильном использовании классов и функций, а также может являться подсказкой для оптимизации. Перегрузка функций-членов по признаку константности позволяет определять изнутри объекта цели вызова метода (константный для чтения, неконстантный для изменения). Объявление mutable позволяет сохранять логическую константность при использовании кэшей и ленивых вычислений.
• Используя шаблоны, возможно создавать обобщённые контейнеры и алгоритмы для разных типов данных, а также специализировать и вычислять на этапе компиляции.
• Возможность имитации расширения языка для поддержки парадигм, которые не поддерживаются компиляторами напрямую. Например, библиотека Boost.Bind позволяет связывать аргументы функций.
• Возможность создания встроенных предметно-ориентированных языков программирования. Такой подход использует, например библиотека Boost.Spirit, позволяющая задавать EBNF-грамматику парсеров прямо в коде C++.
• Используя шаблоны и множественное наследование можно имитировать классы-примеси и комбинаторную параметризацию библиотек. Такой подход применён в библиотеке Loki, класс SmartPtr которой позволяет, управляя всего несколькими параметрами времени компиляции, сгенерировать около 300 видов «умных указателей» для управления ресурсами.
• Кроссплатформенность: стандарт языка накладывает минимальные требования на ЭВМ для запуска скомпилированных программ. Для определения реальных свойств системы выполнения в стандартной библиотеке присутствуют соответствующие возможности (например, std::numeric_limits <T>). Доступны компиляторы для большого количества платформ, на языке C++ разрабатывают программы для самых различных платформ и систем.
• Эффективность. Язык спроектирован так, чтобы дать программисту максимальный контроль над всеми аспектами структуры и порядка исполнения программы. Ни одна из языковых возможностей, приводящая к дополнительным накладным расходам, не является обязательной для использования — при необходимости язык позволяет обеспечить максимальную эффективность программы.
• Имеется возможность работы на низком уровне с памятью, адресами.
• Высокая совместимость с языком C, позволяющая использовать весь существующий C-код (код на C может быть с минимальными переделками скомпилирован компилятором C++; библиотеки, написанные на C, обычно могут быть вызваны из C++ непосредственно без каких-либо дополнительных затрат, в том числе и на уровне функций обратного вызова, позволяя библиотекам, написанным на C, вызывать код, написанный на С++).

FFmpeg — набор свободных библиотек с открытым исходным кодом, которые позволяют записывать, конвертировать и передавать цифровые аудио- и видеозаписи в различных форматах. Он включает libavcodec — библиотеку кодирования и декодирования аудио и видео и libavformat — библиотеку мультиплексирования и демультиплексирования в медиаконтейнер. Название происходит от названия экспертной группы MPEG и FF, означающего fast forward.
FFmpeg разработан под ОС на основе Linux, однако может быть скомпилирован под многие другие операционные системы. Разработчики не выпускают релизов и рекомендуют использовать последнюю версию из Git. Распространяется под лицензиями GNU LGPL или GNU GPL.
Поддерживаемые кодеки и форматы. Участниками проекта FFmpeg были подвергнуты обратной разработке и/или реализованы следующие кодеки и форматы:
Кодеки:
• ATRAC3
• H.261, H.263 и H.264
• Intel Indeo 2 и 3
• QDesign Music Codec 2, используемыйв QuickTime до QuickTime 7
• Sorenson 3 Codec используемый в QuickTime
• Theora (вместе с Vorbis используется в контейнере Ogg)
• Truespeech
• TXD
• VP5, VP6
• VP8
• Vorbis
• Windows Media Audio (WMA1, WMA2 и WMA Pro)
Некоторыекодеки, связанныес Windows Media Player (Microsoft RLE, Microsoft Video 1, Cinepak, Indeo 2, 3 и 5, Motion JPEG, Microsoft MPEG-4 v1, v2 и v3, WMV1, WMV2 and WMV3 (или VC-1)).
Форматы:
• ASF, и через него оригинальную версию DivX
• AVI
• FLV
• Matroska (включая WebM)
• MPEG transport stream
• TXD
2.2 Технология разработки программы
Разработка программы состоит из следующих этапов:
1. Разработать класс mpeg, который принимает в качестве параметров имя файла и режим открытия файла.Конструктор класса, обнуляет все имеющиеся значения, открывает используемый файл с помощью функции openFile. Так же происходит инициализация библиотеки ffmpeg.
2. Разработка алгоритма поиска потока. Поиск осуществляется байту синхронизации (8 бит) 0x47 (0100 0111). Следующие три битовых флага используются, чтобы указать, как должна быть обработана полезная нагрузка:
1. Первый флажок указывает на транспортную ошибку.
2. Второй флажок указывает начало полезной нагрузки (payload_unit_start_indicator). Когда полезная нагрузка Transport Stream пакета содержит данные по PSI, payload_unit_start_indicator имеет значение '1'. Если Transport Stream пакет не содержит данные по PSI, то значение payload_unit_start_indicator будет '0'.
3. Третий флажок указывает транспортный приоритетный бит.
Флажки сопровождаются Идентификатором Пакета (13 бит) PID. Используется, чтобы однозначно определить поток, которому принадлежит пакет (например, пакеты PES, соответствующие ES), сгенерированный мультиплексором. PID позволяет получателю дифференцировать поток, которому принадлежит каждый полученный пакет. Некоторые значения PID предопределены и используются, чтобы указать различные потоки информации контроля. От пакета с неизвестным PID, который не требуется получателю, просто отказываются. Специфическое значение PID 0x1FFF зарезервировано, чтобы указать, что пакет — нулевой пакет (и должен быть проигнорирован получателем).Два следующих служебных бита используются процедурами условного доступа к зашифрованной полезной нагрузке некоторых пакетов TS.Два служебных бита поля адаптации, которые могут иметь четыре значения:
1. 01 — без поля адаптации (adaptation_field), только полезная нагрузка (payload_data)
2. 10 — только поля адаптации (adaptation_field), без полезной нагрузки (payload_data)
3. 11 — поля адаптации (adaptation_field) и далее следует полезная нагрузка (payload_data)
4. 00 — ЗАРЕЗЕРВИРОВАННЫЙ ISO/IEC для будущего использования.
Наконец есть Счетчик Непрерывности (4 бита)
Остальная часть пакета состоит из полезной информации. Пакеты составляют 188 байт в длине, но среда коммуникации может добавить некоторые байты для устранения ошибок пакета. DVB-ASI использует 204 байта и 208 байтов ATSC как транспортный пакет потока. (DVB t=8 и ATSC t=10 то есть дополнительные байты = 2*t). Передача ATSC добавляет 20 байтов Reed-Solomon передовое устранение ошибок, чтобы создать пакет, который является 208 байтов длиной. 188-байтовый размер пакета был первоначально выбран для совместимости с системами ATM.
Функция search, печатает на экран пользователю найденное значение. Вызывает вспомогательную функцию searchVsp. Адоптированную под поиск разного типа таблиц.
Метод searchVsp использует вспомогательную функцию sumPaylod для сохранения нужных нам данных в буфере оперативной памяти.
3. Изучение структуры wav файла.
Функция cutAudioStream использует функцию searchVsp для сохранения потока в буфере. В дальнейшем полученные ауди данные приспособить к структуре RIFF, и сохраняются на жесткий диск.
4. По предыдущему описанию сохраняем наш аудио поток на жестком диске. И начинаем вставлять его в исходный файл. Этим занимается функция pustAudStr. Метод так же обновляет таблицы PMT, но об этом чуть позже. Функция формирует необходимые заголовки, а именно заголовок ES, и PES. Рассчитывается их длина и записывается в файл. Пакеты вставляются через определенные промежутки, что бы поддержать заявленный битрейт.
5. Добавление PID, в таблицу PMT и расчет контрольных сумм(CRC32).Функция ubdatePMT выполняет все предыдущие требования. Вставкой новых элементов в массив проста и тривиальна, по этому автор не будет останавливаться на подробном описание. Функция вызывает метод CalculateCRC, который в свою очередь использует кроссплатформенную библиотеку проекта ffmpeg – libavutil. На выходе полученная таблица проверяется функцией checkCRC на случай не правильной вставки PID. В случае ошибки программа прекращает свою работу, уведомив при этом пользователя.


2.3 Инструкция по работе с программой.
Полученная программа представляет собой консольное приложение и для работы с ним нужно выполнить следующие действия:
1. Нажать сочетание клавиш, win+r;
2. В появившемся окне набрать cmd.exe;
3. В командной строке перейти в папку, с программой;
4. Набрать имя программы, программа принимает 2 аргумента. 1 аргумент – имя файла из которого берем поток. 2 аргумент (не обязательный параметр) – имя файла в который будем добавлять поток. В случае если не указывать 2 аргумент программа сохранит поток в wav файл.
5. На протяжение выполнения программы, пользователю предстоит выбрать номер потока, с которым в дальнейшем мы будем работать.


ЗАКЛЮЧЕНИЕ

С каждым годом мы все более убеждаемся в том, что нам не дано не только представить информационные потребности клиентов в будущем, но и вообразить, насколько необычными они могут быть. Как образно сказал один из руководителей компании Intel, в цифровом мире главным заказчиком является не армия, а Микки-Маус. Поэтому можно смело утверждать, что ключевым фактором цифровой революции в телевидении станут вопросы управления контентом.
Клиент всегда хочет получить за те же деньги товар или услугу лучшего качества. Цифровые системы позволяют зрителю получить идеальные копии аудио- и видеопрограмм. Создателей контента такое положение дел, с одной стороны, радует, и душу их греет надежда на то, что зритель когда-нибудь сможет насладиться тем же качеством изображения, которое они любовно создают на студийных мониторах. С другой стороны, само слово «цифровой» вселяет ужас в души создателей, владельцев и распространителей контента.
Доставленная зрителю цифровая информация не будет просто проходить на экран (как аналоговый сигнал сегодня). Ее можно собрать на внешних носителях, домашних медиасерверах, специальных цифровых устройствах, оснащенных программным обеспечением, позволяющим идентифицировать телепрограммы, отфильтровывая все лишнее.
Исходя из этого, программа, представленная в данной работе, может представлять определенный интерес, как средство редактирования аудио и видео потоков. Кроме того, данное приложение является кроссплатформенным и легко адаптируется под любую операционную систему (ОС). Причем не только под популярные ОС, такие как,Linux, MACOS, Windows, но и под системы, интегрированные в оборудования, обеспечивающие обработку цифровых сигналов. Программа может использоваться как автономно, так и быть интегрированной в любой мультимедийный редактор.


ЛИТЕРАТУРА
1. ISO/IEC 11172-3:1993
2. ISO/IEC 13818-3:1993
3. http://en.wikipedia.org/wiki/MPEG_transport_stream
4. http://en.wikipedia.org/wiki/Program_Specific_Information
5. http://en.wikipedia.org/wiki/Program-specific_information
6. Резников М.Р. Радио и телевидение вчера, сегодня, завтра.- М.:Связь, 2005.-95с.
7. Шамшин В.А. Телевидение.// Электросвязь.- 1975. - №9.- С.1.2005
8. Талызин Н.В. Связь, телевидение, радиовещание.// Радио.- 2006.- №3.- С.1-3.
9. Бьерн Страуструп. Язык программирования С++.// Невский Диалект – 2008. – 1104с.
10. Скотт Мейерс. Эффективное использование STL.// Питер – 2002. – 224с.

ПРИЛОЖЕНИЕ

Рис. 1 Результаты работы программы


Рис. 2 Структура файла-приемника


Рис. 3 Структура файла вставленной видео дорожки
Никто не решился оставить свой комментарий.
Будь-те первым, поделитесь мнением с остальными.
avatar