1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/synote-mpeg4ip

Клонировать/Скачать
README.md 73 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 16.03.2025 09:41 08a9783

Проект MPEG4IP

Май 2005 года

Проект MPEG4IP

Проект MPEG4IP предоставляет систему на основе стандартов для кодирования, потокового передачи и воспроизведения закодированного аудио, видео и текста. Для достижения этой цели мы объединили несколько существующих открытых пакетов программного обеспечения и создали некоторые оригинальные компоненты для заполнения пробелов.

Пожалуйста, обратите внимание, что этот проект предназначен для разработчиков, интересующихся стандартами аудио и видео, а также интернет-трансляциями. Он не предназначен для конечных пользователей. Пожалуйста, прочитайте всю юридическую информацию в файле COPYING!Также обратите внимание, что основной акцент разработки этого проекта сосредоточен на платформе Linux. Если вы собираетесь использовать пакет на других платформах, особенно на некорпоративных системах UNIX, вам, вероятно, придётся выполнить некоторую работу.Пожалуйста, используйте сайт SourceForge для отчета о проблемах, предложений улучшений, вопросов и т.д. Адрес сайта: http://www.sourceforge.net/projects/mpeg4ip

Есть также официальный сайт проекта http://www.mpeg4ip.net/, который содержит общую информацию о MPEG4IP.

У нас есть руководство по MPEG4IP, предоставленное everwicked. Увидеть его можно здесь: doc/MPEG4IP_Guide.pdf.

Назад к началу

Обзор

Существуют два способа использования MPEG4IP для создания контента:

Старый метод предполагает, что вы каким-либо образом захватили сырое аудио и/или видео в файл. Это является отправной точкой, с которой вы можете использовать средства кодирования MPEG4IP для создания файла MP4. Самый простой метод — использование скрипта 'mp4encode'. Подробные инструкции для этого скрипта и отдельных средств, которые он использует, содержатся в doc/encoding.htmОбратите внимание, что это может быть немного устарело; мы больше не включаем некоторые пакеты, такие как xvid и faac — они являются отдельными загрузками, поэтому командные строки могут измениться. Посмотрите эти пакеты для получения конкретных данных о командных строках. Новый метод представляет собой интегрированный инструмент прямого кодирования под названием mp4live. Этот программный продукт предназначен для удобства создания файлов MP4 или передачи потокового аудио/видео через сеть. Он даже может выполнять оба действия одновременно! Основное требование для использования этого инструмента — наличие операционной системы Linux, устройства захвата видео и драйвера Video for Linux (v4l) или Video for Linux2 (v4l2) для него. На данный момент мы протестировали его с использованием драйвера bttv для устройств захвата видео на базе Brooktree и драйвера qcam для веб-камеры Logitech QuickCam Express USB. Оба эти решения можно приобрести примерно за $50 США! Дополнительную информацию о mp4live можно найти в файле MP4LIVE_README.html.После подготовки файла MP4 его можно поместить в каталог содержимого сервера потоковой передачи. Мы обычно используем сервер потоковой передачи Apple Darwin, но любым сервером, который понимает файлы MP4 (или намёки QuickTime), также можно воспользоваться.

Когда содержимое закодировано и доступно на сервере, вы можете запустить проигрыватель. Запустите gmp4player, затем введите URL RTSP к серверу и к содержимому (работает и командная строка). Например,

$ gmp4player rtsp://myserver.mydomain.com/mycontent.mp4

Хотя наш акцент сосредоточен на потоковой передаче, проигрыватель также может воспроизводить локальные файлы. Например,

$ gmp4player mycontent.mp4

Это ещё не всё! Проигрыватель не ограничен локальным воспроизведением файлов MP4. Он также может читать AVI, CMP, DIVX, AAC, MP3, MPEG 1/2 и WAV. Это полезно для отладки, так как закодированные данные могут проверяться независимо от контейнера файла MP4, и известное хорошее содержимое, такое как ваш любимый MP3, может использоваться для проверки корректной работы проигрывателя с вашим оборудованием. Например,

$ gmp4player mymusic.mp3

Для получения последнего списка кодеков воспроизведения см. список функциональных возможностей.И это тоже ещё не всё... Вы можете настроить свой проигрыватель для выполнения плейлиста путём создания простого текстового файла с расширением .mp4plist, .m4u или .mxu, где каждый элемент (файл или поток) находится на своей собственной строке.Примечание: Если вам предпочитается версия проигрывателя без графического интерфейса пользователя, или если ваша система не включает GTK или GLIB, просто окно видеопроигрывателя mp4player доступно для удовлетворения этой потребности.

Назад к началу страницы

Юридическая информация:

Дополнительную информацию можно найти в файле COPYING.

Назад к началу страницы

Сервер потокового вещания Darwin QuickTime

Обратите внимание, что сервер потокового вещания Darwin QuickTime от Apple не распространяется вместе с mpeg4ip. Он может быть скачан с сайта Apple в виде исходного кода или готовых бинарников. Для тех, кто выбирает вариант с исходным кодом, обратитесь к документации, которая прилагается к серверу, чтобы узнать, как его сборка и конфигурация для вашего окружения.

Учтите, что по умолчанию директория содержимого находится по пути /usr/local/movies, а также вы можете настроить сервер Darwin, направив ваш браузер на порт 1220 (например: localhost:1220).С сервером потокового вещания Darwin включены некоторые образцы файлов MP4. Также компания Envivio предлагает несколько образцов файлов MP4. Мы рекомендуем вам сначала скачать один из этих образцов и попробовать открыть файл с помощью gmp4player. Если это работает, то попробуйте скопировать файл в директорию содержимого сервера потокового вещания (например: /usr/local/movies) и ввести соответствующий URL RTSP в gmp4player. Возможно, вам придётся «подсказывать» файлы перед тем, как они будут воспроизводиться.Если у вас возникли проблемы с DSS, пожалуйста, свяжитесь с разработчиками на сайте Apple — они очень доброжелательны. У них есть две рассылки — одна для пользователей и другая для разработчиков. Обязательно ими воспользуйтесь.

