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

(Tiểu luận) đề tài xây dựng giải pháp video streaming đa nền tảng

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 (1.71 MB, 46 trang )

TRƯỜNG ĐẠI HỌC HỒNG ĐỨC
KHOA CNTT & TT

BÁO CÁO TỔNG KẾT
THỰC TẬP TỐT NGHIỆP
NĂM HỌC 2020 - 2021

ĐỀ TÀI: XÂY DỰNG GIẢI PHÁP
VIDEO STREAMING ĐA NỀN TẢNG

Thuộc nhóm ngành khoa học: Khoa học máy tính

THANH HÓA, THÁNG 3/2021

h


TRƯỜNG ĐẠI HỌC HỒNG ĐỨC
KHOA CNTT & TT

BÁO CÁO TỔNG KẾT
THỰC TẬP TỐT NGHIỆP
NĂM HỌC 2020 - 2021

ĐỀ TÀI: XÂY DỰNG GIẢI PHÁP
VIDEO STREAMING ĐA NỀN TẢNG
Thuộc nhóm ngành khoa học: Khoa học máy tính

Sinh viên thực hiện: Lưu Nguyên Bằng

Nam, Nữ: Nam



Dân tộc: Kinh
Lớp, khoa: K19 ĐH CNTT

Năm thứ: 4 /Số năm đào tạo: 4

Ngành học: Công nghệ thông tin
Người hướng dẫn: PGS.TS. Phạm Thế Anh

THANH HÓA, THÁNG 3/2021

h


Trang i
TT
1

DANH SÁCH THÀNH VIÊN TRONG NHÓM TTTN
Họ và tên
Lưu Nguyên Bằng

Lớp
K19 ĐH CNTT

h

Nội dung tham gia
Cài đặt, làm báo cáo



37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

Trang ii

MỤC LỤC

Mục

Tên chương, phần, mục và tiểu mục

Trang

Danh sách thành viên trong nhóm TTTN

i

Mục lục

ii

Danh mục các bảng biểu

iii

Danh mục các ký hiệu, chữ viết tắt

iv

Thông tin kết quả nghiên cứu


v

GIỚI THIỆU VỀ WEB RTC

1

1

Sơ lược lịch sử phát triển

1

2

Thiết kế của Web RTC

2

2.1

Các thành phần chính

2

2.2

Các giao thức được sử dụng

3


2.3

Kiến trúc hệ thống WebRTC

3

3

Những lợi ích của WebRTC

4

GIỚI THIỆU VỀ KURENTO MEDIA SERVER

6

1

Khái niệm Media Servers

6

2

Kurento và Kurento Media Server

7

2.1


Giới thiệu chung

7

2.2

Nguyên lý thiết kế của Kurento

9

2.3

Kurento API

10

Chương I

Chương II

Chương III GIẢI PHÁP VIDEO STREAMING ĐA NỀN TẢNG
CHO CAMERA IP BẰNG KURENTO

15

1

Kiến trúc phát triển ứng dụng


17

2

Tích hợp WebRTC và Camera IP

25

3

Sử dụng Kurento Media Server

27

4

Giải pháp video streaming đa nền tảng

30

5

Các vấn đề về chứng chỉ tự ký

32

6

Kết quả thử nghiệm


35

7

Kết luận

38

8

Tài liệu tham khảo

39

37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99

h


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

Trang iii

DANH MỤC CÁC HÌNH ẢNH, BẢNG BIỂU

TT

Tên bảng biểu

Hình 1.1


Protocol Stack trong WebRTC

Hình 1.2

Kiến trúc phổ biến của hệ thống WebRTC

Hình 2.1

WebRTC P2P và WebRTC có media server

Hình 2.2

Những tính năng của WebRTC Media Server điển hình

Hình 2.3
Hình 2.3

Những tính năng của Kurento Media Server

Hình 2.4

Cài đặt Kurento Client API trong Java SDK và Javascript SDK

Bảng 2.1

Các Endpoint trong Kurento API

Bảng 2.2


Các Filter trong Kurento API

Bảng 2.3

Các Hub trong Kurento API

Hình 2.5

Hộp công cụ Kurento mở rộng

Hình 2.6

Các mô-đun trong Kurento Media Server

Hình 3.1

Sự tương đồng trong kiến trúc phân lớp của ứng dụng web và ứng dụng
đa phương tiện (Kurento)

Hình 3.2

Các mặt phẳng truyền thơng và tín hiệu trong kiến trúc ứng dụng
Kurento

Hình 3.3

Tương tác chính giữa các mô-đun trong đàm phán và trao đổi media

Hình 3.4


Tương tác trong một phiên WebRTC

Hình 3.5

Ví dụ pipeline cho một phiên WebRTC

