Интеграция потокового видео в C/C++ приложение с помощью Nex Gen Media Server Api
Вступление
NGMS — многофункциональный потоковый сервер, поддерживающий большинство популярных потоковых протоколов, — таких, как RTSP, RTMP, Apple's HTTP Live и MPEG-2 Transport Stream. У NGMS есть возможность перекодирования, а также захвата и форматирования прямых видео-потоков и их адаптация для получения устройствами другого типа. Например, захват видео высокого разрешения с последующим преобразованием и передачей на iPhone через 3g. Мы сосредоточимся на интеграции NGMS API для управления возможностями потока прямо из собственного приложения на C. В этом примере использована Ubuntu Linux 10.04.
Сперва следует прочитать руководство пользователя: http://ngmsvid.com/ngms.php и документацию по API: http://ngmsvid.com/develop.php. Существует большое множество опций настройки, мы же остановимся на основных. Теперь вам требуется скачать пакет NGMS для Linux. В примере ниже использована версия 1.3.4. После загрузки пакета, просто разархивируйте его содержимое в любую директорию. В примере использована ~/ngmsStreaming.
Настройка приложения
Чтобы внедрить NGMS непосредственно в приложении на C, требуется включить в код заголовок ngms/include/ngmslib.h.
При компановке приложения, необходимо включить библиотеки ngms/lib/libngms.so и ngms/lib/libxcode.so. Видно, что libngms.so также зависит от libcrypto.so, которую и нужно указать в опциях компановщика.
Вот простой makefile, использованный в данном примере:
Данный код использует структуру NGMSLIB_STREAM_PARAMS_T для управления библиотекой ngms. Сначала вызывается функция ngmslib_open для «предустановки» данной структуры. Далее вы можете заполнять любое из её полей для управления NGMS. Затем вызывается ngmslib_stream для создания выходного видео.
Теперь можно открыть поток в VLC плеере и воспроизвести видео:
VLC Player -> Open Network rtp://@:5004
Таким простым образом, медиа-поток проигрывается прямо из приложения.
Чтобы прервать поток, в коде вызвана функция ngmslib_close из другого потока. После этого ngmslib_stream закончит свою работу.
Также можно добавить поддержку встроенного Flash-плеера, вставив всего несколько строк:
Теперь, открыв в браузере http://127.0.0.1:8080/live, отобразится страница с Flash-плеером, проигрывающим видео.
Вместо проигрывания файла видео, можно встроить и прямой видео-поток. Создадим два отдельных экземпляра приложения. Один будет отдавать видео на порт 5006, а другой будет захватывать видео с порта 5006 и выводить его на порт 5004. Все, что требуется поменять, это лишь:
Эти небольшие примеры демонстрируют, насколько легко добавить видео-поток в ваше собственное приложение. В данных примерах использован язык C. Если ваше приложение написано на C++, вы можете использовать ключевое слово "extern "C" ". Для использования данной библиотеки в Java-приложении, потребуется построение JNI-интерфейса для всех вызовов функций.