Известна проблема (ноябрь 2004 года) с запуском DSS и mp4live на одном и том же системе. Надеемся, что она будет исправлена скоро, либо обратитесь на форумы SourceForge для получения дополнительной информации.

Назад к началу страницы

Предварительные требования для сборки

Эта секция обсуждает предварительные требования для сборки mpeg4ip (то есть пакеты, которые вы захотите установить для корректной сборки). Это не относится к Windows. Чтобы собрать на Windows, см. эти инструкции.

Особенности того, как использовать эти библиотеки для сборки, будут обсуждаться ниже.

Все сборки требуют библиотек развития SDL. Требуется версия SDL 1.2.7 или выше; убедитесь, что установлено развитие библиотеки, если вы используете RPM.Если у вас платформа на базе x86, вы захотите установить NASM. Если вы не установите его, возможно, вы не сможете декодировать или закодировать в требуемых скоростях кадров. Подробнее см. сайт NASM. Если вы собираете либо проигрыватель, либо MP4Live, вам потребуется установить GTK-2. Поддержка GTK-1.2 больше не осуществляется. Убедитесь, что установлены пакеты разработки.Если вы собираете проигрыватель, вам могут понадобиться следующие пакеты:

  • ffmpeg с пакетами AMR узкого и широкого диапазона
  • xvidcore (версии 0.9.8 или выше)
  • libmpeg2 (высоко рекомендуется для декодирования MPEG-2) Примечание: для gcc 4.0 вам потребуется конфигурация с параметром --enable-shared=yes Возможно, вам также придется удалить некоторые inline-функции из файла libmpeg2/cpu_accel.c
  • libid3 — метки ID3 для файлов MP3
  • liba52 — декодирование AC3 для файлов MPEG и потоков MPEG2 Примечание: для gcc 4.0 вам потребуется конфигурация с параметром --enable-shared=yes
  • faad2 (установите после установки mpeg4ip)

Следующие пакеты являются необязательными для mp4live, но они активируют большую функциональность:

  • faac, версии 1.20.1 или выше Если вы используете выпущенную или CVS версию после версии 1.24, используйте параметр --with=mp4v2=no
  • lame (кодировка MP3)
  • twolame (кодировка MPEG1, слоя 2)
  • ffmpeg (H.263, MPEG-4, MPEG-2 видео, AMR, аудио MPEG-2)
  • xvid (кодировка MPEG-4 видео)
  • x264 (кодировка видео H.264)
  • Интерфейс V4L2 (входит в состав ядра 2.6, Fedora Core является особым случаем)
  • libSRTP (добавляет шифрование и проверку целостности к потокам RTP) Обязательно должна быть версия 1.5 или выше.Разработчик рекомендует ffmpeg для кодирования MPEG-4. Пожалуйста, обратитесь к инструкциям ниже для того, чтобы узнать, как установить ffmpeg.

Если вы собираетесь кодировать MPEG-4 или H.264, вам также потребуется faac для кодирования AAC; большинство других проигрывателей не воспроизводят другие типы аудио при этих видеокодировках. Версии faac после 1.24 требуют параметра --with-mp4v2=no для команды configure.

Назад к началу страницы

Сборка и установка

Прочтите раздел с требованиями и этот раздел полностью перед сборкой, так как вам может пришлось бы сделать это дважды; mpeg4ip имеет несколько опциональных пакетов, которые следует установить до начала процесса сборки.

Если вы собираете на Windows, обратитесь к этим инструкциям.

На системах с базой Linux или Unix вам потребуется выполнить следующее:

./bootstrap make make install (требуются права root).

Некоторые системы имеют различные требования. Обратитесь к разделу о Поддерживаемых операционных системах перед продолжением.

Если вы хотите собрать mpeg4ip без mp4live, вы можете указать аргументы --disable-mp4live или --disable-server. Другие системы автоматически обнаружат, что вы не собираетесь на Linux, и не будут собирать mp4live.Mp4live работает лучше всего с помощью интерфейса V4L2, который не установлен в большинстве распределений Linux с ядром 2.4. Mp4live будет работать без использования интерфейса V4L2, но вы столкнётесь с долгосрочными проблемами синхронизации звука и видео (где "долго" может быть минутами или часами). Мы предоставляем немного информации о том, как мы установили V4L2. Ядра серии 2.6 должны иметь V4L2 встроенным.Fedora Core 3 и более ранние версии не включают правильные заголовочные файлы для активации V4L2. В данный момент мы полагаем, что V4L2 поддерживается после установки файлов videodev.h и videodev2.h, но не проверяли это. Мы модифицировали конфигурацию таким образом, чтобы она выводила сообщение во время конфигурирования, которое указывает директорию, где можно найти правильные файлы.

Для установки с использованием ffmpeg версии OnClickListener 0.4.8 или ниже, введите аргумент --enable-ffmpeg=<directory> к команде bootstrap или cvs_bootstrap. <directory> является обязательным и должно быть абсолютным путём к месту, где был скомпилирован код ffmpeg — не используйте ~.

Для версий 0.4.9 и выше рекомендуется установить библиотеки и заголовочные файлы ffmpeg. При установке ffmpeg используйте дополнительную команду make installlib. mpeg4ip должна автоматически обнаруживать наличие библиотеки ffmpeg.

Если вы установите ffmpeg, то не рекомендуется связывать его с внешними библиотеками, кроме библиотек AMR ниже. Если вы сделаете это, вам придётся добавить эти дополнительные библиотеки в файлы Makefile, которые используют ffmpeg (в директориях player/plugin/video/ffmpeg, player/plugin/audio/ffmpeg и server/mp4live).

