NetSago
Вход
Войти

Как присоединиться?
Меню
Главная
События
 Заметки
Статьи
Теги
Поиск
О Проекте
Ссылки
Наше
RSS События по RSS
RSS Заметки по RSS
netsago NetSago
Популярное
Руководство по получению прибыли от Свободных и Открытых Проектов by Джон Эндрюс

Восстановление удаленных текстовых файлов в ФС ext3 by scamelscrud

Заметки — Интеграция потокового видео в C/C++ приложение с помощью Nex Gen...
Назад в Заметки

Интеграция потокового видео в C/C++ приложение с помощью Nex Gen...
n0xi0uzz



Теги: cpp video streaming


Интеграция потокового видео в 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, использованный в данном примере:
#Example Makefile

CC=gcc
CFLAGS=-ggdb
INCLUDES+= -I ngms/include
LDFLAGS+= -L ngms/lib -lngms -xlcode -crypto

all: myapp

%.o: %.c
        $(CC) $(CFLAGS) $(INCLUDES) -o $@ -c $<
myapp: myapp.o
        $(CC) -fpic -o myapp myapp.o  $(LDFLAGS)

Исходный код myapp.c:
/*
 * Example myapp application
 */

typedef unsigned int uint32_t;
typedef unsigned long long uint64_t;
#include 
#include "ngmslib.h"


int main(int argc, char *argv[]) {
    NGMSLIB_STREAM_PARAMS_T ngmsConfig;
    NGMS_RC_T returnCode;

        

returnCode = ngmslib_open(&ngmsConfig); if(NGMS_RC_OK != returnCode) { fprintf(stderr, "ngmslib_open failed\n"); return -1; } ngmsConfig.inputs[0] = "mediaTestFile.mp4"; ngmsConfig.output = "rtp://127.0.0.1:5004"; returnCode = ngmslib_stream(&ngmsConfig); if(NGMS_RC_OK != returnCode) { fprintf(stderr, "ngmslib_open failed\n"); } ngmslib_close(&ngmsConfig); return 0; }

Данный код использует структуру NGMSLIB_STREAM_PARAMS_T для управления библиотекой ngms. Сначала вызывается функция ngmslib_open для «предустановки» данной структуры. Далее вы можете заполнять любое из её полей для управления NGMS. Затем вызывается ngmslib_stream для создания выходного видео.

Теперь можно открыть поток в VLC плеере и воспроизвести видео:
VLC Player -> Open Network rtp://@:5004

Таким простым образом, медиа-поток проигрывается прямо из приложения.

Чтобы прервать поток, в коде вызвана функция ngmslib_close из другого потока. После этого ngmslib_stream закончит свою работу.

Также можно добавить поддержку встроенного Flash-плеера, вставив всего несколько строк:
    ngmsConfig.rtmplive = "1935";
    ngmsConfig.live = "8080";

Теперь, открыв в браузере http://127.0.0.1:8080/live, отобразится страница с Flash-плеером, проигрывающим видео.

Вместо проигрывания файла видео, можно встроить и прямой видео-поток. Создадим два отдельных экземпляра приложения. Один будет отдавать видео на порт 5006, а другой будет захватывать видео с порта 5006 и выводить его на порт 5004. Все, что требуется поменять, это лишь:
 //ngmsConfig.inputs[0] = "mediaTestFile.mp4";
    ngmsConfig.inputs[0] = "rtp://127.0.0.1:5006";
    ngmsConfig.strfilters[0] = "type=m2t";


Заключение


Эти небольшие примеры демонстрируют, насколько легко добавить видео-поток в ваше собственное приложение. В данных примерах использован язык C. Если ваше приложение написано на C++, вы можете использовать ключевое слово "extern "C" ". Для использования данной библиотеки в Java-приложении, потребуется построение JNI-интерфейса для всех вызовов функций.
Язык
English/Английский
Поиск
Расширенный Поиск
Ошиблись?
Если вы обнаружили ошибку на сайте, пожалуйста, сообщите нам о ней.
Посчитали
23 / 1088
К нам сегодня зашли 264 робота. Они хотят убить всех человеков.

Зарегистрированных пользователей: 0
Онлайн: 0

Время генерации: 0.001 с
NetSago.v2.β © [2006;∞)  Neunica