3.2.1.1 Các phần mềm được sử dụng
a) Máy ảo đóng vai hệ thống phát dữ liệu video thời gian thực. - Hệ thống giả lập trên phần mềm VMware Workstation Pro - Hệ điều hành Ubuntu 18.01
- Ram: 1GB
- CPU: Intel Core 2.6GHz - IP: 192.168.1.164
b) File 264: File video được nén theo chuẩn H264 đóng vai trò dữ liệu thời gian thực được truyền tải. Tên file: admiral.264.
- Mã nguồn: https://github.com/fws97/RTSP/tree/master/test
c) Mã nguồn mở H264Analize để phân tích cấu trúc file H264. Thông tin về các NAL sẽ được sử dụng cho phần mã hóa sau. Ngôn ngữ lập trình: C. - Mã nguồn:
https://github.com/txgcwm/Linux-C-Examples/tree/master/h264/h264dec
d) Mã nguồn mở mã hóa RC4: sử dụng trong quá trình mã hóa dữ liệu thời gian thực. Ngôn ngữ lập trình: C.
- Mã nguồn: https://www.oryx-embedded.com/doc/aes_8c.html
e) Mã nguồn mở mã hóa AES: sử dụng trong quá trình mã hóa dữ liệu thời gian thực. Ngôn ngữ lập trình: C.
- Mã nguồn: https://www.oryx-embedded.com/doc/aes_8c.html
f) Mã nguồn mở mã hóa E_RISKE: sử dụng trong quá trình mã hóa dữ liệu thời gian thực. Ngôn ngữ lập trình: C.
- Mã nguồn: Từ tác giả E-RISKE [7].
g) Mã nguồn mở RTSP server: sử dụng để xây dựng server phát dữ liệu video thời gian thực. Ngôn ngữ lập trình: C.
3.2.1.2 Xây dựng chương trình File Video H264 Đọc dữ liệu. Phân tích File VideoH264 Mã hóa
Các giao thức phát dữ liệu thời gian thực
Hình 3.2. Sơ đồ cấu trúc máy chủ RTSP
Mô tả chương trình máy chủ RTSP:
- Bước 1: Khởi tạo bộ nhớ và kiểm tra các trạng thái để khởi tạo server (sử dụng hàm rtspd_init)
- Bước 2: Mở server với IP và cổng được nhập vào (sử dụng rtsp_init) - Bước 3: Tạo các luồng nhận, xử lý và truyền dữ liệu khi có yêu cầu (sử
dụng hàm pthread_create). Quá trình xử lý và truyền dữ liệu được thực hiện qua các bước:
o Xử lý các yêu cầu điều khiển RTSP nhận từ client như Setup, Play, Pause (sử dụng hàm rtsp_callback)
o Gửi thông điệp rtsp trả lời từ server tới client (sử dụng hàm rtsp _send_file).
o Giao thức Rtp nhận yêu cầu từ rtsp và xử lý (sử dụng hàm vd_rtp_func).
o Gửi dữ liệu video được yêu cầu qua rtp (sử dụng hàm rtp_send_packet):
Đọc fileH264 được yêu cầu vào buffer inbufs.
Phân tích,tìm kiếm và mã hóa 7 byte header mỗi NAL (sử dụng hàm abstr_nalu_indic).
Gửi dữ liệu đi bằng UDP (sử dụng udp_write).
- Bước 4: Đóng phiên RTSP ,RTP khi hết dữ liệu gửi. (sử dụng các hàm rtsp_freeall, rtsp_free, rtspd_free)