Примечание: с апреля 2006 года команда make installlib больше не требуется. Обычная команда make install кажется достаточной.Если вы хотите использовать декодирование AMR, вам потребуется сборка ffmpeg с поддержкой AMR — см. их документацию для получения более подробной информации. (Основное, используйте их --enable-amr-wb и --enable-amr-nb коды, скачайте исходный код и распакуйте его в правильную поддиректорию — для директории amr_float вам придётся переместить код из папки c-code в amr_float).Чтобы собрать FFmpeg на macOS, используйте стандартные опции сборки. Отредактируйте файл config.mak и замените LDFLAGS на пустую строку, то есть: LDFLAGS=.

Если при линковке возникает ошибка, удалите -mdynamic-no-pic из OPTFLAGS в config.mak и полностью пересоберите FFmpeg.

Вы также можете понадобиться запустить команду ranlib /usr/local/lib/libavcodec.a после установки, если вы получаете ошибку, что она (/usr/local/lib/libavcodec.a) устарела.

Мы не смогли успешно связать сборки FFmpeg 2007 года на macOS.

Мы тестировали с версиями FFmpeg 0.4.7, Yöntem 0.4.8 и 0.4.9-pre1. Посмотрите сайт FFmpeg для информации о том, как скачать. Использование версий из CVS находится на усмотрение пользователя. Если у вас возникли проблемы с компиляцией с помощью версии FFmpeg из CVS, пожалуйста, используйте выпущенную версию. Если вы хотите выполнять кодирование MPEG2, вам потребуется FFmpeg.

Если вы хотите установить faad2, сделайте это после установки mpeg4ip. Если вы ранее установили его, вам потребуется переустановить его (а также, скорее всего, faac). Встроенный плагин faad2 перезапишет aac_plugin.

Если у вас нет привилегий root, но вы всё равно хотите установить распространяемый пакет в директорию, к которой у вас есть права записи, вот пример того, как это сделать:

mkdir -p $HOME/local/bin $HOME/local/lib
./bootstrap --prefix=$HOME/local
make
make install

Вы также должны будете добавить ~/local/bin в ваш PATH, а ~/local/lib в ваш LD_LIBRARY_PATH.Если этот процесс работает для вас, вы можете перейти к следующему разделу Настройки Bootstrap. Если этот процесс не работает, или вы скачали из CVS, применимо ниже. Мы создали распространение с использованием GNU autoconf, automake и libtool. Мы стремились следовать конвенциям GNU для открытых источников пакетов. Это усложняется тем фактом, что мы собираемся из многих других пакетов. Где пакет уже использовал GNU-инструменты, мы оставили всё как есть. Где пакет использовал свой собственный Makefile, мы оставили его нетронутым, если это был сложный Makefile. Если же он был простым, мы заменили его эквивалентным файлом automake. Если вам нужно установить любые из этих инструментов, выясните, где установлены остальные (который autoconf). Если путь не начинается с /usr/local, используйте команду ./configure --prefix=<путь до /bin в других пакетах>.

Например, если autoconf находится в /usr/bin, используйте команду ./configure --prefix=/usr, когда устанавливаете automake или libtool.

Примечание: libtool иногда не установлен на системах Linux (autoconf и automake обычно есть). Вы можете скачать libtool с сайта зеркала GNU.

Чтобы скомпилировать mpeg4ip из CVS, нам требуются следующие инструменты: gcc 3.2 или выше libtool 1.5 autoconf 2.57 automake 1.7.6Если у вас нет этих инструментов и вы пытаетесь скомпилировать из CVS, не жалуйтесь — обновитесь до последних версий этих инструментов, а затем сообщите нам. Возможно, будут проблемы или предупреждения при использовании более новых инструментов — мы не всегда следим за самыми новыми версиями. Пожалуйста, попробуйте исправить эти проблемы самостоятельно перед продолжением, и отправьте обратную связь через форумы SourceForge.

Убедитесь, что вы прочитали раздел, относящийся к вашей операционной системе, перед тем как продолжить здесь.

Общими правилами является то, что код должен быть переносимым, но, как однажды сказал кто-то, «Переносимого кода не существует, есть только код, который был переносим». Когда вы находите проблемы, обязательно используйте сайт SourceForge, чтобы сообщить нам о том, что вы встретили, и, возможно, о том, как вы это решили.

Для сборки:

./cvs_bootstrap <аргументы для передачи конфигурационным скриптам>
make
make install (необязательно, обычно требуется привилегии root)

Скрипт bootstrapping передаст все аргументы конфигурационным скриптам.Для любопытных: скрипт bootstrapping запускает конфигурационные скрипты включённых пакетов, если они существуют, а затем генерирует и запускает наш собственный верхний уровень конфигурационный скрипт. В конце этого процесса все файлы Makefile готовы и правильно организованы в иерархии. Если этот процесс не работает для вас, вы можете изменить его так, как вам нужно ;-)Если вы используете cvs_bootstrap и сталкиваетесь с проблемами, связанными с отсутствием конфигураций GTK, вам потребуется найти файлы aclocal, связанные с GTK и GLib (в частности glib-2.0.m4 и gtk-2.0.m4). Эти файлы обычно расположены в директории share/aclocal на вашей системе. В настоящее время мы выполняем поиск в директориях /usr/local, /usr/contrib, /opt/gnome, /usr, /opt/local. Если эти пути не работают для вас, найдите указанные выше файлы (find . -name glib-2.0.m4 -print), и добавьте путь (без директории share/aclocal) в cvs_bootstrap.

Наверх

Опции запуска

Две потенциально интересные опции — это --disable-server и --disable-player, которые отключают сборку сервера и клиента соответственно. По умолчанию собираются как сервер, так и клиент.

Кроме того, опция --enable-ffmpeg (описана выше) очень полезна, если вы используете mp4live с более старой версией ffmpeg.

