使用Nex Gen媒体服务器(NGMS)API将视频流集成到您自己的C / C ++应用中

介绍

最近,我仔细研究了Nex Gen媒体服务器(NGMS)及其API框架。 NGMS是一种多功能流服务器,它支持一些流行的流协议,例如RTSP,RTMP,Apple的HTTP Live和MPEG-2 Transport Stream。 NGMS带有转码支持,能够捕获和重新格式化实时视频流,并使它们适应另一种类型的设备所接收的内容,例如捕获高清视频源并将其转换为3g以上的iPhone所接收。我的重点是集成NGMS API以直接从我自己的C应用程序控制流功能。在此示例中,我使用的是Ubuntu Linux 10.04。

首先是下载并阅读NGMS用户指南和Nex Gen Media Server的API参考指南。 (这些链接位于文章的底部)那里有许多配置选项,但我们只会坚持基础知识。然后,您需要下载适用于Linux的NGMS软件包。我使用的版本是NGMS v1.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
包含+ = -I ngms /包含
LDFLAGS + = -L ngms / lib -lngms -xlcode -crypto

全部:myapp

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

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

这是myapp.c的源代码。

/ **
*
*示例myapp应用程序
*
* /

typedef unsigned int uint32_t;
typedef unsigned long long uint64_t;
#包括
#include“ ngmslib.h”

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

returnCode = ngmslib_open(&ngmsConfig);
如果(NGMS_RC_OK!= returnCode){
fprintf(stderr,“ ngmslib_open失败 n”);
返回-1;
}

ngmsConfig.inputs [0] =“ mediaTestFile.mp4”;
ngmsConfig.output =“ rtp://127.0.0.1:5004”;

returnCode = ngmslib_stream(&ngmsConfig);
如果(NGMS_RC_OK!= returnCode){
fprintf(stderr,“ ngmslib_open失败 n”);
}

ngmslib_close(&ngmsConfig);

返回0;
}

上面的代码使用NGMSLIB_STREAM_PARAMS_T结构类型来控制ngms库。首先需要做的是调用ngmslib_open以“预设”结构。之后,您可以填写结构中的任何选项来控制NGMS的工作。然后,您可以“ ngmslib_stream”创建输出视频。

我能够在VLC播放器中打开流并播放视频。

VLC Player->打开网络rtp:// @:5004

中提琴!就是这么简单!现在,我可以直接从应用程序中流式传输媒体文件!

由于ngmslib_stream函数调用是一项阻塞操作,因此要中断流,我可以从另一个线程调用ngmslib_close,并且ngmslib_stream调用将退出。

通过添加以下代码行,我能够添加对嵌入式Flash Player的支持。

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

使用浏览器连接 本地主机:8080 /现场 然后返回带有Flash Player播放视频的页面。

除了播放文件,我还可以将输入更改为实时视频流。我可以为应用程序创建两个单独的实例。一个实例将视频输出到端口5006。另一实例将视频捕获到端口5006,并将其输出到端口5004。这是您要做的全部。

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

结论

这几个例子表明,将视频流支持添加到您自己的应用程序中非常容易。我在这里用过C。如果您的应用程序是C ++,则可以使用“ extern” C“”关键字包装对ngmslib的所有调用。您也可以使用Java来完成此操作,但它需要构建JNI接口以将每个调用包装到NGMS。

这是一个非常简单的示例。在不久的将来,我将介绍如何使用NGMS库来构建自己的视频流客户端。

相关文章