简介
最近,我仔细研究了 Nex Gen Media Server (NGMS) 及其 API 框架。 NGMS 是一种多功能流媒体服务器,支持一些流行的流媒体协议,例如 RTSP、RTMP、Apple 的 HTTP Live 和 MPEG-2 传输流。 NGMS 带有转码支持,能够捕获和重新格式化实时视频流,并将它们适配为另一种类型的设备接收,例如捕获高清视频源并将其转换为 3g 以上的 iPhone 接收。我的重点是集成 NGMS API 以直接从我自己的 C 应用程序控制流功能。在此示例中,我使用的是 Ubuntu Linux 10.04。
首先是下载并阅读 NGMS 用户指南和 Nex Gen 媒体服务器 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,需要在linker options中指定。
这是我正在使用的简单生成文件:
#Example Makefile
CC=gcc
CFLAGS=-ggdb
包含+ = -I ngms/include
LDFLAGS += -L ngms/lib -lngms -xlcode -crypto
all:myapp
%.o:%.c< br /> $(CC)$(CFLAGS)$(include) -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
#include "ngmslib.h"
int main(int argc, char *argv[]){< br /> NGMSLIB_STREAM_PARAMS_T ngmsConfig;
NGMS_RC_T 返回代码;
returnCode = ngmslib_open(&ngmsConfig);
if (NGMS_RC_OK != returnCode) {
fprintf(stderr, "ngmslib_open failed n");
返回-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);
返回 0;
}
上面的代码使用NGMSLIB_STREAM_PARAMS_T结构类型来控制ngms库。需要做的第一件事是调用 ngmslib_open 来“预设”结构。之后,您可以在结构中填写任何选项来控制 NGMS 的工作。然后你可以“ngmslib_stream”来创建输出视频。
我可以在 VLC 播放器中打开流并播放视频。
VLC Player->Open Network rtp://@:5004
中提琴!就这么简单!现在我可以直接从应用程序流式传输媒体文件了!
由于 ngmslib_stream 函数调用是阻塞操作,要中断流,我可以从另一个线程调用 ngmslib_close,ngmslib_stream 调用将退出。
通过添加以下代码行,我能够添加对嵌入式 Flash Player 的支持。
ngmsConfig.rtmplive = "1935";
ngmsConfig.live = "8080";
使用浏览器连接到localhost:8080/live 然后返回到Flash Player播放视频的页面。
我可以将输入更改为实时视频流,而不是播放文件。我可以为应用程序创建两个单独的实例。一个实例将视频输出到端口 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””关键字包装对 ngmslib 的所有调用。您也可以在 Java 中执行此操作,但它需要构建一个 JNI 接口来包装对 NGMS 的每个调用。
< p>这是一个非常简单的示例,在不久的将来,我将展示如何使用 NGMS 库构建您自己的视频流客户端。