Если вы собираете на системе с процессором Intel x86, вам может потребоваться указать конфигурационную опцию --enable-mmx=no. Конфигурационный скрипт автоматически распознает целевой процессор x86 и активирует ассемблерные коды MMX в сборке (если доступен ассемблер NASM). Если ваш процессор не поддерживает команды MMX, вам следует отключить эту возможность. Конфигурационный скрипт также проверяет минимальную версию nasm, которая должна быть 0.98.19 или новее.Чтобы собрать с поддержкой IPv6, используйте командную опцию --enable-ipv6.

Наверх

Поддерживаемые операционные системы

На данный момент мы скомпилировали и протестировали на следующих платформах: Linux, FreeBSD, BSD/OS, Solaris и Windows. Для всех видов nix требуются X11.

По состоянию на сегодняшний день мы собирали на Red Hat Linux 6.1 до 9.0 с нативными компиляторами, на 7.1 и 7.2 с GCC 3.0, и на 7.3 и последующие версии с GCC 3.1. Мы также поддерживаем 9.0 с нативным компилятором (GCC 3.2) и GCC 3.3.

С января 2004 года мы переходим на SuSE 9.0 из-за проблем, возникающих при использовании RedHat 9 и процесса обновлений.

Общие Linux/Unix

Если вы уже установили предыдущую версию mpeg4ip, выполните make uninstall перед началом работы, или удалите libsndfile из каталога общих библиотек, если у вас нет другой установленной версии.

libSRTP: После сборки и установки пакета libSRTP согласно его инструкциям, выполните cvs_bootstrap или configure, чтобы mpeg4ip нашёл и (статически) включил пакет libSRTP. Если пакет не найден или если была передана опция --disable-srtp в configure, вызовы, зависящие от libSRTP, будут условно исключены из сборки.

SuSE 9.0При сборке с SuSE 9.0 вам потребуется установить несколько пакетов перед началом работы. Если вы используете установку с SuSE 9.0 Professional, то можете установить всё необходимое с CD. Для списка пакетов, которые я использовал, см. файл suse90pro.installed в нашем распределении или в CVS. Включены пакеты, которые мне потребовались для установки ядра 2.6.1 и использования конфигурации make gconfig.Если вы устанавливаете SuSE 9.0 Personal Edition, вам следует включить все компиляторы и следующие пакеты. Я рекомендую устанавливать их в указанном порядке:

  • nasm — мы установили nasm-0.98.38 в /usr (используйте опцию --prefix=/usr при конфигурировании)
  • pkgconfig — мы установили pkgconfig-0.15.0 в /opt/gnome
  • glib — мы установили glib-2.2.3 в /opt/gnome
  • atk — мы установили atk-1.2.4 в /opt/gnome
  • pango — мы установили pango-1.2.5 в /opt/gnome
  • gtk+ — мы установили gtk+-2.2.4 в /opt/gnome

Убедитесь, что вы устанавливаете семейство GLIB/GTK поверх существующих установок — в большинстве случаев используйте configure --prefix=/opt/gnome.

Если вы хотите запустить gmp4player со звуком, вам потребуется отключить сервер звука aRTs. Начните Центр управления, выберите Звук и мультимедиа, затем выберите Систему звука. Установите флажок "Запуск aRts soundserver при старте KDE" и нажмите Применить. Вам потребуется выйти из системы, а затем снова войти.

Если у вас есть другой способ запуска gmp4player со звуком без выполнения вышеуказанных действий, сообщите нам об этом.

Одно замечание относительно SuSE 9.0 — кажется, они попытались установить V4L2, но это не работает. Они установили неверную версию файла videodev2.h. Мы установили V4L2 только как часть ядра 2.6 (см. руководство здесь).

Slackware

При сборке на Slackware-8.0 вам следует учесть следующее (от maersk):>

Распределение Slackware по умолчанию не включает общедоступные библиотеки для libXv и libXxf86dga. В других случаях, когда вы обновились с версии XFree86 4.0 до 4.1, возможно, вы не скомпилировали общедоступные версии. Общий метод исправления этого таков:

# pushd /usr/X11R6/lib
# rm -f libXv.so libXxf86dga.so
# ld --whole-archive -shared -o libXv.so libXv.a
# ld --whole-archive -shared -o libXxf86dga.so libXxf86dga.a
# popd

Обратите внимание, что вам потребуются права root для выполнения этих команд.

Solaris

При сборке на Solaris должны быть установлены и использованы libtool и GNU Make. Если libtool установлен, вы можете получить предупреждение о том, что общие библиотеки, созданные с помощью GCC версий ниже 3.0, могут иметь проблемы. Игнорируйте это предупреждение, но не берите двоичные библиотеки с других машин.

FreeBSD 5.1

При сборке на FreeBSD 5.1 с использованием GCC 3.2 возникает ошибка. В файле включения fstream.h есть предупреждение. Чтобы собрать проект, вам потребуется удалить ключ -Werror из BILLSCPPWARNING в файле configure.in, а затем выполнить повторную сборку.

Debian Woody

См. часто задаваемые вопросы, включённые в пакет (mp4liveOnDebian.FAQ). Это было предоставлено hell@netexpert.hu.

**Windows**

ВАЖНО: Обычно мы не поддерживаем код для Windows в CVS. Поэтому, если вы не были явно уведомлены использовать CVS, не делайте этого.Начиная с версии 1.0, мы всё менее поддерживаем Windows. Вы можете самостоятельно проследить за кодом — если у вас возникли трудности при этом, то наш код для Windows не для вас.Для Windows требуется Visual Studio 2005 вместе с Windows SDK и DirectX.

Мы также включили проекты для Visual Studio 6.0, но они, скорее всего, не будут работать. Вам потребуется установить NASM в директорию VC98/bin перед компиляцией. Вы должны скачать nasm-0.98.22-win32.zip с сайта NASM. Вам потребуется переименовать nasmw.exe в nasm.exe. Мы требуем установки Service Pack 5.

