使用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庫來構建自己的視頻流客戶端。

相關文章