Hình 3.6

Ví dụ một Media Pipeline đơn giản

Hình 3.7

Kiến trúc đơn giản của Media Gateway

Hình 3.8

Kiến trúc đầy đủ của Media Gateway WebRTC

Hình 3.9
Hình 3.9

Kiến trúc Media Gateway trong Kurento Media Server

Hình 3.10 Cấu hình xử lý cho nhiều người xem trên thiết bị đầu cuối khác nhau
Hình 3.11 Đo các thông số CPU và RAM tại máy chủ streaming
Hình 3.12 Hình ảnh video streaming của 6 camera
37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99

h



37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

Trang iv

DANH MỤC CÁC KÍ HIỆU, CHỮ VIẾT TẮT

Ký hiệu, chữ viết tắt
WebRTC

Được hiểu là
Giao tiếp web thời gian thực
(Web Real-time Communication)

P2P

Liên kết ngang hàng (peer-to-peer)

API

Giao diện lập trình ứng dụng
(Application Programming Interface)

KMS

Máy chủ truyền thông Kurento (Kurento Media Server)

SDK

Bộ công cụ phát triển phần mềm

(Software Developmenrt Kit)

SRTP

Giao thức truyền dữ liệu thời gian thực có đảm bảo
(Secure Real-time Transport Protocol)

REMB

Tốc độ bit tối đa theo bên nhận ước lượng
(Receiver Estimated Maximum Bitrate)

PLI

Dấu hiệu mất hình ảnh (Picture Loss Indication)

GIF

Định dạng trao đổi hình ảnh
(Graphics Interchange Format)

HTML

Ngôn ngữ đánh dấu siêu văn bản
(Hypertext Markup Language)

HTTPS

Giao thức truyền tải siêu văn bản bảo mật
(Hyper Text Transfer Protocol Secure)


RTSP

Giao thức truyền tin thời gian thực
(Real Time Streaming Protocol)
37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99

h


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

SSL

Trang v

Tầng socket bảo mật (Secure Sockets Layer)

THÔNG TIN KẾT QUẢ NGHIÊN CỨU

1. Tên đề tài: Xây dựng giải pháp media streaming đa nền tảng
2. Loại đề tài: Thực tập tốt nghiệp
3. Nhóm sinh viên thực hiện:
- Họ và tên: Lưu Nguyên Bằng

- Mã sinh viên: 1661030009

- Khoa: Công nghệ thông tin và Truyền thông
4. Giảng viên hướng dẫn: PGS.TS Phạm Thế Anh
5. Thời gian thực hiện: 04 tháng (từ tháng 11/2020 đến tháng 3/2021).


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99

h


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

CHƯƠNG I: GIỚI THIỆU VỀ WEB RTC
1. SƠ LƯỢC LỊCH SỬ PHÁT TRIỂN
WebRTC (Web Real-Time Communication) là một web API được phát
triển bởi Google và Hiệp hội W3C (World Wide Web Consortium), có khả năng
hỗ trợ trình duyệt giao tiếp với nhau thông qua Video Call, Voice Call hay
truyền dữ liệu Peer-to-Peer (P2P) mà không cần browser phải cài thêm plugins
hay phần mềm hỗ trợ nào từ bên ngoài.
WebRTC bắt đầu từ lúc Google muốn xây dựng một chuẩn thay thế cho
Flash để thực hiện các ứng dụng thời gian thực trên tất cả các trình duyệt. Năm
2010, Google mua lại hai công ty On2 và Global IP Solutions (GIPS) để lấy
công nghệ truyền dữ liệu thời gian thực làm nền tảng cho WebRTC về sau.
Tháng 5/2011, Google ra mắt một dự án mã nguồn mở dành cho việc giao
tiếp thời gian thực giữa trình duyệt với nhau, và từ lúc này dự án mang tên
WebRTC. Song song đó, Hiệp hội World Wide Web (W3C) và Hiệp hội Kĩ sư
quốc tế (IETF) cũng đang phát triển một số giao thức để dùng cho việc việc kết
nối thời gian thực, thế nên họ bắt tay nhau tiếp tục hoàn thiện để rồi quyết định
kết hợp chung vào WebRTC.
Đến 27/10/2011, W3C ra mắt bản nháp đầu tiên của WebRTC. Tháng
11/2011, Chrome 23 ra mắt, trở thành trình duyệt đầu tiên có hỡ trợ sẵn (builtin) WebRTC. Dưới đây là một số mốc thời gian trong quá trình phát triển của
WebRTC:
 5/2011: Ericsson Labs xây dựng bản thực thi đầu tiên của WebRTC.
 10/2011: W3C công bố bản nháp đầu tiên của WebRTC.

 11/2011: WebRTC bắt đầu hỗ trợ trên Google Chrome 23.
 1/2013: Hỗ trợ trên Mozilla Firefox.
 2/2013: Thực hiện cuộc gọi cross-browser (đa trình duyệt) đầu tiên.
 7/2013: Hỗ trợ phiên bản beta của Chrome 29 trên Android.
 10/2013: Bắt đầu hỗ trợ trên phiên bản Opera beta.
 2/2014: Truyền dữ liệu cross-browser (đa trình duyệt) lần đầu tiên.
 3/2014: Bắt đầu hỗ trợ phiên bản Opera 20 trên Android.