Также нам потребуется ваша установка проекта SDL в ту же директорию, где вы собираете проект mpeg4ip. Скачайте последнюю версию SDL Development Library для Windows Visual C++, распакуйте её в корневую директорию проекта mpeg4ip. Вам потребуется переименовать её в SDL вместо SDL-1.2.x. Убедитесь, что у вас есть директория docs, include и lib. Возможно, вам придётся установить lib/SDL.dll в системную директорию Windows (например, c:\windows\system32).

Если вы читаете эти инструкции и думаете "что это значит?", то этот проект может не подходить для вас. Не обращайтесь к нам. Как я уже говорил, мы всё меньше поддерживаем Windows.

Если вы используете Visual Studio 2005, воспользуйтесь решениями tools.sln или player.sln. Экзешники и DLL будут собраны в директориях Debug и Release внутри mpeg4ip.Рекомендуется установить DirectX 8.1 или более новую версию. Если это невозможно, и у вас возникли проблемы с видео, попробуйте откомментировать #define OLD_SURFACE в player/src/video.cpp. Кроме того, вам придется решить проблему самостоятельно — сайт libsdl.org является хорошим ресурсом. Для Visual Studio 6 (который больше не поддерживается), используйте проект encoding60.dsw для инструментов кодирования и player/src/player60.dsw для проигрывателя. У вас могут возникнуть проблемы с загрузкой некоторых проектов. Это связано с проблемой в способе завершения строк Windows в файлах (используется Ctrl-M вместо CR-LF как в DOS). По какой-то причине, я никогда не сталкивался с этими проблемами. Вы можете использовать конвертер файлов от Unix к DOS, или просто открыть .dsp или .dsw в Wordpad и сохранить его.

Чтобы запустить mp4player вне среды Visual Studio, установите mp4player.exe в директорию, которая находится в пути Windows (установите все исполняемые файлы в одну и ту же директорию). Вам также потребуется установить все плагины .dll в ту же директорию. Найдите проекты _plugin в player60.dsw.В файлах encoding60.dsw и player60.dsw, если вы выполните последовательное сборочное задание, вы заметите несколько проектов, которые собираются некорректно — это связано с IPv6. Это сделано намеренно. Если вам нужны корректные шаги сборки этих проектов, обратитесь к соответствующему создателю пакета; они не поддерживаются в mpeg4ip.

Для графического интерфейса пользователя для Windows, см. README игрока.

macOS

Мы поддерживаем только версию 10.3.2 (Panther) и более поздние. Убедитесь, что у вас установлены необходимые инструменты.

Установите SDL-1.2.7 (или более новую версию) из исходников, а не из двоичных файлов. Мы требуем скрипта sdl-config, который не устанавливается вместе с двоичными файлами.

Мы собираем версию, соответствующую вашей платформе. Чтобы собрать универсальные двоичные файлы, используйте флаги --enable-universal-binary и --disable-dependency-tracking либо в командной строке bootstrap, либо в командной строке cvs_bootstrap.

Вы можете столкнуться с ошибкой, связанной с неправильной установкой libtoolize. macOS поставляется с libtool как glibtool. Automake (который не входит в состав macOS) не исправляет свои скрипты.

Чтобы исправить эту проблему, выполните команду ln -s libtoolize glibtoolize (например: ln -s libtoolize glibtoolize) в месте установки glibtoolize.

Игрок работает на macOS, но мы не разработали графический интерфейс пользователя для него — есть некоторые проблемы с SDL, которые требуют, чтобы видео было в главном потоке, как в Windows.Сейчас он достаточно хорошо работает для тестирования.

Назад к началу

Выполнимые файлы

Если вы выполнили make install с использованием значений по умолчанию, то все исполняемые файлы MPEG4IP окажутся в /usr/local/bin.

Для серверных (или средств создания контента) инструментов, вы получите:

Инструмент Описание
mp4live Интегрированное живое кодирование в файл или сеть — только для Linux
avi2raw Извлекает сырой аудио/видеопоток из файла AVI
lboxcrop Вертикально обрезает видео до нового соотношения сторон
mp4venc Кодирует сырое видео в MPEG-4 с помощью ISO-кодека — недоступно на всех системах
mp4creator Создает и указывает аудио/видеопотоки в файл MP4. Также может использоваться для извлечения потоков и восстановления заголовков AAC, а также шифрования по спецификации ISMACryp. Он также собирает файлы 3GPP, но не указывает их
xvidenc Кодирует сырое видео в MPEG-4 с помощью кодека Xvid. Недоступно при использовании xvid 1.0

Это подробнее описано в doc/encoding.htm.

Также включены несколько отладочных инструментов:| exec | function | | :----- | :------ | | mp4dump | Утилита для вывода метаданных MP4 файла в текстовом виде | | mp4trackdump | Утилита для вывода информации о дорожках MP4 файла в текстовом виде | | mp4info | Утилита для отображения сводной информации о MP4 файле | | mp4videoinfo | Утилита для вывода информации о видео дорожках MP4 файла | | avidump | Утилита для отображения сводной информации о файле AVI | | yuvdump | Утилита для отображения сырых данных видео файла на экране | | mpeg_ps_info | Утилита для отображения потоков в MPEG программном потоке или файле VOB | | mpeg_ps_extract | Утилита для извлечения базовых потоков из MPEG программного потока или файла VOB |Для воспроизведения вы получаете:

| gmp4player | Простой графический интерфейс проигрывателя | | mp4player | Окно с видео и синхронизированным аудио |

Назад к началу

Примечания к исполняемым файлам

FAAD

У нас нет полной версии FAAD, поэтому автономный декодер faad не будет компилироваться. Версия FAAD начиная с faad2-2.0-rc3 содержит плагин gmp4player — мы рекомендуем скачать и использовать этот плагин. Мы включили последнюю версию кода этого плагина в папку player/plugin/audio/faad2, если у вас возникли проблемы при сборке. Копируйте файлы в директорию faad/plugins/mpeg4ip. Возможно, вам придётся удалить правило rpm в верхнем уровне Makefile, чтобы он смог скомпилироваться.

Назад к началу

Структура каталогов

