在现代的多媒体应用中,流媒体技术扮演着越来越重要的角色。流媒体服务器能够支持多种流行的流媒体协议,如RTSP、RTMP、Apple的HTTP Live以及MPEG-2传输流等。本文将介绍如何将一个多用途的流媒体服务器(NGMS)集成到C程序中,实现对流媒体的控制和管理。
首先,需要下载并阅读NGMS的用户手册和API参考指南,这些文档可以从官方网站获取。下载Linux版本的NGMS软件包,并解压到合适的目录。例如,可以将其放在用户目录下的~/ngmsStreaming
文件夹中。
为了将NGMS直接集成到C应用程序中,需要在代码中包含"ngms/include/ngmslib.h"
。在构建应用程序时,需要链接到ngms/lib/libngms.so
和ngms/lib/libxcode.so
库。注意,libngms.so
依赖于libcrypto.so
,这需要在链接选项中指定。
以下是一个简单的Makefile示例:
CC=gcc
CFLAGS=-ggdb
INCLUDES+= -I ngms/include
LDFLAGS+= -L ngms/lib -lngms -lxcode -lcrypto
all: myapp
%.o: %.c
$(CC) $(CFLAGS) $(INCLUDES) -o $@ -c $<
myapp: myapp.o
$(CC) -fpic -o myapp myapp.o $(LDFLAGS)
以下是示例应用程序myapp.c
的源代码:
typedef unsigned int uint32_t;
typedef unsigned long long uint64_t;
#include
上述代码使用了NGMSLIB_STREAM_PARAMS_T
结构体来控制NGMS库。首先,需要调用ngmslib_open
函数来预设结构体。然后,可以填充结构体中的选项来控制NGMS的行为。最后,调用ngmslib_stream
函数来创建输出视频。
使用VLC播放器可以打开网络流rtp://127.0.0.1:5004
并播放视频。这样,就可以直接从应用程序中流式传输媒体文件了。
由于ngmslib_stream
函数是一个阻塞操作,可以通过从另一个线程调用ngmslib_close
来中断流。
为了支持嵌入式Flash播放器,可以在代码中添加以下两行:
ngmsConfig.rtmplive = "1935";
ngmsConfig.live = "8080";
然后,通过浏览器访问http://127.0.0.1:8080/live
,可以看到一个带有Flash播放器的页面正在播放视频。
除了播放文件,还可以将输入更改为实时视频流。可以创建两个应用程序实例:一个实例将视频输出到端口5006,另一个实例在端口5006捕获视频,并将其输出到端口5004。