37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99

1

h


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

 7/2014: Tích hợp trong Google Hangouts.
 11/2017: W3C chuyển WebRTC từ bản nháp (Working Draft) thành
đề nghị ứng viên (Candidate Recommendation).
 1/2018: WebRTC 1.0 bản ổn định (stable release).
Đến nay, WebRTC đã được hỗ trợ sẵn trên phiên bản desktop và mobile
của các trình duyệt Google Chrome, Mozilla Firefox, Safari, Opera và các trình
duyệt nhân Chromium khác. Ngoài ra, WebRTC còn có những ứng dụng khác
ngoài trình duyệt, trên các nền tảng di động và các thiết bị IoT (Internet of
Things).
2. THIẾT KẾ CỦA WEB RTC
2.1. Các thành phần chính
WebRTC bao gồm các JavaScript API sau:
 getUserMedia: cho phép trình duyệt web truy cập vào camera,
microphone để lấy dữ liệu hình ảnh, âm thanh cho việc truyền tải.

 RTCPeerConnection: dùng để cài đặt videocall/voicecall giữa các
browser. Thực hiện các công việc: xử lý ra tín hiệu, chuyển đổi định
dạng audio/video, giao tiếp P2P, bảo mật, quản lý băng thông.
 RTCDataChannel: truyền dữ liệu hai chiều giữa các trình duyệt.
Dùng các API như WebSockets với độ trễ rất thấp.
WebRTC API cũng hỗ trợ hàm thống kê:
 getStats: cho phép ứng dụng web lấy tập hợp các số liệu thống kê về
các session WebRTC.
2.2. Các giao thức được sử dụng
Do đặc điểm cần thời gian thực cao hơn độ tin cậy, giao thức UDP được
sử dụng trong WebRTC làm giao thức vận chuyển dữ liệu. Nhưng để thỏa mãn
yêu cầu của trình duyệt, phải hỗ trợ giao thức và dịch vụ ở các lớp khác nữa. Về
cơ bản các giao thức chính sử dụng trong WebRTC được thể hiện ở hình dưới:

37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99

2

h


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

Hình 1.1 Protocol Stack trong WebRTC
Các giao thức ICE, STUN, and TURN là cần thiết để thiết lập và duy trì
kết nối ngang hàng (peer-to-peer) qua UDP. DTLS được sử dụng để bảo mật
cho việc truyền dữ liệu giữa các bên, bởi mã hóa là 1 tính năng bắt buộc của
WebRTC. SCTP and SRTP là các giao thức ứng dụng được dùng để kết hợp các
luồng dữ liệu khác nhau, cung cấp điều khiển tắc nghẽn và điều khiển luồng,
cung cấp sự phân phối đáng tin cậy một phần và các dịch vụ bổ sung khác trên

nền UDP.
2.3. Kiến trúc hệ thống WebRTC
Khác với các hệ thống web truyền thống trong đó browser trao đổi thông
tin với web server thông qua HTTP hoặc WebSocket, WebRTC sử dụng kiến
trúc P2P. Ứng dụng WebRTC sử dụng một server trung gian gọi là Signaling
Server chạy trên thời gian thực nhằm trao đổi các thơng tin cần thiết để hai trình
duyệt có thể kết nối với nhau. Sau khi kết nối, các trình duyệt sẽ trực tiếp trao
đổi dữ liệu âm thanh, hình ảnh … với nhau.
Kiến trúc hệ thống WebRTC được minh họa một cách đơn giản như sau:

37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99

3

h


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

Hình 1.2 Kiến trúc phổ biến của hệ thống WebRTC
WebRTC không giới hạn kết nối giữa hai người dùng (one to one) mà có
thể kết nối từ một người dùng đến nhiều người dùng khác nhau (one to many).
WebRTC không quy định 1 giao thức ra tín hiệu (signaling protocol) cụ
thể nào mà người lập trình có thể cài đặt tùy theo lựa chọn của họ. Điều này cho
phép việc chỉnh sửa các ứng dụng WebRTC một cách linh hoạt tùy theo nhu cầu
sử dụng hay hoàn cảnh cụ thể.
3. NHỮNG LỢI ÍCH CỦA WEB RTC
Trước kia để xây dựng một ứng dụng đa phương tiện người ta cần phải
dùng Flash, Java Applet và tích hợp plugins từ các nhà cung cấp thứ ba để thực
hiện. Vì thế WebRTC ra đời để giải quyết vấn đề này. Dưới đây là một số lợi ích