Если вы собираетесь приступить к модификациям, карта территории может оказаться полезной:

mpeg4ip - верхний уровень проектной директории

config - файлы autoconf

doc - минимальная документация, которую мы написали до сих пор

|-> encoding - как кодировать контент
|-> ietf - копии соответствующих RFC
|-> mcast - как выполнять мультикаст
|-> mp4v2 - справочные страницы для библиотеки mp4v2
|-> programs - справочные страницы для основных программ

include - общие заголовочные файлы проекта

common - общие файлы кода

|-> video
      |--> iso-mpeg4 - развернутая версия директории ISO MPEG-4 видео кодировщика/декодера
```**lib** - общие библиотеки проекта```
|-> SDLAudio - Простой прямой слой среды (модифицированный аудио только)
|-> audio - конвертация форматов аудио
|-> avi - библиотека формата файла AVI
|-> config_file - Утилита конфигурационного файла
|-> gnu
     |--> getopt - процедуры getopt от GNU
|-> ismacryp - API-библиотека для функций ISMACrypt
|-> mp4 - библиотека формата файла MP4 (также известна как MOV/QuickTime)
|-> mp4v2 - новая библиотека MP4, созданная с нуля
     |--> test - содержит некоторые тестовые программы
     |--> util - содержит новые утилиты mp4dump и mp4extract
|-> mpeg2ps - библиотека/утилиты потока программ MPEG
|-> mpeg2t - утилиты потока транспорта MPEG2
|-> msg_queue - утилита межпоточной связи на основе SDL
|-> rtp - UCL RTP
|-> srtp - интерфейс с libSRTP
|-> sdp - наш собственный SDP
|-> win32 - библиотеки, необходимые для MS Windows
```**player** - код специфический для игрока```markdown
|-> lib - библиотеки специально для игрока  
        |--> audio  
              |---> celp - декодер CELP  
              |---> faad - декодер AAC FAAD  
              |---> mp3util - утилиты MP3 для RFC 3119  
              |---> portaudio - библиотека вывода звука для Mac  
        |--> libhttp - наш собственный HTTP-клиент  
        |--> mp4util - библиотека конфигурирования аудиофайлов MP4 и декодирования SDP  
        |--> rtsp - наш собственный RTSP-клиент  
|-> plugin - дом плагинов игрока  
        |--> audio - аудиоплагины  
              |---> a52dec - плагин декодера liba52  
              |---> celp - плагин декодера CELP  
              |---> faad2 - код для аудиоплагина faad2  
              |---> g711 - аудиоплагин G. 711  
              |---> ffmpeg - аудиоплагин FFmpeg  
              |---> raw - сырой аудиоплагин  
        |--> rtp - плагины потокового вещания RTP  
              |---> h261 - плагин RTP H. 261  
              |---> h264 - плагин RTP H. 264  
              |---> isma_audio - плагин формата аудио ISMA  
              |---> isma_href - плагин формата ISMA HREF  
              |---> isma_video - плагин формата видео RTP ISMACrypt  
              |---> rfc2429 - плагин формата видео RTP H. 263 rfc2429  
              |---> rfc3267 - плагин формата аудио RTP AMR  
        |--> text - текстовые плагины  
              |---> href - плагин декодера ISMA href  
              |---> plain - плагин декодера обычного текста  
        |--> video - видеоплагины  
              |---> ffmpeg - видеоплагин FFmpeg  
              |---> raw - сырой видеоплагин  
              |---> mpeg3 - видеоплагин MPEG1/2  
              |---> mpeg2dec - видеоплагин MPEG1/2 libmpeg2  
              |---> xvid - видеоплагин XviD  
              |---> h261 - декодер H. 261  
              |---> mpeg2dec - плагин libmpeg2  
|-> src - исполняемые файлы игрока  
        |--> codec  
              |---> aa - плагин AAC  
              |---> mp3 - плагин MP3  

