1. Nội dung thiết kế tốt nghiệp:
5.2 Lý thuyết cơ sở về giao thức RTP
5.2.1 Tổng quan về giao thức
RTP là một chuẩn định dạng gói, sử dụng cho việc truyền dữ liệu audio/video qua mạng IP, được phát triển bởi nhóm Audio/Video Transport của IETF (Internet Engineering Task Force). RTP thường được kết hợp sử dụng với các giao thức khác: RTSP, H.323… Chuẩn định dạng này cũng được sử dụng rộng rãi trong các hệ thống truyền thông và giải trí đa phương tiện: điện thoại, truyền hình hội nghị (video conference) và các ứng dụng push-to-talk dựa trên nền tảng web.
Các thành phần của giao thức [10]:
Giao thức truyền dữ liệu thời gian thực được thực hiện qua hai giao thức con RTP và RTCP (Real-time Transport Control Protocol).
RTP: thực hiên truyền dữ liệu thời gian thực. Giao thức này sẽ cung cấp các
thông tin liên quan đến thời gian lấy mẫu (cho việc đồng bộ hóa), số thứ tự gói tin (cho việc phát hiện ra tổn thất và tái sắp xếp lại các gói tin) và định dạng của payload (cho phép chỉ ra định dạng mã hóa của dữ liệu).
80
RTCP: Giao thức điều khiển RTP, dùng để xác định các phản hồi về QoS
(chất lượng dịch vụ ) và việc đồng bộ hóa giữa các luồng dữ liệu. Băng thông của RTCP chỉ chiếm một phần nhỏ so với băng thông của RTP, khoảng 5%.
Ngoài ra, trong giao thức còn có thêm một số các giao thức báo hiệu tùy chọn (H.323. MGCP, Megaco, SCCP, SIP).
Phiên làm việc:
Một phiên RTP sẽ đựợc tạo ra tương ứng với một luồng dữ liệu đa phương tiện (video/audio). Trong mỗi phiên thường bao gồm một địa chỉ IP và hai địa chỉ cổng giành cho RTP và RTCP. (Địa chỉ cổng của RTP là cổng chẵn và cổng RTCP là cổng lẻ tiếp theo.) Ví dụ cổng RTP là 9012 thì cổng RTCP là 9013.
RTP và RTCP thường sử dụng các cổng UDP không có đặc quyền, nằm trong khoảng từ 1024 đến 65535.
5.2.2 Các định dạng của Payload và Profile [10]
Một điểm đáng chú ý trong thiết kế của RTP: hỗ trợ nhiều định dạng đa phương tiện (như H264, MPEG4, MJPEG, MPEG ..) đồng thời cho phép bổ sung các định dạng mới mà không cần thay đổi lại các tiêu chuẩn trước đó. RTP được thiết kế dựa trên kiến trúc “phân khung mức ứng dụng” ALF (Application Level Framing). Các thông tin liên quan đến một ứng dụng cụ thể sẽ không xuất hiện trong tiêu đề của RTP, mà sẽ được qui định bới định dạng của payload và profile. Đối với mỗi lớp ứng dụng (video, audio) RTP định nghĩa một định dạng profile và một hay nhiều các định dạng payload được hỗ trợ.
Profile sẽ xác định CODEC (coder/decoder) dùng để mã hóa các dữ liệu tải và ánh xạ các dữ liệu này tới CODEC tương ứng trong trường PT (Payload Type) của header RTP.
Mỗi định dạng payload sẽ mô tả việc truyền dữ liệu được mã hóa.
Do phần mềm chỉ thực hiện việc truyền dữ liệu giữa một PC và một kit nên việc sử dụng RTCP sẽ là không cần thiết. Phần trình bày dưới đây sẽ tập trung vào các đặc tính của giao thức truyền dữ liệu RTP.
81
5.2.3 Cấu trúc tiêu đề gói tin RTP
Tiêu đề gói tin RTP bao gồm các trường được thể hiện trong Hình 5.2.
Hình 5.2 Cấu trúc tiêu đề gói tin RTP
12 byte (96 bit) đầu tiên là thành phần cố định trong tiêu đề của mọi gói tin RTP. Tiếp sau đó là phần tiêu đề mở rộng và dữ liệu tải (payload).
Ý nghĩa của các trường trong tiêu đề:
Version (V): 2 bit
Trường này chỉ ra phiên bản RTP đang sử dụng. (Phiên bản RTP đang sử dụng hiện nay là 2 (theo RFC 3550). Đối với phiên bản dự thảo đầu tiên trường Version được thiết lập bằng 1).
Padding (P): 1 bit
Nếu bit P được thiết lập (gán giá trị bằng 1) thì gói tin RTP sẽ chứa một hay nhiều byte bổ sung vào phần cuối của payload. Byte cuối cùng của phần bổ sung này sẽ cho biết số lượng byte dữ liệu được thêm vào. (Đây là phần dữ liệu cần bỏ đi khi xử lý dữ liệu nhận được).
Extension (X) : 1 bit
Nếu bit X được thiết lập, thì tiêu đề của gói tin RTP sẽ phải có thêm phần tiêu đề mở rộng như biểu diễn trong Hình 5.3.
82
Hình 5.3 Tiêu đề mở rộng của gói tin RTP CSRC count (CC): 4 bit
Trường này cho biết số lượng các bộ định danh nguồn đóng góp (Contributing Source Identifier).
Marker (M): 1 bit
Nếu bít này được thiết lập, có nghĩa là các dữ liệu hiện tại có một số liên quan đặc biệt đến ứng dụng.
Ví dụ: khi truyền một file video sử dụng giao thức RTP nếu bit M được thiết lập thì phần dữ liệu tải của gói tin đó là phần dữ liệu cuối cùng của một khung video.
Payload Type (PT): 7 bit
Trường này cho biết định dạng dữ liệu tải của gói tin RTP, đồng thời xác định ứng dụng sẽ dùng để thông dịch dữ liệu này. Một profile có thể chỉ rõ một ánh xạ tĩnh mặc định giữa việc mã hóa kiểu dữ liệu tải sang định dạng dữ liệu tải. Các dạng mã hóa kiểu dữ liệu bổ sung có thể được định nghĩa “động” bởi các giao thức và các cơ chế được thêm vào trong RTP để cung cấp một dịch vụ khả dụng.
Một nguồn RTP có thể thay đổi kiểu dữ liệu trong một phiên làm việc, nhưng trường này không nên được sử dụng cho việc ghép kênh các luồng dữ liệu độc lập. Bên thu phải bỏ qua gói tin có định dạng dữ liệu tải mà nó không thể thông dịch được.
Sequence Number: 16 bit
Khi một gói tin được gửi đi thì số sequence number của gói tin đó được tăng thêm 1. Bên thu có thể sử dụng thông tin của trường này để xác định gói tin bị mất khi truyền và khôi phục lại thứ tự của các gói tin. Giá trị khởi tạo của trường này là một số ngẫu nhiên.
83
Trường này phản ánh việc lấy mẫu tức thì của byte đầu tiên trong gói tin dữ liệu RTP. Việc lấy mẫu này được thực hiện nhờ một clock tăng tuyến tính theo thời gian để cho phép tính toán về độ rung (jitter) và việc đồng bộ hóa. Tần số của clock phụ thuộc vào định dạng của dữ liệu truyền đi như định dạng tải “tĩnh” hoặc định dạng tải “động”. Nếu gói tin RTP được truyền đi theo chu kỳ thì việc lấy mẫu tức thì được xác định bằng tần số lấy mẫu đang dùng, và không liên quan gì đến việc đọc clock hệ thống.
Ví dụ: Đối với một tệp âm thanh có tốc độ lấy mẫu cố định, timestamp sẽ tăng thêm một sau mỗi một chu kì lấy mẫu. Nếu một ứng dụng âm thanh đọc các khối dữ liệu hết 160 chù kỳ từ thiết bị đầu vào, timestamp sẽ tăng thêm 160 đối với mỗi khối dữ liệu, điều này không liên quan đến việc khối dữ liệu đó được truyền trong một gói hay bị bỏ đi.
Giá trị khởi tạo của trường này cũng là một giá trị ngẫu nhiên.
SSRC (Synchronous Source ): 32 bit
Trường này xác định các nguồn đồng bộ. Giá trị của trường được lựa chọn ngẫu nhiên nhằm mục đích tránh việc hai nguồn đồng bộ trong cùng một phiên làm việc có cùng một bộ định danh (cùng một giá trị SSRC). Nếu một nguồn thay đổi địa chỉ giao vận (transport address) của chính nó thì nguồn đó phải chọn một bộ định danh SSRC mới để tránh bị thông dịch như một nguồn lặp.
CSRC (Contributing Sources): 32 bit
Trường CSRC xác định các nguồn đóng góp dữ liệu tải có trong gói tin RTP. Số lượng các bộ định danh được xác định bởi trường CC. Nếu có nhiều hơn 15 nguồn đóng góp, thì sẽ chỉ có 15 nguồn được định danh. Các bộ định danh CSRC được thêm vào bởi các bộ trộn (mixer).
5.3 Cấu trúc cổng Ethernet
5.3.1 Sơ lƣợc về hệ thống Ethernet
Ethernet là một công nghệ mạng cục bộ (LAN) nhằm phục vụ việc trao đổi thông tin giữa các máy tính với tốc độ từ 10Mbps cho tới 10Gbps.
84
Hệ thống trung gian truyền tín hiệu Ethernet giữa các máy tính.
Các nhóm thiết bị trung gian đóng vai trò giao diện Ethernet làm cho nhiều máy tính có thể kết nối tới cùng 1 kênh Ethernet.
Các khung Ethernet đóng vai trò làm các bit chuẩn để luân chuyển dữ liệu trên Ethernet.
5.3.2 Cấu trúc cổng Ethernet
Cấu tạo vật lý của một cổng Ethernet chuẩn RJ45 bao gồm 8 chân được thể hiện trong Hình 5.4.
Hình 5.4 Sơ đồ chân cổng Ethernet
Và vai trò của mỗi chân trong hai chế độ truyền được biểu diễn trong Bảng 5.1 dưới đây.
85
Bảng 5.1 Bảng các chân tín hiệu cổng Ethernet
Với chế độ truyền 10 Mbps, chỉ có bốn chân trên cổng Ethernet là được sử dụng, tương ứng với hai đường truyền vi sai.
Trong chế độ 100 Mbps, tất cả tám chân đều được sử dụng tạo thành bốn đường truyền vi sai. Từ đó, tăng khả năng truyền tải của đường truyền so với chế độ 10 Mbps.
86
5.4 Giới thiệu công cụ VLC và Wireshark
VLC (VideoLan Client):
VLC (VideoLan Client) là một phần mềm mã nguồn mở hoàn toàn miễn phí được thực hiện bởi dự án VideoLan, cung cấp thư viện và công cụ để xử lý các dữ liệu đa phương tiện. Với người dùng phổ thông, VLC là một phần mềm chạy video và chơi nhạc khá nổi tiếng. Nhưng với các kỹ sư viễn thông, VLC có thể được dùng để kiểm thử hoặc tham gia vào các dự án streaming video/audio qua mạng LAN hoặc Internet. Giao diện của VLC được biểu diễn trong Hình 5.5.
Hình 5.5 Giao diện phần mềm VLC WireShark:
WireShark là phần mềm hỗ trợ phân tích mạng được phát triển bởi Gerald Combs. Phiên bản đầu tiên được gọi là Ethereal, phát hành năm 1998. Cho tới năm 2006, đội phát triển đã đổi tên dự án là WireShark. Chính lợi ích mà WireShark đem lại đã giúp cho phần mềm này trở nên ngày càng phổ biến. Nó không những có thể đáp ứng được nhu cầu của các nhà phân tích mạng chuyên nghiệp, mà còn có thể hỗ trợ việc học tập nghiên cứu về các giao thức mạng tại các trường đại học, cao đẳng. Giao diện của phần mềm được thể hiện trong Hình 5.6.
87
Hình 5.6 Bắt gói tin RTP bằng WireShark
So sánh với các phần mềm phân tích mạng khác, ta có thể nói WireShark vượt trội về khả năng hỗ trợ các giao thức với khoảng 850 loại. Đồng thời, phần mềm mã nguồn mở này cũng được cung cấp miễn phí với giấy phép GNU GPL cho bất kỳ mục đích sử dụng nào.
5.5 Thƣ viện lập trình socket
5.5.1 Giới thiệu chung [11]
Mô hình socket được giới thiệu đầu tiên là mô hình BSD socket sử dụng trên hệ điều hành Unix vào những năm đầu thập niên 80. Socket được tạo ra để xử lý quá trình truyền thông giữa các máy tính sử dụng giao thức IP (Internet Protocol).
Socket hỗ trợ một giao diện lập trình ứng dụng API (Application Programming Interface) tuy đơn giản nhưng từ đó, ta có thể sử dụng socket để thực hiện hầu hết các giao thức trên mạng Internet.
Socket được coi là ứng dụng tại lớp 3 – lớp Transport trong mô hình phân lớp TCP/IP, tương ứng với lớp 4 trong mô hình OSI, được biểu diễn trong Hình 5.7.
88
Hình 5.7 Mô hình phân lớp OSI và mô hình TCP/IP
Trong lập trình mạng dùng socket, chúng ta không trực tiếp truy cập vào các thiết bị mạng để trao đổi dữ liệu. Thay vào đó, một chương trình trung gian được tạo ra để điều khiển việc gửi và nhận dữ liệu. Các chương trình mô tả dùng để tham chiếu đến các kết nối mạng chính là các Socket. Một socket định nghĩa những đặc trưng sau:
Một kết nối mạng hay một pipeline để truyền tải dữ liệu. Chế độ truyền thông như Stream hoặc Datagram.
Giao thức TCP hoặc UDP.
Sau khi một socket được khởi tạo, nó phải được gán vào một địa chỉ mạng và một port duy nhất. Khi đó, nó có thể được sử dụng để trao đổi dữ liệu trong mạng.
5.5.2 Socket API
Socket API cung cấp một số hàm cơ bản để thực hiện kết nối và trao đổi dữ liệu như sau:
socket(): hàm này khởi tạo một socket với các các đặc trưng về phạm vi, loại socket.
bind(): gán socket với một port.
listen(): chỉ ra số kết nối mà socket server có thể nhận tại một thời điểm.
accept(): server chấp chận một kết nối từ server.
89
send(), sendto(): gửi dữ liệu tới kết nối.
recv(), recvfrom(): đọc dữ liệu từ kết nối.
shutdown(): kết thúc kết nối.
Thông tin chi tiết về tham số đầu vào và giá trị trả về của các hàm được giới thiệu chi tiết trong tài liệu tham khảo [11].
5.6 Xây dựng chƣơng trình nhận video trên kit
Trong đồ án, nhóm tác giả sử dụng mô hình truyền dữ liệu peer-to-peer với giao thức truyền RTP – được xây dựng trên nền giao thức UDP.
5.6.1 Truyền video giữa hai PC
Do dữ liệu được truyền xuống và xử lý trên kit, nên sẽ rất cần phải nắm rõ cấu trúc của gói tin được truyền đi từ PC. Việc bắt các gói tin được thực hiện bằng phần mềm WireShark, nội dung của một gói tin được thể hiện trong phần mềm như Hình 5.8.
Hình 5.8 Cấu trúc gói tin RTP đƣợc truyền đi
Đồng thời, ta cũng cần tiến hành đánh giá tỉ lệ mất gói trong quá trình truyền nhằm xác định sự ảnh hưởng của môi trường truyền tới khả năng xử lý của hệ
90
thống. Kết quả kiểm thử đường truyền trong mạng LAN được thể hiện trong Bảng 5.2.
Bảng 5.2 Thống kê tỉ lệ mất gói khi truyền qua Ethernet
Số lần truyền Tốc độ truyền ( frame/s) Số khung truyền Số khung thu được Tỷ lệ mất gói (%) 1 25 382 381 0,26 2 25 382 382 0,00 3 25 382 382 0,00 4 25 382 381 0,26 5 25 382 382 0,00
Từ các kết quả thu được ở trên, ta có thể thấy tỉ lệ mất gói là không đáng kể do môi trường truyền dẫn là trong mạng LAN với khoảng cách vật lý và số chặng truyền dẫn là nhỏ.
5.6.2 Xây dựng chƣơng trình trên kit
Sau khi nắm rõ được cấu trúc bản tin, nhóm đã tiến hành xây dựng chương trình nhận video và truyền tới bộ đệm của khối giải mã sử dụng thư viện lập trình socket. Sơ đồ khởi tạo và xử lý dữ liệu của chương trình được biểu diễn trong
Hình 5.9.
91
Socket tạo ra có nhiệm vụ đợi dữ liệu tại port 5004, định dạng gói tin cần xử lý là RTP. Sau khi nhận được gói tin, socket cần bóc tách và xử lý tiêu đề của gói tin RTP và chuyển phần dữ liệu tới buffer của bộ giải mã.
Khi kiểm thử chương trình trên kit, ta cần xác định và điều chỉnh tốc độ truyền từ PC sao cho thích hợp với khả năng xử lý của kit.
5.7 Kết luận
Để streaming video từ PC xuống kit thành công, ta cần chú ý tới các tham số đường truyền, đặc biệt là tốc độ truyền và số khung hình truyền trong một giây nhằm phù hợp với khả năng xử lý của hệ thống nhúng. Nếu các tham số này không được điều chỉnh chính xác, hệ thống sẽ không thể nhận được luồng streaming.
Phần mềm streaming được sử dụng là VLC, tuy nhiên khi cần truyền hoặc trao đổi dữ liệu với kit, ta hoàn toàn có thể xây dựng một phần mềm riêng có khả năng giao tiếp với kit không chỉ là streaming mà còn có thể giám sát và điều khiển hệ thống qua Ethernet. Đây cũng là một hướng phát triển rất tiềm năng cho đề tài.
Chương trình nhận dữ liệu được xây dựng dựa trên thư viện socket. Đây là một thư viện có cấu trúc đơn giản và dễ sử dụng, có nhiều phiên bản ứng với nhiều loại hệ điều hành. Do đó, hệ thống sẽ được phát triển rất dễ dàng và khả năng mở rộng cao.
92
Chƣơng 6. Thực hiện khối giải mã JPEG và hiển
thị video trên màn hình
_* Dƣơng Việt Anh *_ Chương này trình bày về khối giải mã ảnh JPEG được thực hiện trên công nghệ FPGA, từ đó tối ưu trễ giải mã để đáp ứng được video nén theo chuẩn MJPEG.
6.1 Mục đích của khối giải mã JPEG
Với yêu cầu của đề tài, hệ thống sẽ đọc dữ liệu video từ các nguồn như: thẻ nhớ SD, flash USB, Ethernet. Nếu sử dụng video thô để truyền từ các nguồn trên lên hệ