và đặc tính mà WebRTC cung cấp:
 Miễn phí: WebRTC là một dự án mã nguồn mở, miễn phí và hỗ trợ
sẵn trên tất cả các trình duyệt phổ biến hiện nay.
 Hỗ trợ mọi nền tảng thiết bị: Bất kì trình duyệt nào bật WebRTC
trên hệ điều hành bất kì có thể tạo một kết nối thời gian thực tới thiết
bị WebRTC khác. Lập trình viên có thể viết các đoạn mã HTML làm
việc trên cả máy tính và các thiết bị di động.
 Bảo mật dữ liệu: WebRTC sử dụng giao thức SRTP (Secure Realtime Transport Protocol) để mã hóa và xác thực dữ liệu âm thanh, hình
ảnh. Điều này giúp người dùng tránh được việc bị nghe lén hay quay
trộm khi thực hiện các tác vụ media.
37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99

4

h


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

 Không Plugins: WebRTC không cần phải cài các plugin của bên thứ
ba để sử dụng các ứng dụng đa phương tiện, vốn là điều làm cho các
ứng dụng đa phương tiện phải phụ thuộc vào các nền tảng khác nhau.
Với WebRTC, ta không cần quan tâm đến vấn đề này.
 Dễ sử dụng: Có thể tích hợp các tính năng của WebRTC trong các
dịch vụ web bằng các JavaScript API và những Framework có sẵn. Sử
dụng các API đã được chuẩn hóa, lập trình viên sẽ không cần thiết phải
tìm hiểu sâu về WebRTC. Điều này giúp giảm thời gian phát triển ứng
dụng.
 Thích ứng với các điều kiện mạng khác nhau: WebRTC hỗ trợ việc
xử lý với nhiều kiểu media và thiết bị đầu cuối khác nhau. Điều này

giúp các ứng dụng tương tác video hoặc gọi thoại sử dụng băng thông
hiệu quả hơn. Các API và signaling server có thể thỏa thuận kích
thước và định dạng video phù hợp cho từng thiết bị đầu cuối riêng biệt.

37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99

5

h


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

CHƯƠNG II: GIỚI THIỆU VỀ KURENTO MEDIA SERVER
1. KHÁI NIỆM MEDIA SERVERS
WebRTC cho phép các trình duyệt trực tiếp giao tiếp với nhau không cần
qua bất kỳ hạ tầng trung gian nào. Tuy nhiên, mơ hình này chỉ đủ để tạo các ứng
dụng web cơ bản, và rất khó để thực hiện các tính năng phức tạp có nhu cầu cao
về tính toán hay băng thơng như giao tiếp nhóm, ghi lại dòng dữ liệu (media
stream), quảng bá (broadcasting) hoặc chuyển mã dữ liệu (media transcoding).
Vì lý do này, nhiều ứng dụng yêu cầu một máy chủ truyền thông (media server)
riêng, có trách nhiệm trung gian chuyển/nhận các luồng dữ liệu tới các đối tác
(peer). Khi đó các peer chỉ cần kết nối với media server và nhận/truyền stream
từ server đó.

Hình 2.1 WebRTC P2P và WebRTC có media server
Có thể hiểu WebRTC media server như một phần mềm trung gian đa
phương tiện (multimedia middleware), nơi dữ liệu (audio, video…) sẽ đi qua khi
di chủn từ ng̀n đến đích.
Media servers có khả năng xử lý các luồng dữ liệu và cung cấp các tính

năng:
 Giao tiếp nhóm: phân phối luồng media tạo ra từ 1 peer đến nhiều nơi
nhận khác nhau, hoạt động như một đơn vị hội nghị đa điểm (MCU,
Multi-Conference Unit).
 Trộn media: chuyển đổi nhiều luồng vào thành 1 luồng ra duy nhất.
37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99

6

h


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

 Chuyển mã: chuyển đổi định dạng video cho các máy khách không
tương thích.
 Ghi lại: lưu và bảo toàn những thông tin trao đổi giữa các peer.

