Usando a API Nex Gen Media Server (NGMS) para integrar streaming de vídeo em seu próprio aplicativo C / C ++

Introdução

Recentemente, dei uma olhada mais de perto no Nex Gen Media Server (NGMS) e sua estrutura de API. O NGMS é um servidor de streaming multifuncional que oferece suporte a alguns dos protocolos de streaming populares, como RTSP, RTMP, HTTP Live da Apple e MPEG-2 Transport Stream. O NGMS vem com suporte para transcodificação e é capaz de capturar e reformatar streams de vídeo ao vivo e adaptá-los para serem recebidos por outro tipo de dispositivo, como capturar um feed de vídeo HD e convertê-lo para ser recebido por um iPhone acima de 3g. Meu foco era integrar a API NGMS para controlar os recursos de streaming diretamente do meu próprio aplicativo C. Neste exemplo, estou usando o Ubuntu Linux 10.04.

A primeira coisa é baixar e ler o Guia do usuário do NGMS e o guia de referência da API para o Nex Gen Media Server. (Esses links estão localizados na parte inferior do artigo). Existem muitas opções de configuração, mas nos limitaremos ao básico. Então você precisa baixar o pacote NGMS para linux. A versão que usei foi o NGMS v1.3.4. Depois de baixar o pacote, basta descompactar o conteúdo em um diretório de sua escolha. Eu usei ~ / ngmsStreaming

Configurando o aplicativo.

Para integrar o NGMS diretamente em meu aplicativo C, tive que incluir “ngms / include / ngmslib.h” em meu código.

Ao construir meu aplicativo, tive que incluir as bibliotecas ngms / lib / libngms.so e ngms / lib / libxcode.so. Parece que libngms.so também depende de libcrypto.so, que precisa ser especificado nas opções do vinculador.

Aqui está o makefile simples que estou usando:

#Example Makefile

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

todos: myapp

% .o:% .c
$ (CC) $ (CFLAGS) $ (INCLUI) -o $ @ -c $ <

myapp: myapp.o
$ (CC) -fpic -o myapp myapp.o $ (LDFLAGS)

Aqui está a fonte para myapp.c.

/ **
*
* Exemplo de aplicativo myapp
*
* /

typedef unsigned int uint32_t;
typedef unsigned long long uint64_t;
#incluir


#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 falhou 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 falhou n”);
}

ngmslib_close (& ngmsConfig);

return 0;
}

O código acima usa o tipo de estrutura NGMSLIB_STREAM_PARAMS_T para controlar a biblioteca ngms. A primeira coisa que precisa ser feita é uma chamada para ngmslib_open para “predefinir” a estrutura. Depois disso, você pode preencher qualquer uma das opções na estrutura para controlar o que o NGMS fará. Então você pode “ngmslib_stream” para criar o vídeo de saída.

Consigo abrir o stream no player VLC e reproduzir o vídeo.

VLC Player -> Abrir Rede rtp: // @: 5004

Viola! Foi tão fácil !!! Agora posso transmitir um arquivo de mídia diretamente do meu aplicativo!

Como a chamada de função ngmslib_stream é uma operação de bloqueio, para interromper o fluxo, posso chamar ngmslib_close de outro segmento e a chamada ngmslib_stream será encerrada.

Consegui adicionar suporte para um Flash player incorporado adicionando as seguintes linhas de código.

ngmsConfig.rtmplive = “1935”;
ngmsConfig.live = “8080”;

Com meu navegador eu conecto localhost: 8080 / live e eu volto uma página com o flash player reproduzindo o vídeo.

Em vez de reproduzir um arquivo, posso alterar a entrada para um stream de vídeo ao vivo. Posso criar duas instâncias separadas do meu aplicativo. Uma instância fará a saída do vídeo para a porta 5006. A outra instância irá capturar o vídeo na porta 5006 e enviá-lo para a porta 5004. Isso é tudo o que você precisa fazer.

//ngmsConfig.inputs[0] = “mediaTestFile.mp4”;
ngmsConfig.inputs[0] = “rtp: //127.0.0.1: 5006”;
ngmsConfig.strfilters[0] = “tipo = m2t”;

Conclusão

Esses poucos exemplos mostram que é muito fácil adicionar suporte a streaming de vídeo em seu próprio aplicativo. Eu usei C aqui. Se seu aplicativo for C ++, você pode agrupar todas as chamadas para ngmslib usando a palavra-chave “extern” C “”. Você também poderia fazer isso em Java, mas seria necessário construir uma interface JNI para envolver cada uma das chamadas para NGMS.

Este foi um exemplo bastante simples. Em um futuro próximo, examinarei como a biblioteca NGMS pode ser usada para construir seu próprio cliente de streaming de vídeo.



Source by Hung B Nguyen

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *