Tải bản đầy đủ - 0 (trang)
CHƯƠNG 4. CÀI ĐẶT VÀ THỬC NGHIỆM CHƯƠNG TRÌNH

CHƯƠNG 4. CÀI ĐẶT VÀ THỬC NGHIỆM CHƯƠNG TRÌNH

Tải bản đầy đủ - 0trang

"name": "static",

"description": "",

"main": "index.html",

"authors": [

"tuandao"

],

"license": "MIT",

"homepage": "",

"private": true,

"dependencies": {

"jquery": "^3.3.1",

"draggabilly": "^2.2.0",

"kurento-utils": "^6.7.0"

}

}

Một số thư viện ta sử dụng được liệt kê trong bảng sau:

Bảng 4.1 Danh sách cách thư viện được sử dụng ở trình duyệt

Thư viện



JQuery













Draggabilly













Kurento-utils











Mơ tả

Là một thư viện được xây dựng từ javascript nhằm giúp lập

trình viên xây dựng các chức năng có sử dụng javascript trở lên

dễ dàng hơn.

Phiên bản: sử dụng phiên bản hơn 3.3.1.

Cài đặt: bower install jquery --save (ở đây save có nghĩa chỉ

lưu vào project).

Thư viện được xử dụng trong chương trình nhằm muc đích di

chuyển video.

Phiên bản: 2.2.0.

Cài đặt: bower install draggabilly –save.

Nguồn: https://github.com/desandro/draggabilly

Là bộ thư viện do kurento đưa ra nhằm đơn giản hóa việt phát

triển ứng dụng WebRTC.

Phiên bản: 6.7.0.

Cài đặt: bower install kurento-utils –save.

Nguồn: https://github.com/Kurento/kurento-utils-js



4.1.2. Các công cụ và thư viện được sử dụng trong phần Signaling



55



Phần này được thực hiện sử dụng npm để khởi tạo các thư viện.Các dependency được

mơ tả vá đóng gói lại trong file package.json.Dưới đây là mô tả của file package.json trong

signaling.

{

"name": "one-to-one-call-api-gateway",

"version": "1.0.0",

"description": "one to one call use api-gateway",

"main": "index.js",

"scripts": {

"test": "echo \"Error: no test specified\" && exit 1"

},

"author": "tuandao",

"license": "ISC",

"dependencies": {

"express": "^4.16.3",

"jayson": "^2.1.0",

"socket.io": "^2.1.1",

}

}

Một số thư viện được sử dụng liệt kê ở bảng dưới:

Bảng 4.2 Danh sách cách thư viện được sử dụng trong signaling

Thư viện







Express









Jayson













Socket.io











Mơ tả

Là một framework chuyên cho ứng dụng web, cung cấp nhiều

tính năng mạnh mẽ trên ứng dụng web.Express hỗ trợ các

phương thức HTTP và middleware tạo ra môt API rất mạnh mẽ

và sử dụng dễ dàng.Trong phạm vi chương trình, express được

sử dụng để thiết lập một web server.

Phiên bản: 4.16.3

Cài đặt: npm install express –save

Nguồn: https://github.com/expressjs/express

Là một JSON-RPC 2.0 và 1.0 được viết bằng javascript cho

node.js nhằm mục đích sử dụng đơn giản hóa nhất của thể. Ở

signaling, sử dụng thư viện jayson ở đây như là client.

Phiên bản: 2.1.0

Cài đắt: npm install jayson –save

Nguồn: https://github.com/tedeh/jayson

Cung cấp real-time tương tác hai chiều giữa client và

server.Trong chương trình được sử dụng để trao đổi các tin nhắn

giữa client và signaling.

Phiển bản: 2.1.1

Cài đặt: npm install socket.io –save

Nguồn: https://github.com/socketio/socket.io



56



4.1.3. Công cụ và thư viện được sử dụng trên API GATEWAY

Tương tự như ở signaling, phần này cũng sử dụng npm để khởi tạo thư viện.Dưới đây là mô tả

của file package.json:

{

"name": "api-gate-way-server",

"version": "1.0.0",

"description": "",

"main": "api-gate-way.js",

"scripts": {

"test": "echo \"Error: no test specified\" && exit 1"

},

"author": "tuandao",

"license": "ISC",

"dependencies": {

"jayson": "^2.1.0",

"kurento-jsonrpc": "^5.1.4",

"socket.io-client": "^2.1.1"

}

}

Một số thư viện được sử dụng liệt kê ở bảng dưới:

Bảng 4.3 Danh sách các thư viện được sử dụng trong API GATEWAY

Thư viện

Jayson



Kurento-jsonrpc



Socket.io-client



Mô tả

Như giới thiệu ở trên,đây là một JSON-RPC được viết bằng

javascript.Ở phần này được sử dụng như là server.

• Đây là một thư viện do kurento cung cấp được viết bằng

javascript hỗ trợ JSON-RPC.Với thư viện này ta có thể đơn giản

hóa q trình tạo ra các kurento protocol để tương tác với KMS.

• Phiên bản: 5.1.4

• Cài đặt: npm install kurento-jsonrpc –save

• Nguồn: https://github.com/Kurento/kurento-jsonrpc-js

• Cũng là một real-time tương tác client-server.Trong chương

trình này, nó được sử dụng để gửi trả lại từ API GATEWAY tới

Signaling.

• Phiên bản: 2.1.1

• Cài đặt: npm install socket.io-client –save

• Nguồn: https://github.com/socketio/socket.io-client



57



4.2. Cài đặt hệ thống

4.2.1. Cài đặt Kurento Media Server

Kurento Media Server được cấp phát miễn phí tại : https://github.com/Kurento/kurentomedia-server

Kurento Media Server hỗ trợ 2 phiên bản của Ubuntu bản 64-bits là: Ubuntu 14.04

( Trusty ) và Ubuntu 16.04 (Xenial ).

Các bước khỏi tạo KMS:

Bước 1: Định nghĩa phiên bản của Ubuntu sử dụng. Mở một terminal và thực hiện một trong

các theo lệnh sau:

#KMS cho phiên bản 14.04

DISTRO=”trusty”

#KM3S cho phiên bản 16.04

DISTRO=”xenial”

Bước 2:Thêm kho lưu trũ kurento vào file cấu hình hệ thống.Thực hiện tuần tự hai lệnh sau:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 5AFA7A83

sudo tee "/etc/apt/sources.list.d/kurento.list" >/dev/null <
# Kurento Media Server - Release packages

deb [arch=amd64] http://ubuntu.openvidu.io/6.8.1 $DISTRO kms6

EOF

Bước 3: Khởi tạo KMS:

sudo apt-get update

sudo apt-get install kurento-media-server

Khi đã khởi tạo xong KMS, để bắt đầu nó ta có thể theo lệnh sau:

sudo service kurento-media-server start

Cuối cùng để ngừng KMS ta thực hiện:

sudo service kurento-media-server stop

Sau khi đã hoàn tất việc khơi tạo KMS, để hỗ trợ cho quá trình vượt NAT, ta cần cài đặt

STUN và TURN server vào file cấu hình của KMS.

Để thiết lập STUN server vào trong KMS, ta cần bỏ ghi chú ở dòng bên dưới ở file

/etc/kurento/modules/kurento/WebRtcEndpoint.conf.ini và điền thông số tương ứng.

stunServerAddress=

stunServerPort=



58



Tương tự như thế, để thiết lập TURN server trong KMS, ta cũng cần bỏ ghi chú và thông tin

của TURN server tại cùng file đó:

turnURL=:@:

Một chú ý là có thể dễ dàng trong việc tìm STUN server bởi vì nó chỉ thực hiện chức

năng đơn giản là gửi trả lại địa chỉ cho peer trong khi đó TURN server phải xử lý dữ liệu

media vì vậy sẽ tốn chi phí hơn dẫn tới khó có được hơn.Có thể sử dụng một số cách như là

sử dụng một mã nguồn mở như Coturn hoặc một số STUN/TURN server có sẵn.

Coturn: https://github.com/coturn/coturn

Một số STUN/TURN server có sẵn: https://gist.github.com/yetithefoot/7592580



4.2.2. Khai triển các server

Chương trình sử dụng sử dụng hai dịch vụ điện toán đám mây để khai triển các server

là Heroku và Google Cloud Platform.Chi tiết về q trình thực hiện được mơ tả ở bên dưới.

Khai triển Signaling Server lên heroku

Heroku cung cấp dịch vụ máy chủ trong việc khai triển ứng dụng. Điều đặc biệt ở

heroku là có thể sử dụng dịch vụ hồn tồn miễn phí với các ứng dụng web khơng u cầu tốc

độ truy cập cao hay dung lượng lớn. Để khai triển ứng dụng lên heroku ta cần thực hiện như

sau:

Bước 1:Tạo tài khoản heroku

Bước 2:Khỏi tạo Heroku Command Line Interface (CLI)

sudo snap install heroku –classic

Bước 3: Sử dụng cách lệnh Heroku Command Line Interface vừa cài đặt để login

Heroku login

#ngay do nhap vao tai khoan heroku vua dang ki

Email: user@example.com

Password:

Buớc 4:Thưc hiện một số lệnh git cơ bản để khai trên lên heroku server:

git init

git add –all

git commit –m “message”

heroku create #tạo ứng dụng trên heroku và nhận source code

git push heroku master #deploy ứng dụng lên heroku

Sau khi khai triển xong ứng dụng ta có tên miền dạng: user.herokuapp.com .

Để xem log của ứng dụng ta có thể dùng lệnh: heroku logs –tail .



59



Khai triển API GATEWAY và KMS nên Google Cloud Platform

Google Cloud Platform (GCP) là một bộ các dịch vụ điện tốn đám mây cơng cộng

được cung cấp bởi Google. Nền tảng này bao gồm một loạt các dịch vụ được lưu trữ để tính

tốn, lưu trữ và phát triển ứng dụng chạy trên phần cứng của Google. Các dịch vụ Google

Cloud Platform có thể được truy cập bởi các nhà phát triển phần mềm, quản trị viên đám mây,

các chuyên gia CNTT doanh nghiệp và các nhà phát triền website qua mạng internet công

cộng hoặc thông qua kết nối mạng dành riêng.

Một điều đặc biệt của GCP là cho phép ta sử dụng miễn phí có giới hạn trong vòng 12

tháng(300$ trong 12 tháng). Để tạo server trên GCP đầu tiên trên Dashboard của GCP vào

Computer -> VM Instance.

Sau đó ta bắt đầu vào giao diện cấu hình, có một số thơng số cần quan tâm là:

• Name: Là hostname của VPS

• Zone: Khu vực bạn muốn tạo (EU, US,Asia…).

• Machine Type: chọn thơng số cấu hình cho server.

• Boot disk: chọn hệ điều hành cho server

• Firewall: cấu hình tường lửa.



Hình 4.2 Mơ tả các thông số để tạo server trên Google Cloud Platform



60



Khi tạo thành cơng ta sẽ có các thơng số bên dưới.Ta chỉ cần quan tâm đến External IP

(IP public), đây là IP ta có thể truy cập từ internet. Có nhiều cách để điều khiển server được

tạo ra, ta có thể điều khiển thơng qua SSH.



Hình 4.3 Mơ tả kết quả khi tạo server thành công

Cả API GATEWAY và KMS trong chương trình này đều được khai triển trên GCP.Các

bước cài đặt KMS đã được giới thiệu ở phần 4.2.1 .



4.3. Các cài đặt thực nghiệm

Phần này đưa ra các thực nghiệm khác nhau cho hệ thống với hai trường hợp chính là

khi có hoặc khơng có API GATEWAY, từ đó đưa ra các nhận xét đánh giá. Chi tiết các thực

nghiệm được mô tả bên dưới.



4.3.1 Thực nghiệm hệ thống với một cuộc gọi khi khơng có API GATEWAY

Mơ tả:

Mơ hình thử nghiệm bao gồm 3 server, 1 server chay KMS được tạo trên Google Cloud

Platform , 2 server con lại lần lượt la STUN và TURN server. Thử nghiệm được chạy trên

máy PC đóng vai trò là web server local.

Hostname

OS

CPU

RAM

HDD

IP

PORT



web

KMS

STUN

TURN

Ubuntu 16.04 LTS

Ubuntu 16.04 LTS

2 core

1 core

8 GB

600 MB

50 GB

20 GB

192.168.100.102

35.237.119.74

108.177.98.12 158.68.221.198

8443

8888

19302

3478

Bảng 4.4 Mơ hình thử nghiệm cho thực nghiệm 1



Thực hiện:



61



Trên máy chủ KMS bắt đầu khởi động kurento media server:

sudo service kurento media server -start;

Tiếp đó tiến hành thiết lập firewall cho phép các cổng 8443, 19302, 3478 được thực thi trên

đó.

Thực hiện chạy web server trên local kèm với địa chỉ của KMS được cung cấp:

npm start -- --ws_uri=ws://35.237.119.74:8888/kurento

Sau khi server chạy xong ta bắt đầu thực hiện việc test trong trường hợp này, chương trình test

đợc cài đặt trong chương trình và thực hiện bằng npm test. Chương trình test sẽ thực hiện tự

động một số thao tác để thực hiện một gọi trên web server như đăng kí, tìm peer, gọi .... Dưới

đây là một số thứ cần chú ý:

Thông qua chrome://webrtc-internals/ thu được một số trao đổi candidate như sau :

icecandidate (host):

sdpMid: video, sdpMLineIndex: 1, candidate: candidate:914589916 1 udp 2122260223

192.168.100.102 41633 typ host generation 0 ufrag uuNO network-id 1 network-cost 10

icecandidate (srflx):

sdpMid: video, sdpMLineIndex: 0, candidate: candidate:1598670621 1 udp 1686052607

27.79.156.107 13414 typ srflx raddr 192.168.100.102 rport 36444 generation 0 ufrag

uuNO network-id 1 network-cost 10

addIceCandidate (host):

sdpMid: video, sdpMLineIndex: 0, candidate: candidate:1 1 UDP 2013266431

fe80::4001:aff:fe8e:2 54827 typ host

addIceCandidate (srflx):

sdpMid: video, sdpMLineIndex: 1, candidate: candidate:9 1 TCP 843055615

35.237.119.74 48021 typ srflx raddr 10.142.0.2 rport 48021 tcptype passive

addIceCandidate (relay):

sdpMid: video, sdpMLineIndex: 0, candidate: candidate:10 1 UDP 503316991

158.69.221.198 58296 typ relay raddr 10.142.0.2 rport 57236

Phân tích:



62



Đoạn log trên được thu thập trong khi mà các peer muốn kết nối với KMS và ngược lại.

"host" ở đây là candidate được thu thập từ chính trong hệ thống máy của ta (ở đây là

PC), ta có thể thấy candidate đầu tiên có một địa chỉ 192.168.100.102 cổng là 41633 cho

phép luồng dữ liệu kiểu video và truyền theo UDP (sdpMid và UDP) ,cũng tương tự như

vậy là

"srlfx" và relay lần lượt là candidate thu thập được từ STUN và TURN server. Các

candidate này được peer thu thập nhằm mục đích gửi cho KMS để có được kết nối.Ta

cũng có các candidate tương ứng được KMS gửi sang và được peer thêm vào bằng cách

thực hiện addIceCandidate. Ở đây ta thấy địa chỉ IP là 35.237.119.74 đây chính là external

ip của KMS mà STUN trả lại cho nó,external ip này sẽ được thêm vào để peer tạo ra các

cách kết nối với KMS điều đó đã chứng minh là ta đã phân tải cho KMS có địa chỉ là

35.237.119.74 .



Kết quả:

Kết quả nhận được trong thực nghiệm này là 2 peer đã được kết nối với nhau (camera nhỏ

là của local và lớn là của remote).



Hình 4.4 Kết quả thực nghiệm thực hiện một cuộc gọi khi khơng có API GATEWAY

Thời gian thiết lập hiện cuộc gọi là 6.3 giây.



63



Hình 4.5 Mơ tả chạy chương trình thực hiện qua chương trình test



4.3.2. Thực nghiệm hệ thống với một cuộc gọi khi thêm vào API GATEWAY

Mơ tả:

Mơ hình thử nghiệm bao gồm 6 server, 3 server chaỵ KMS được tạo trên Google Cloud

Platform, 1 server là API GATE WAY phụ trách phân tải tới các KMS, 2 server còn lại lần

lượt la STUN và TURN server. Thử nghiệm được chạy trên máy PC đóng vai trò là web

server local.



Hostnam

e

Số lượng

CPU

RAM

HDD

IP

PORT

Thực hiện:



Bảng 4.5 Mơ hình thử nghiệm cho thực nghiệm 2

API

web

KMS

STUN

GATEWAY

1

3

1

1

2 core

1 core

2 core

8 GB

600 MB

8 GB

50 GB

20 GB

50GB

KMS 1:35.237.119.74

108.177.

localhost

KMS 2: 35.237.223.81

localhost

98.12

KMS 3: 35.237.9.153

8443

8888

8088

19302



TURN

1



158.68.2

21.98

3478



Tương tự như thực nghiệm trước, để thực hiện ta cần chạy server với đầu vào là 3 địa chỉ của

KMS:

npm start -- --ws_uri=ws://35.237.119.74:8888/kurento --ws_uri=ws://3

5.237.223.81:8888/kurento --ws_uri=ws://35.237.9.153:8888/kurento

Tiếp tục chạy web server, bây giờ đi kèm với nó là địa chỉ của API GATEWAY:

npm start -- --gateway_uri=http://localhost:8088



64



Một số trao đổi candidate với KMS như sau:

icecandidate (host):

sdpMid: video, sdpMLineIndex: 1, candidate: candidate:914589916 1 udp 2122260223

192.168.100.102 55462 typ host generation 0 ufrag fXWw network-id 1 network-cost 10

icecandidate (srflx)

sdpMid: audio, sdpMLineIndex: 0, candidate: candidate:1598670621 1 udp 1686052607

27.79.156.107 22280 typ srflx raddr 192.168.100.102 rport 50102 generation 0 ufrag fXWw

network-id 1 network-cost 10

icecandidate (relay)

sdpMid: video, sdpMLineIndex: 1, candidate: candidate:453802058 1 udp 41885439

158.69.221.198 50272 typ relay raddr 27.79.156.107 rport 22281 generation 0 ufrag fXWw

network-id 1 network-cost 10

addIceCandidate (host):

sdpMid: audio, sdpMLineIndex: 0, candidate: candidate:4 1 UDP 2013266430 10.142.0.2

45348 typ host

addIceCandidate (srflx)

sdpMid: audio, sdpMLineIndex: 0, candidate: candidate:9 1 TCP 843055615 35.237.9.153

64126 typ srflx raddr 10.142.0.4 rport 64126 tcptype passive

Phân tích:

Cũng tương tự như phân tích trên khi peer và KMS lần lượt đưa ra và nhận được candidate từ

host, STUN, TURN server. Khi thêm API GATEWAY vào hệ thống, KMS giờ đây khơng còn

tương tác trực tiếp với Signaling nữa mà thay vào đó là API GATEWAY. Nhìn vào log ta thấy

API GATEWAY phụ trách phân tải, lần này nó phân tải tới KMS có địa chỉ là 35.237.9.153 .

Kết quả:

Kết quả nhận được



65



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

CHƯƠNG 4. CÀI ĐẶT VÀ THỬC NGHIỆM CHƯƠNG TRÌNH

Tải bản đầy đủ ngay(0 tr)

×