Tải bản đầy đủ (.pdf) (6 trang)

Tích hợp khả năng truyền tải video vào ứng dụng C/C++ doc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (253.12 KB, 6 trang )

Tích hợp khả năng truyền tải video vào ứng
dụng C/C++
Trong bài viết dưới đây, chúng tôi sẽ giới thiệu với các bạn một số đặc tính
của mô hình hệ thống Nex Gen Media Server - NGMS và nền tảng
framework API đi kèm. Về mặt kỹ thuật, NGMS có thể được xem là 1 trong
những hệ thống server xử lý và truyền tải media với nhiều mục đích khác
nhau, hỗ trợ nhiều giao thức phổ biến hiện nay như RTSP, RTMP, HTTP
Live của Apple hoặc MPEG-2 Transport Stream. Bên cạnh đó, NGMS còn đi
kèm với khả năng mã hóa, chuyển đổi định dạng các luồng dữ liệu Live Video,
qua đó các thiết bị thu phát phổ biến ngày nay như HD Player, hoặc điện thoại
iPhone có thể nhận được qua sóng 3G. Và tại bài thử nghiệm này, Quản Trị Mạng
sẽ chủ yếu tập trung vào quá trình tích hợp hàm API để NGMS để giám sát, điều
khiển chức năng truyền tải dữ liệu từ ứng dụng viết bằng ngôn ngữ lập trình C trên
nền tảng Ubuntu Linux 10.04.
Việc trước tiên các bạn cần làm là download và tham khảo thông tin hướng dẫn cơ
bản - NGMS User Guide tại đây, và một số thiết lập liên quan tới API tại đây. Chú
ý rằng các bạn hãy download Package NGMS cài đặt dành cho Linux (trong bài
thử nghiệm này là phiên bản NGMS v1.3.4), sau đó giải nén gói này vào thư mục
tùy chọn trên phân vùng (tại đây là ~/ngmsStreaming).
Các bước thiết lập cơ bản:
Để tích hợp NGMS trực tiếp vào bất kỳ ứng dụng C nào, thì yếu tố quan trọng
nhất là phải gán được ngms/include/ngmslib.h vào trong mã nguồn. Do vậy, khi
bắt tay vào việc xây dựng chương trình thì các bạn nên chuẩn bị sẵn thư viện
ngms/lib/libngms.so và ngms/lib/libxcode.so. Trên thực tế thì libngms.so lại phụ
thuộc vào libcrypto.so.
Ví dụ, file makefile:
#Example Makefile

CC=gcc

CFLAGS=-ggdb



INCLUDES+= -I ngms/include

LDFLAGS+= -L ngms/lib -lngms -xlcode -crypto

all: myapp

%.o: %.c

$(CC) $(CFLAGS) $(INCLUDES) -o $@ -c $<

myapp: myapp.o

$(CC) -fpic -o myapp myapp.o $(LDFLAGS)
Và đây là mã nguồn của myapp.c:
/**

*

* Example myapp application

*

*/


typedef unsigned int uint32_t;

typedef unsigned long long uint64_t;


#include <stdio.h>

#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 failed\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 failed\n");

}


ngmslib_close(&ngmsConfig);


return 0;

}
Các đoạn mã nguồn trên sử dụng cấu trúc NGMSLIB_STREAM_PARAMS_T
để can thiệp và điều khiển thư viện ngms, yếu tố cần hoàn tất trước tiên chính là
thủ tục gọi chức năng ngmslib_open. Sau đó tiếp tục xây dựng các hệ thống tùy
chọn để giám sát hoạt động của NGMS, và cuối cùng là sử dụng ngmslib_stream
để tạo file video output.
Sau khi hoàn tất, chúng ta đã có thể sử dụng VLC Player để mở và xem video theo
tùy chọn:
VLC Player -> Open Network rtp://@:5004
Tại đây, chức năng gọi hàm ngmslib_stream được coi là toán tử ngăn chặn, và
nếu muốn làm gián đoạn quá trình truyền tải thì các bạn có thể gọi ngmslib_close
từ thread khác và việc gọi hàm ngmslib_stream sẽ kết thúc. Ví dụ tại đây, chúng
ta sẽ thêm một số chức năng hỗ trợ đối với dữ liệu video Flash nhúng bằng cách
gán thêm những dòng mã dưới đây:
ngmsConfig.rtmplive = "1935";
ngmsConfig.live = "8080";

Sau đó, mở trình duyệt và gõ đường dẫn: http://127.0.0.1:8080/live, kết quả trả về
từ hệ thống sẽ là trang web với video Flash đang được trình chiếu.
Mặt khác, thay vì việc trình chiếu 1 file video Flash bất kỳ nào đó thì người sử
dụng vẫn có thể thay đổi nguồn input của Live Video. Trong ví dụ này, tác giả tạo
ra 2 ví dụ thay vì ứng dụng chính, trong đó 1 ví dụ sẽ trích xuất file video qua
cổng 5006, phần còn lại sẽ giám sát dữ liệu video trên cổng 5006 này, và sau đó
dẫn trở lại cổng 5004:
//ngmsConfig.inputs[0] = "mediaTestFile.mp4";
ngmsConfig.inputs[0] = "rtp://127.0.0.1:5006";
ngmsConfig.strfilters[0] = "type=m2t";
Trên đây là một số ví dụ khá cơ bản để tích hợp chức năng truyền tải video vào
ứng dụng dựa trên mã nguồn C. Còn với ngôn ngữ C++, các bạn có thể bao quát
tất cả các chức năng gọi hàm tới thư viện ngmslib bằng cách sử dụng từ khóa C.
Bên cạnh đó, chúng ta còn có thể áp dụng tương tự với Java, nhưng để làm được
như vậy thì hệ thống yêu cầu chức năng interface JNI để quản lý từng câu lệnh
gọi hàm tới NGMS. Chúc các bạn thành công!

×