Hình 2.2 Những tính năng của WebRTC Media Server điển hình
2. KURENTO VÀ KURENTO MEDIA SERVER
2.1. Giới thiệu chung
Kurento là một dự án nguồn mở bao gồm một máy chủ truyền thông
WebRTC và một bộ API giúp đơn giản hóa việc phát triển các ứng dụng video
nâng cao cho các nền tảng web và mobile. Được bắt đầu phát triển từ năm 2010,
đến nay Kurento đã ra tới phiên bản 6.2.
Cốt lõi của Kurento là Kurento Media Server (KMS). Ngoài các tính năng
thông thường của mợt WebRTC media server như liên lạc nhóm, chuyển mã,
ghi lại, trộn, phát sóng và định tuyến dịng nghe nhìn, KMS còn cung cấp khả
năng xử lý nâng cao trong các lĩnh vực thị giác máy tính, tạo chỉ mục video,
thực tại tăng cường và phân tích giọng nói.

KMS được xây dựng dựa trên thư viện đa phương tiện Gstreamer và cung
cấp những tính năng sau:
 Truyền dữ liệu trên mạng theo các giao thức HTTP, RTP, hay
WebRTC.
37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99

7

h


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

 Truyền thông nhóm (MCU và SFU), hỗ trợ cả trộn dữ liệu media và
định tuyến, gửi media.
 Hỗ trợ các bộ lọc thực hiện các thuật toán Thị giác máy (Computer
Vision) và Thực tại tăng cường (Augmented Reality).
 Lưu dữ liệu dưới định dạng WebM, MP4 và phát ở tất cả các định
dạng hỗ trợ bởi Gstreamer.
 Tự động chuyển đổi giữa các bộ codec được Gstreamer hỗ trợ, bao
gồm VP8, H.264, H.263, AMR, OPUS, Speex, G.711, và nhiều dạng
khác.
Ngoài các thư viện Kurento Client Java và Javascript có sẵn, nếu muốn
dùng ngôn ngữ khác, lập trình viên có thể dùng Kurento Protocol dựa trên
WebSocket và JSON-RPC để cài đặt.
KMS có kiến trúc mô-đun, cung cấp tính năng dưới dạng các mô-đun cắm
(pluggable module) có thể được bật tắt dễ dàng. Ngoài ra, lập trình viên có thể
tự tạo các mô-đun để mở rộng KMS với các tính năng mới một cách linh hoạt.
Kiến trúc dạng mô-đun của Kurento giúp đơn giản hóa việc tích hợp các thuật
toán xử lý nội dung (vd: nhận dạng giọng nói, phân tích cảm xúc, nhận dạng

khuôn mặt, …) của bên thứ ba vào ứng dụng của mình để sử dụng như những
tính năng có sẵn (built-in features).

Hình 2.3 Những tính năng của Kurento Media Server
37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99

8

h


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

2.2. Nguyên lý thiết kế của kurento
Kurento được thiết kế dựa trên những nguyên lý chính sau:
 Tách biệt mặt media và signaling: Mặt tín hiệu (signaling plane) phụ
trách việc trao đổi thông tin trong khi tạo và điều khiển kết nối giữa
các thiết bị, cũng như việc quản lý mạng. Mặt media (media plane)
quản lý việc truyền dữ liệu media với các hàm thương lượng media,
tham số hóa QoS, thiết lập cuộc gọi, đăng ký người dùng,… Trong
Kurento 2 mặt này được thiết kế tách biệt nhau để ứng dụng có thể xử
lý chúng một cách riêng rẽ.
 Phân phối media và các dịch vụ ứng dụng: KMS và các ứng dụng có
thể được gộp lại hay phân tán trên các thiết bị khác nhau. Một ứng
dụng có thể gọi dịch vụ của nhiều Kurento Media Server. Một KMS
cũng có thể trả lời yêu cầu của nhiều ứng dụng.
 Thích hợp điện toán đám mây: Kurento có thể được tích hợp lên các
môi trường điện toán đám mây để trở thành 1 PaaS (Platform as a
Service – Nền tảng như một dịch vụ).
 Đường ống media (media pipelines): kết nối các media elements

(phần tử media) thông qua media pipelines là 1 cách tiếp cận để giảm
bớt sự phức tạp của việc xử lý đa phương tiện.
 Phát triển ứng dụng nhanh chóng: Lập trình viên không cần phải
hiểu những kiến trúc nội bộ phức tạp của KMS, họ có thể triển khai
ứng dụng trên công nghệ hay framework (khung phần mềm) mà họ
thích, từ client tới server, từ browser tới cloud service (dịch vụ đám
mây).
 Giao tiếp đầu cuối end-to-end: Kurento cung cấp cung cấp khả năng
giao tiếp end-to-end nên lập trình viên không cần phải xử lý những
công đoạn vận chuyển, mã hóa/giải mã và kết xuất dữ liệu trên máy
trạm.
 Dòng dữ liệu có thể xử lý được: Kurento cho phép cả tương tác
người-người (vd: đàm thoại nghe/gọi tương tự Skype), và giao tiếp
người-máy (vd: dịch vụ phát video theo yêu cầu) và máy-máy (vd: ghi
lại video từ xa, trao đổi dữ liệu đa giác quan (multisensory media)).
37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99

9

h


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

 Xử lý media theo module: Việc module hóa bằng media elements và
pipelines cho phép định nghĩa các chức năng xử lý của 1 ứng dụng qua
1 ngôn ngữ “hướng đồ thị”, nơi các nhà phát triển có thể tạo ra logic
mong muốn bằng việc kết nối các chức năng phù hợp.
 Kiểm tra: Kurento cho phép việc theo dõi QoS (Quality of Service –
chất lượng dịch vụ) một cách chi tiết, cho phép việc thanh toán và

kiểm toán.
 Tích hợp IMS liền mạch: Kurento được thiết kế để hỗ trợ tích hợp
liền mạch vào cơ sở hạ tầng IMS của các nhà cung cấp dịch vụ điện
thoại.
 Lớp thích ứng media trong suốt (media adaptation layer): Kurento
cung cấp một lớp thích ứng trong suốt để có thể hội tụ các thiết bị khác
nhau với yêu cầu khác nhau về kích thước màn hình, mức tiêu thụ
điện, tốc độ truyền, …
2.3. Kurento API
Kurento Media Server có thể được điều khiển thơng qua API mà nó hiển
thị, và các nhà phát triển ứng dụng có thể sử dụng các ngơn ngữ cấp cao để
tương tác. Dự án Kurento cung cấp sẵn các cài đặt Kurento Client cho một số
nền tảng (Java SDK và JavaScript SDK). Ngoài những ngôn ngữ được hỗ trợ
(Java, Javascript), lập trình viên có thể tự cài đặt Kurento Client theo ngôn ngữ
mình thích bằng cách dùng Kurento Protocol dựa trên WebSocket và JSONRPC.
Dưới đây (Hình 2.4) cho thấy cách sử dụng Kurento trong ba trường hợp:
 Sử dụng SDK Kurento JavaScript trực tiếp từ trình duyệt WebRTC
(chỉ nên dùng cho thử nghiệm, không cho phát triển sản phẩm).
 Sử dụng Kurento Java SDK trong Máy chủ ứng dụng (Application
Server) Java EE độc lập. Trình duyệt web là bên khách (client) của
ứng dụng cho các tác vụ như HTML và báo hiệu WebRTC (WebRTC
signaling), trong khi bản thân ứng dụng là client của KMS (sử dụng
Kurento Protocol để điều khiển KMS).
 Sử dụng Kurento JavaScript SDK trong Máy chủ ứng dụng Node.js.
Tương tự như khi dùng Java SDK, trình duyệt web là client của ứng
dụng, trong khi ứng dụng là client của KMS.
37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99

10


h


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

Hình 2.4 Cài đặt Kurento Client API trong Java SDK và Javascript
SDK
Kurento có 2 khái niệm căn bản, Media Element và Media Pipeline:
 Media Elements (phần tử phương tiện): mỗi Media Element là một
đơn vị chức năng thực hiện một tác vụ cụ thể trên dòng dữ liệu. Mỗi
media element được xem như một “hộp đen” đối với nhà phát triển
ứng dụng: họ dùng chức năng đó mà không cần phải hiểu chi tiết cài
đặt ở mức thấp của nó. Media element có thể nhận dữ liệu từ element
khác (thông qua media source) và gửi tới element khác (thông qua
media sinks). Dựa trên chức năng, media element được chia thành các
nhóm:
o Input Endpoints (đầu vào điểm cuối): đây là các Media Elements
thực hiện việc nhận dữ liệu và truyền vào 1 pipeline (đường ống). Có
nhiều loại input endpoints khác nhau (File/Network/Capture input
endpoint) đảm nhận việc lấy media từ (File/Network/Camera) tương
ứng.
37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99

11

h


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66


o Filters (bộ lọc): thực hiện việc phân tích và chuyển đổi dữ liệu. Có
các bộ lọc cho việc trộn (mixing), phối hợp (muxing), phân tích, tăng
cường,…
o Hubs: quản lý nhiều luồng media trong 1 pipeline. Một Hub có các
HubPort cho từng media element kết nối tới. Tùy thuộc vào loại Hub,
có những cách khác nhau để điều khiển media. Ví dụ: Hub
Composite hợp nhất tất cả các luồng video đầu vào thành một luồng
video đầu ra duy nhất, với tất cả các đầu vào được sắp xếp trong một
lưới (grid).
o Output Endpoints (đầu ra điểm ći): là element có khả năng lấy
luồng media ra khỏi pipeline. Tương tự input endpoint, có nhiều loại
output endpoint chuyên biệt cho file, network, màn hình máy tính,…
 Media Pipeline (đường ớng phương tiện): là một chuỗi các Media