Внесены небольшие изменения в пунктуацию и согласование слов. |---> mpeg4 - плагин декодера MPEG4 ISO |---> wav - плагин WAV |--> win_common - общие для Windows коды |--> win_client - клиент для Windows |--> win_gui - код GUI для Windows. ```сервер — специфический для сервера код`````` |-> аудио |--> faac - программа кодирования в AAC (устарела) |-> mp4creator - создание и указание дорожек А/В в файле MP4 |-> mp4live - интерфейс прямого кодирования MP4 |--> gui - графический интерфейс пользователя с использованием GTK для прямого кодирования MP4. |-> утилиты |--> avi2raw - извлечение сырой информации А/В из файлов AVI |--> avidump - вывод метаданных AVI |--> lboxcrop - вертикальная обрезка видео |--> mp4encode - скрипт-оболочка для упрощения процесса кодирования |--> rgb2yuv - конвертация RGB в YUV |--> xvidenc - командная строка для Xvid MPEG-4 кодировщика |-> видео |--> H26L - экспериментальный кодировщик видео ITU H.26L TML 9.4


**Утилиты** — общие полезные утилиты

|-> h264 - отображение (некоторых) данных потока H.264 |-> iptv - чтение программ Cisco IP/TV из менеджера контента |-> mpeg2 - вывод информации о кадрах для элементарных потоков MPEG-2 |-> mpeg4vol - отображение мультимедийной информации MPEG-4 VOL |-> yuv - простые средства для анализа сырого видео


[Назад к началу](#top)

<span id="standards"></span>
## Соответствие стандартам

Мы не только сторонники открытого исходного кода, но и сторонники открытых стандартов! Мы стараемся использовать публично определённые стандарты как можно чаще. Вот что мы считаем следуемым за ними. Если вы найдёте что-то неконформное, пожалуйста, сообщите нам. Мы обязательно захотим это исправить.Вот цитаты с исправлениями:

* ISO/IEC 14496-1:2001 MPEG-4 Systems (включает формат файла MP4)
* ISO/IEC 14496-2:2000 MPEG-4 Video
* ISO/IEC 14496-3:1999 MPEG-4 Audio (включает AAC)
* ISO/IEC 14496-10:2004 Advanced Video Codec
* ISO/IEC 14496-12:2004 ISO Base Media File Format
* ISO/IEC 14496-14:2004 MP4 File Format
* ISO/IEC 14496-15:2004 AVC File Format
* ISO/IEC 11172-3:1993 MPEG-1 Audio (включает MP3)
* ISO/IEC 13818-3:1998 MPEG-2 Audio (включает расширения к MP3)
* ISO/IEC 13818-7:1997 MPEG-2 AAC

Документы ISO/IEC должны быть приобретены либо у ISO ([www.iso.ch](http://www.iso.ch)), либо у одного из национальных органов. В США ANSI является представительским органом, и предоставляет интернет-магазин под [www.ansi.org](http://www.ansi.org).

|RFС|Описание|
|:-------|:--------|
| IETF RFC 3550 | RTP (устаревший RFC 1889) |
| IETF RFC 2326 | RTSP |
| IETF RFC 2327 | SDP |
| IETF RFC 2250 | RTP Payload для MPEG-1/2 |
| IETF RFC 3016 | RTP Payload для аудио/видео MPEG-4 <br>Примечание: мы реализуем часть видео MPEG-4 |
| IETF RFC 3119 | Более потерпимый к потере данных RTP Payload для аудио MP3 |
| IETF RFC 3267 | RTP Payload для транспорта и <br>формата хранения файла для адаптивного многоканального аудиокодека AMR и <br>широкополосного многоканального аудиокодека AMR-WB |
| IETF RFC 3551 | Профиль RTP для аудио и видеоконференций с минимальным контролем |
| IETF RFC 3640 | RTP Payload для транспортировки элементарных потоков MPEG-4 <br>Примечание: мы реализуем аудиочасть AAC и CELP |
| IETF RFC 3984 | Формат RTP Payload для видео H.264

Документация IETF RFC доступна в папке doc/ietf или онлайн на сайте [ietf](http://ietf.org/rfc).Формат файла MP4 основан на файловом формате Apple QuickTime. Описание этого формата — Apple Computer QuickTime File Format, 28 июня 2000 года — доступно через сайт [разработчиков QuickTime](http://developer.apple.com/quicktime/).Мы также участвуем в работе [Альянса Интернет-Стриминговых Медиа](http://www.isma.tv) (ISMA), который стремится стандартизировать протоколы и форматы, используемые для стриминга. Мы считаем, что MPEG4IP совместим с техническими спецификациями версий 1.0 и 2.0 этой организации. Для получения более подробной информации см. [http://www.isma.tv](http://www.isma.tv)

[Назад к началу](#top)

<span id="latency"></span>
## Задержка в MPEG4IP

Было достаточно вопросов, чтобы заслужить место в README по поводу задержки в MPEG4IP.

Сначала стоит отметить, что MPEG4IP не предназначен для видеоконференций или реального времени отображения данных. Большинство продуктов для стриминга не предназначены для этого (например, рассмотрите схемы буферизации в Real или QuickTime — QT буферизирует 3 секунды данных, в то время как Real может буферизовать до 30–40 секунд).

Когда вы анализируете задержку в среде стриминга, вам следует обратить внимание на каждый потенциальный источник задержки. В самом простом случае (mp4live к mp4player) есть 5 потенциальных мест, где может возникнуть задержка — в mp4live, в ядре IP передачи, в сети, в ядре IP приема и в проигрывателе.Задержка в `mp4live` минимальна. Нет задержки между моментом кодирования видео кадра с помощью `mpeg4` и моментом его передачи. При использовании `MPEG-2` задержка составляет два кадра для B-кадров. В аудио, кодеки типа `mpeg` обычно требуют двух или трёх кадров для начала генерации выходных данных. (Если используется `AAC`, кадры обычно содержат 1024 образца. `MP3` обычно содержит 1152 образца, но это может меняться в зависимости от частоты дискретизации и скорости передачи. Образцы можно преобразовать в секунды, разделением на частоту дискретизации).Вы можете уменьшить эту задержку, не группируя несколько кадров в одном пакете RTP. Это можно установить с помощью параметра `rtpMaxFramesPerPacket` в конфигурационном файле профиля аудио в `mp4live`. Также можно использовать кодеки G.711 или AMR.

Корневые узлы IP могут иметь некоторую задержку, встроенную в них. Вероятно, эта задержка небольшая, но важно знать, что она существует (проверьте трассировку сниффера вывода DSS, и вы поймете, что имею в виду). Задержка сети также может возникнуть. Конфликты и другие проблемы могут произойти, особенно если сервер и игрок находятся в разных сетях.

Если вы используете потоковый сервер как ретранслятор, задержка будет введена там тоже.

Наконец, у игрока также есть задержка. Для потокового воспроизведения мы обычно буферизируем  Yöntem 2 секунды для каждого потока. Это значение можно изменить, установив переменную `RtpBufferTimeMsec` в файле `.gmp4player_rc` (Windows-пользователям придется изменить реестр для этого). Значение указано в миллисекундах, и его следует установить в ненулевое значение (0 указывает на значение по умолчанию).

[В начало](#top)

<span id="player"></span>
## Информация об игроке

См. [PLAYER_README.html](prm.html) в папке doc.

[В начало](#top)<span id="problems"></span>
## Знаменитые проблемы

* Предварительный просмотр в mp4live с использованием версий xvidcore не работает.
* Предварительные просмотры для mpeg2 с использованием ffmpeg будут выглядеть очень странно — это связано с результатами, полученными с помощью B-кадров.
* Если у вас есть большой файл (более 2 ГБ), который не воспроизводится локально с помощью QuickTime, реконструируйте его с использованием версии 1.0RC3 или более поздней. QuickTime некорректно поддерживает 64-битные атомы времени в mp4-файле.
* Мы не поддерживаем gcc 2.95.3. В этом случае возникает проблема, которая заставляет компилятор считать, что когда long объявлен как int, и time_t также объявлен как int, то `%ld` не является правильным форматом. Вы можете попробовать исправить эту проблему, убрав букву "l", когда получите предупреждение.
* В последней версии спецификации MPEG4 были внесены изменения в заголовки AAC DTS. Это делает предыдущие .aac файлы практически устаревшими. Мы внедрили это изменение в mpeg4ip начиная с версии 0.9.9. Если вам требуется использовать старые .aac файлы, вы можете использовать параметр `--aac-old-file-format` команды mp4creator. Если вам требуется создать новые .aac файлы, используйте команду `mp4creator --aac-old-file-format`, затем извлеките трэк с помощью команды `mp4creator --extract`.
* Если вы проигрываете через NAT-устройство, возможно, вам придется указать стандартные порты клиента IP.Используйте команду `RtpIpPortMin=<порт>` и `RtpIpPortMax=<порт>` в файле конфигурации `.gmp4player_rc`, созданном в вашей домашней директории. IETF рекомендует диапазон от 6970 до 6999.

* Возможность управления скоростью битрейта видео-кодека ISO MPEG-4 повреждена. Нам известно, что существует решение этой проблемы, поэтому мы пытаемся найти его.

* Проигрыватель для Windows работает плохо. Мы включили проектные файлы, которые должны собираться для Dev Studio 6.0. Мы рекомендуем установить DirectX 8.1 или более позднюю версию. Если это невозможно, и у вас возникли проблемы с видео, попробуйте раскомментировать `#define OLD_SURFACE` в файле `player/src/video.cpp`.