Element kết nối với nhau, nơi luồng ra của phần tử này được truyền
vào phần tử tiếp theo. Từ đó, media pipeline có khả năng thực hiện
một chuỗi các thao tác khác nhau trên một luồng media.
Kurento API được xây dựng hướng đối tượng. Các lớp trong đó bao gồm
các thuộc tính thể hiện trạng thái bên trong của Kurento server, và các phương
thức là các thao tác mà server thực hiện.
Dưới đây là bảng danh sách các mô-đun chính trong Kurento, bao gồm
các Endpoint, Filter và Hub:
Bảng 2.1 Các Endpoint trong Kurento API
Tên

Chức năng

WebRtcEndpoint

Là endpoint vào/ra cung cấp việc
truyền phát media cho giao tiếp

thời gian thực trên web. Dùng
công nghệ WebRTC để giao tiếp
với trình duyệt.

RtpEndpoint

Là endpoint vào/ra cung cấp việc
truyền tải nội dung 2 chiều giữa
các bên thông qua giao thức RTP.
Dùng giao thức SDP cho thương
37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99

12

h

Minh họa


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

lượng media (media negotiation).
HttpPostEndpoint Là endpoint đầu vào, nhận media
bằng các yêu cầu HTTP POST
tương tự như chức năng upload
file qua HTTP.
PlayerEndpoint

Là endpoint đầu vào lấy nội dung
media từ hệ thống file, HTTP

URL hay RTSP URL và truyền
vào Media Pipeline.

RecorderEndpoin
t

Là endpoint đầu ra cung cấp hàm
để lưu lại nội dung, chứa Media
Sink cho audio và video.

Bảng 2.2 Các Filter trong Kurento API
Tên
ZBarFilter

Chức năng

Minh họa

Phát hiện mã QR, mã vạch trong
luồng video và gọi hàm sự kiện
CodeFoundEvent. Client có thể thêm
hàm lắng nghe để bắt và xử lý sự
kiện.

FaceOverlayFilter Phát hiện khuôn mặt trong video và
phủ lên nó 1 ảnh có thể cấu hình
được.
GStreamerFilter

Là giao diện lọc chung (filter

interface) cho phép thêm các phần tử
Gstreamer vào Media Pipeline.

Bảng 2.3 Các Hub trong Kurento API
Tên

Chức năng

37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99

13

h

Minh họa


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

Composite

Trộn các luồng audio của những input
được kết nối với Hub và xây dựng 1 lưới
với những luồng video của chúng.

DispatcherOneToMany Gửi 1 input nhận được tới tất cả các
output theo HubPort được kết nối.

Dispatcher


Cho phép định tuyến giữa các cặp
HubPort input-output tùy ý.

Ngồi các tính năng cơ bản, Kurento còn có một số mơ-đun bổ sung được
tích hợp sẵn, làm ví dụ về cách mở rộng các tính năng cơ bản của Kurento
Media Serve:
 kms-pointerdetector: Bộ lọc phát hiện con trỏ trong luồng video, dựa
trên theo dõi màu sắc.
 kms-chroma: Bộ lọc lấy một dải màu ở lớp trên cùng và làm cho nó
trong suốt, để lộ một hình ảnh khác phía sau.
 kms-crowddetector: Bộ lọc phát hiện đám đông người trong các
luồng video.
 kms-platedetector: Bộ lọc phát hiện biển số xe trong các luồng video.
Như vậy, hộp công cụ Kurento (Kurento toolbox) hồn chỉnh bao gờm
hợp cơng cụ cơ bản được mở rộng với nhiều bộ lọc Computer Vision và
Augmented Reality, như hình minh họa sau:

37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99

14

h


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

Hình 2.5 Hộp công cụ Kurento mở rộng
Ngoài ra, nhà phát triển cũng có thể tự viết mô-đun của riêng mình để mở rộng
các tính năng của Kurento Media Server. Có hai lựa chọn chính:
 Các mô-đun dựa trên thư viện OpenCV: nên theo hướng này nếu muốn

thêm các tính năng như Thị giác máy tính hoặc Thực tế tăng cường.
 Các mô-đun dựa trên thư viện Gstreamer: loại mô-đun này cung cấp
một điểm vào chung để xử lý media trong khuôn khổ GStreamer. Các
mô-đun như vậy mạnh hơn, nhưng cũng khó phát triển hơn, và yêu cầu
có kiến thức tốt về phát triển GStreamer.
Tóm lại, kiến trúc mô-đun của KMS bao gồm các tính năng cơ bản, các mô-đun
tích hợp bổ sung và các mô-đun tùy chỉnh do người dùng tự tạo:

37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99

15

h


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

Hình 2.6 Các mô-đun trong Kurento Media Server

37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99

16

h


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

CHƯƠNG III:


GIẢI PHÁP VIDEO STREAMING ĐA NỀN TẢNG
CHO CAMERA IP BẰNG KURENTO

1. KIẾN TRÚC PHÁT TRIỂN ỨNG DỤNG
1.1. Kiến trúc chung
Kurento có thể được sử dụng theo nguyên tắc kiến trúc của web. Việc tạo
một ứng dụng đa phương tiện dựa trên Kurento cũng tương tự như khi tạo một
ứng dụng web bằng bất kỳ khung phát triển web phổ biến nào.
Ở mức trừu tượng cao nhất, các ứng dụng web có kiến trúc bao gồm ba
lớp khác nhau:
 Lớp trình bày (phía máy khách): Lớp này chứa toàn bợ phần mã ứng
dụng chịu trách nhiệm thực thi tương tác với người dùng cuối để thông
tin được thể hiện một cách toàn diện. Phần này thường bao gồm các
trang HTML với mã JavaScript.
 Lớp logic ứng dụng (phía máy chủ): Lớp này chịu trách nhiệm triển
khai các chức năng cụ thể được thực thi bởi ứng dụng.
 Lớp dịch vụ (phía máy chủ hoặc phía Internet): Lớp này cung cấp
các tính năng mà lớp logic ứng dụng sử dụng như cơ sở dữ liệu, truyền
thông, bảo mật... Các dịch vụ này có thể được lưu trữ trong cùng một
máy chủ với lớp logic ứng dụng hoặc có thể được cung cấp bởi bên
ngoài.
Tương tự như vậy, các ứng dụng đa phương tiện được tạo bằng Kurento
cũng có thể được triển khai theo cùng một kiến trúc:
 Lớp trình bày: Phụ trách việc biểu diễn và thu nợi dung phương tiện.
Nó thường dựa trên các tính năng cụ thể có sẵn của máy khách. Ví dụ:
khi tạo ứng dụng dựa trên trình duyệt, lớp trình bày sẽ sử dụng các tính
năng như thẻ HTML <video> hoặc các API JavaScript của WebRTC .
 Lớp logic ứng dụng: Lớp này cung cấp logic đa phương tiện cụ thể.
Nói cách khác, lớp này chịu trách nhiệm xây dựng pipeline thích hợp
(bằng cách xâu chuỗi các Media Elements mong muốn) mà các luồng

dữ liệu liên quan đến ứng dụng sẽ cần phải đi qua.

37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99

17

h


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

 Lớp dịch vụ: Lớp này cung cấp các dịch vụ đa phương tiện hỗ trợ
logic ứng dụng như ghi video, mã hóa video... Kurento Media Server
(Media Pipeline chứa các Media Elements cụ thể) phụ trách lớp này.
Điều thú vị ở đây là, giống như khi phát triển các ứng dụng web, các ứng
dụng Kurento có thể đặt lớp Trình bày ở phía máy khách và lớp Dịch vụ ở phía
máy chủ. Tuy nhiên, lớp logic Ứng dụng, trong cả hai trường hợp, có thể nằm ở
một trong hai bên hoặc thậm chí phân bố giữa chúng. Ý tưởng này được thể hiện
trong hình sau:

Hình 3.1 Sự tương đờng trong kiến trúc phân lớp của ứng dụng
web và ứng dụng đa phương tiện (Kurento)
Điều này có nghĩa là các nhà phát triển Kurento có thể chọn để đưa phần
mã tạo media pipeline cụ thể mà ứng dụng của họ yêu cầu ở phía máy khách (sử
dụng Kurento Client phù hợp hoặc cài trực tiếp với Kurento Protocol) hoặc có
thể đặt nó ở phía máy chủ. Cả hai tùy chọn đều hợp lệ nhưng ngụ ý các phong
cách phát triển khác nhau. Tuy vậy, điều quan trọng cần lưu ý là trong phát triển
web, các nhà phát triển thường có xu hướng để mã phía máy khách càng đơn
giản càng tốt, và đưa hầu hết logic ứng dụng lên máy chủ. Đây cũng là cách sử
dụng Kurento thông thường nhất.

Ở những phần sau, ta mặc định coi là tất cả việc xử lý logic Kurento được
thực hiện ở phía máy chủ. Mặc dù đây là cách phổ biến nhất để sử dụng
Kurento, điều quan trọng cần lưu ý là tất cả logic đa phương tiện có thể được
thực hiện tại máy khách với Kurento JavaScript Client.
37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99

18

h


×