* Если у вас возникли проблемы с прерывистым воспроизведением, и вы используете Windows 98, забудьте об этом. Время тиков таймера слишком велико (55 мс), чтобы эффективно использовать его. Попробуйте использовать QuickTime или Real с Envivio, или обновитесь до более новой версии Windows.

* ОС на основе FreeBSD имеют проблему с задержками потока. Это может вызвать пропуск рендеринга многих кадров. Если у вас возникла эта проблема, обновите до самой последней версии FreeBSD — проблема все еще может возникнуть, но она снижается. Это связано с ошибкой в коде планировщика потоков, который вызывает проблему при задержках меньше, чем квантование планировщика потоков (200 мс в некоторых версиях, 20 в других).Среднее задержка используется в размере 9–10 мс (меньше, чем ближе мы подходим к времени отрисовки видео), что может сильно повлиять на воспроизведение видео. 
Вы можете обойти эту ошибку, перестроив свою libc после изменения `THREAD_SCHED_USECS` до 20000 (или ниже) с 200000 в thread_private.h.
* Если вы работаете под Linux и пытаетесь воспроизводить сырое аудиофайлы, и замечаете, что получаете мусор, попробуйте установить конфигурационную переменную `LimitAudioSdlBuffer` равной 1 в файле .gmp4player_rc. Это происходит на звуковой карте Soundblaster Live, машине Red Hat 7.3.
* Как предлагает стандарт RTP (или новый черновик), круговой путь задержки можно приближенно рассчитать на стороне отправителя путём вычитания зафиксированного времени RTCP SR и задержки на стороне клиента из зафиксированного времени соответствующего RTCP RR. То есть:
RRT = Время_RR - Время_SR - Время_задержки_на_клиентской_стороне.
Однако, поскольку библиотека времени выполнения Windows предоставляет только разрешение до 1 миллисекунды (0,001 сек), такие измерения на компьютерах Windows в локальной сети могут быть очень неточными.
Обычный RRT между двумя хостами в локальной сети составляет около 0,5 миллисекунды. Измерения между машинами Linux/Unix не имеют такой проблемы.
* Похоже, что созданный и намеченый нами mpeg аудио не работают корректно с QuickTime при потоковом воспроизведении.Это наиболее вероятно потому, что мы используем динамическое число полезной нагрузки RTP и частоту временной шкалы RTP, которая совпадает с частотой дискретизации. QT, похоже, предпочитает полезную нагрузку RTP 14 и частоту временной шкалы RTP 90000. (Это относится к QT 6.0). Это будет работать с файлами MPEG 1/2, или если вы используете `-timescale=90000` при использовании mp4creator с аудиофайлами MP3. Если вы используете mp4live для потокового воспроизведения аудио, используйте опцию конфигурационного файла `rtpUseMp4RtpPayload14`.

QT и Real не понимают содержимого MPEG 1/2 или MP3 в контейнерном файле .mp4 для локального воспроизведения.

* mp4live не будет работать с одиночным аудиопотоком, который требует вывода из устройства TV-тюнера — мы не будем активировать выход TV-тюнера.

Чтобы сделать это возможным, попробуйте выполнить следующие команды перед запуском mp4live:

v4lctl -c <устройство видеовхода> mute off v4lctl -c <устройство видеовхода> volume 100%


<span id="contrib"></span>

## Участие в проекте

Мы приветствуем все вклады обратно в mpeg4ip. Лучшим способом для этого является отправка электронной почты.Пожалуйста, выполните команду `diff -c -w` для каждого файла, который вы изменили, используя свежий архив tarball, над которым работали, или лучше всего — CVS. Просим вас воздержаться от изменения любых сгенерированных файлов (например, configure, ltmain.sh, любого Makefile или Makefile.in) — вместо этого помогите понять, как изменить скрипты configure.in.

Пожалуйста, учтите, что мы стремимся сохранить этот проект многоплатформенным, поэтому сборка на нескольких платформах очень приветствуется.

Вы можете использовать форумы или рассылку до того, как начнёте работу, чтобы узнать, как выполнить определённый проект.

[Назад к началу](#top)

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/synote-mpeg4ip.git
git@api.gitlife.ru:oschina-mirror/synote-mpeg4ip.git
oschina-mirror
synote-mpeg4ip
synote-mpeg4ip
master