LUẬN VĂN TỐT NGHIỆP
Trang 1
LỜI NÓI ĐẦU
Trong những năm gần đây, mạng máy tính ngày càng trở nên phổ biến. Việc
liên kết các máy tính trên môi trường mạng cũng như liên kết các mạng lại với nhau
đem lại cho chúng ta nhiều lợi ích trong công việc cũng như trong việc học tập nghiên
cứu, giải trí. Chúng ta có thể sử dụng các tài nguyên sẵn có được chia xẻ như file
server, printer, máy fax, ... môi trường mạng còn là một môi trường thông tin nhanh
chóng và tiện lợi nhờ vào các cơ chế truyền thông trên mạng như : e-mail, www ...
Bên cạnh đó, tốc độ phát triển của máy tính PC cũng rất nhanh chóng. Các kỹ
thuật hiện đại đã giúp tạo ra các máy PC với tốc độ tính toán nhanh hơn, bộ nhớ lớn
hơn và khả năng xử lý của nó cũng ngày càng đa dạng hơn trong khi giá thành ngày
càng rẻ hơn. Một trong những khả năng ưu việt của máy PC hiện nay là hỗ trợ
multimedia. Các máy PC ngày nay giao tiếp với con người không chỉ bằng text mà
còn kết hợp tất cả các phương tiện khác như tiếng nói, hình ảnh.
Việc đưa kỹ thuật multimedia vào các ứng dụng truyền thông trên mạng giúp
chúng ta tạo ra nhiều ứng dụng phong phú hơn. Chẳng hạn hộp thư điện tử ngày nay
có thể không chỉ là văn bản mà còn bao gồm tiếng nói, hình ảnh. Các trang web trở
nên sinh động hơn hẳn khi kèm theo kỹ thuật multimedia. Bên cạnh đó, chúng ta có
thể thiết kế các ứng dụng tiện ích như Video conference, voice mail...
Thông qua chương trình này, người sử dụng có thể trao đổi thông tin với nhau
bằng tiếng nói. Chương trình này đã được hiện thực rất nhiều trong các lĩnh vực
thông tin như điện thoại, viễn thông, máy tính . . . Tuy nhiên nó chưa được áp dụng và
phát triển rọng rãi như trên các lĩnh vực thông tin khác do sự hạn chế của thiết bị.
Ngày nay, khi công nghệ thông tin đã phát triển thì việc hiện thực chương trình này là
hoàn toàn có thể. Ứng dụng trong nhiều lĩnh vực khác nhau như :
•Việc dạy học từ xa.
•Việc chẩn đoán, chữa bệnh từ xa.
•Hội thảo, thảo luận theo nhóm.
•Công cụ trao đổi thông tin bằng hình ảnh và âm thanh.
Mục tiêu của đồ án tốt nghiệp là tìm hiểu các mô hình và công nghệ truyền âm
thanh trên mạng máy tính, trên cơ sở đó xây dựng ứng dụng truyền thông âm thanh
thoại trên mạng cục bộ. Đồ án sẽ xây dựng thử nghiệm một hệ thống cho phép trao
đổi thông tin bằng tiếng nói thoại, tương tác điểm – điểm trên mạng LAN. Đồ án được
trình bày gồm 5 chương với bố cục như sau :
Chương I : Tìm hiểu các mô hình điện thoại qua mạng, Từ đó đưa ra mô hình sẽ thực
thi trong đồ án này.
Chương II: Giới thiệu chung về các giao thức truyền thông trên mạng Internet và vào
khảo sát cụ thể các giao thức này.
Chương III : Giới thiệu các chuẩn mã hoá và nén âm thanh.
Chương IV : Tìm hiều môi trường lập trình SDK Windows và ứng dụng trên mạng.
Chương V : Thiết kế chương trình truyền tiếng nói qua mạng LAN thông qua sự trợ
giúp của công cụ SDK. Đánh giá và các kết quả thử nghiệm.
Phần kết luận : Nêu những kết quả của đề tài và hướng nghiên cứu hướng phát triển
tiếp theo.
Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ
LUẬN VĂN TỐT NGHIỆP
Trang 2
Việc nghiên cứu lý thuyết một cách hệ thống và xây dựng chương trình phần
mềm đòi hỏi phải đầu tư nhiều thời gian. Với thời gian có hạn cho nên bài luận văn
này của em không tránh khỏi những thiếu sót, em rất mong được sự chỉ dẫn thêm của
thầy cô và các bạn.
Nhân đây, em xin chân thành cám ơn đến PGS - TS Nguyễn Thị Hoàng Lan,
người trực tiếp hướng dẫn em hoàn thành cuốn luận văn này. Em xin chân thành cám
ơn các thầy cô trong khoa Công nghệ thông tin Trường ĐH Bách Khoa HN, Trường
ĐH Thủy Sản và toàn thể các bạn đã giúp đỡ em hoàn thành cuốn luận văn này.
CHƢƠNG I
TÌM HIỂU MÔ HÌNH ĐIỆN THOẠI QUA MẠNG
I.1 CÁC MÔ HÌNH ĐIỆN THOẠI
I.1.1 MÁY TÍNH ĐẾN MÁY TÍNH
Trong mô hình này cả hai thuê bao đều sử dụng máy tính đƣợc nối vào mạng
IP nhƣ một thiết bị đầu cuối. Tiếng nói đƣợc mã hoá sau đó là nén và quá trình nhận
dữ liệu hoàn toán giống nhƣng với quy trình ngƣợc lại là giải nén, giải mã bằng phần
mềm. Trong mô hình này đòi hỏi cả hai thuê bao cần phải có soundcard, microphone,
loa và phần mềm giống nhau.[1]
Máy tính
IP
Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ
Máy tính
LUẬN VĂN TỐT NGHIỆP
Trang 3
Hình I.1 : Mô hình PC - PC
Máy tính
Gateway
I.1.2 MÁY TÍNH ĐẾN ĐIỆN THOẠI HOẶC ĐIỆN THOẠI ĐẾN MÁY TÍNH
Trong mô hình này, một thuê bao sử dụng máy tính nối mạng với mạng còn
thuê bao kia sử dụng điện thoại trong mạng PSTN/ISDN/GSM/TDM. Sử dụng một
gateway để chuyển tiếng nói trên mạng IP thành tiếng nói trên mạng PSTN và trao đổi
thông tin giữa hai mạng trên. Nhƣ vậy, ở đây máy tính phải đầy đủ các thiết bị nhƣ
Soundcard, loa, microphone và phần mềm thông qua server của mạng IP để có thể kết
nối với mạng PSTN thông qua Geteway.
IP
Điện thoại
PSTN
Hình I.2 : Mô hình Máy tính – Điện thoại
PSTN
Điện thoại
IP
Gateway
PSTN
Gateway
Điện thoại
I.1.3 ĐIỆN THOẠI ĐẾN ĐIỆN THOẠI
Trong mô hình này, cả hai thuê bao đều sử dụng điện thoại bình thƣờng và
mạng IP đƣợc sử dụng trong trƣờng hợp cuộc gọi đƣờng dài. Gateway đƣợc sử dụng ở
cả hai đầu để chuyển đổi dữ liệu giữa các mạng với nhau.[1]
Hình I.3 : Mô hình Điện thoại – Điện thoại
I.2 YÊU CẦU ỨNG DỤNG TRUYỀN ÂM THANH TRÊN MẠNG LAN
Trong phần này sẽ phân tích các yêu cầu xây dựng ứng dụng truyền âm thanh
trên mạng LAN : Từ ba mô hình trên em nhận thấy mô hình 2 và 3 đòi hỏi quá trình
nghiên cứu và thiết bị phức tạp, đòi hỏi phải đầu tƣ công nghệ mới có thể thực hiện
đƣợc. Nên trong đồ án này chỉ có thể thức hiện theo mô hình 1 là PC – PC, nó đơn
giản hơn và không cần đầu tƣ thiết bị mới, có thể tận dụng các thiết bị có sẵn và điều
quan trọng có thể thử nghiệm hoàn chỉnh trong phạm vi đồ án.
Vấn đề đặt ra là với một hệ thống mạng LAN, WAN cùng với tài nguyên sẵn
có của nó xây dựng một chƣơng trình truyền tiếng nói với thời gian thực cho phép từ
máy này sang máy khác (point to point) với một số các yêu cầu thích hợp giống nhƣ
việc xử lý và truyền tiếng nói trong thông tin liên lạc (điện thoại hữu tuyến). Chƣơng
trình sử dụng giao thức TCP/IP là một giao thức phổ biến và tin cậy hiện nay để kết
Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ
LUẬN VĂN TỐT NGHIỆP
Trang 4
nối và truyền tiếng nói. Do sử dụng giao thức TCP là giao thức có liên kết nên dẫn
đến độ trễ rất lớn nhƣng với ứng dụng trong mạng LAN thì vẫn có thể chấp nhận
đƣợc. Ngay khi tiếng nói đƣợc thu và có thể qua một số các xử lý nhƣ mã hoá tiếng
nói hoặc nén trên một máy, tiếng nói đƣợc truyền tới máy cần kết nối và qua các xử lý
ngƣợc so với lúc thu nhƣ giải nén và giải mã để đƣợc phát ra loa. Chƣơng trình cho
phép kết nối hai máy và tạo một mô hình điện thoại trên máy tính nhƣ điện thoại hữu
tuyến thông thƣờng. Bất kỳ máy nào trong mạng cũng có thể ở chế độ chờ hay chế độ
chạy nền (background) gọi máy là P-SERVER; máy ở chế độ gọi (active) gọi là PCLIENT. Nhƣ vậy một máy trong mạng có thể là P-SERVER hoặc P-CLIENT. Trên
môi trƣờng mạng, khi chúng ta muốn nói chuyện một ngƣời trên một máy nào đó,
chúng ta sẽ tiến hành việc gọi liên kết. Việc gọi liên kết đƣợc tiến hành bằng việc xác
định địa chỉ IP của máy mà chúng ta cần liên kết. Sau đó chúng ta sẽ chờ việc xác lập
liên kết. Ở máy đƣợc gọi sẽ có thông báo cho ngƣời sử dụng biết rằng có một ngƣời
khác muốn nói chuyện. Tùy theo ngƣời đó quyết định có chấp nhận hay không. Nếu
chấp nhận thì liên kết sẽ đƣợc xác lập và hai bên sẽ có thể tiến hành trao đổi thông tin
với nhau.
Trong quá trình trao đổi thông tin, các máy sẽ truyền tiếng nói của ngƣời sử
dụng đồng thời nhận dữ liệu âm thanh của máy liên kết. Khi nói chuyện xong, liên kết
sẽ bị hủy bỏ và chƣơng trình kết thúc. Nếu máy đƣợc gọi không có ngƣời trả lời thì
sau thời gian chờ vƣợt quá giới hạn thì liên kết cũng sẽ bị huỷ bỏ. Vì dữ liệu truyền
nhận trong chƣơng trình là dữ liệu dạng liên tục của âm thanh cho nên có các yêu cầu
đặt ra nhƣ sau: Bảo đảm tính mạch lạc của dữ liệu. Tiếng nói trong quá trình thông tin
phải rõ ràng, liền lạc, không bị ngắt quãng.
Các yêu cầu trên đặt ra các nhiệm vụ mà chúng ta phải giải quyết trong việc
xây dựng chƣơng trình. Đối với dữ liệu là âm thanh, chúng ta phải xem xét các thông
số trong quá trình lấy mẫu ở đầu vào. Các thông số đặc trƣng nhƣ : tần số lấy mẫu, số
bit biểu diễn cho một điểm lấy mẫu, kênh lấy mẫu đƣợc sử dụng 1 kênh (mono) hay
hai kênh (stereo). Do đó chúng ta phải tổ chức kích thƣớc buffer âm thanh sao cho phù
hợp với việc truyền nhận đạt tốc độ cao. Một vấn đề khác đƣợc đặt ra với dữ liệu âm
thanh là việc nhận và phát ở đầu ra, chúng ta phải quan tâm đến việc xử lý và loại bỏ
các tín hiệu nhiễu giúp cho âm thanh đƣợc rõ ràng, trung thực. Do việc truyền nhận
dữ liệu là trên môi trƣờng mạng nên chúng ta phải quan tâm đến tốc độ, lƣu lƣợng trao
đổi dữ liệu, thời gian truyền nhận để đƣa ra cách giải quyết cho phù hợp. Ngoài các
vấn đề chính ở trên, một số yêu cầu khác đặt ra cho ứng dụng nhƣ : cơ chế tạo lập liên
kết, việc chọn lựa các dạng format dữ liệu, định các thông số thời gian. Tất cả các
nhiệm vụ thực thi đều phải đƣợc thực hiện thông qua giao diện dễ dàng cho ngƣời sử
dụng.[3]
Trƣờng hợp mở rộng hệ thống cho mạng Internet cần một kết nối giữa server
mạng với tổng đài mạng PABX, yêu cầu này đòi hỏi phức tạp hơn và cần có các trang
thiết bị để thử nghiệm. Bởi vậy trong đồ án này em chỉ nghiên cứu cách thức truyền
tiếng nói trên mạng nội bộ.
Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ
LUẬN VĂN TỐT NGHIỆP
Trang 5
CHƢƠNG II
KHẢO SÁT CÁC GIAO THỨC TRUYỀN THÔNG
II.1 KHÁI NIỆM CƠ BẢN GIAO THỨC TCP/IP
Trong hệ thống mạng Internet, mỗi máy có một tên và một địa chỉ IP (Internet
Protocol). Tên hay địa chỉ IP đều xác định duy nhất một máy trong hệ thống mạng
Internet. Giữa tên máy và địa chỉ IP đều có thể chuyển đổi thông qua các hàm. Địa chỉ
IP đều đƣợc biểu diễn bằng một số 32 bits. Mỗi giao diện mạng trong một nút nếu có
hỗ trợ một ngăn xếp IP đều đƣợc gán một địa chỉ IP. Địa chỉ IP gồm 2 phần : chỉ số
mạng(netid) và chỉ số của máy chủ (hostid). Những bits quan trọng nhất đƣợc dùng để
xác định số lƣợng bits dùng cho netid và hostid. Có 5 lớp địa chỉ đƣợc xác định là
A,B,C,D và E. Trong đó, lớp A,B,C chứa địa chỉ có thể gián đƣợc. Lớp D dành riêng
cho kỹ thuật Multicasting và đƣợc sử dụng trong các giao thức đặc biệt để truyền
thông điệp đến một nhóm nút đƣợc chọn lọc. Lớp E dành riêng cho những ứng dụng
trong tƣơng lai.[5]
Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ
LUẬN VĂN TỐT NGHIỆP
Trang 6
Hình II.1 Các lớp đại chỉ IP
Hình II.2 TCI/IP và mô hình OSI
Netid nhận dạng cho từng mạng riêng biệt. Các kiểu lớp địa chỉ IP cho thấy số
lƣợng mạng và số lƣợng nút của mỗi lớp khác nhau. Bảng dƣới cho thấy số lƣợng
mạng và số lƣợng nút có thể của mỗi lớp địa chỉ :
Lớp địa chỉ
A
B
C
Số lƣợng mạng
127
16.383
2.097.151
Số lƣợng nút
16.777.241
65.534
254
Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ
LUẬN VĂN TỐT NGHIỆP
Trang 7
Mạng lớp A dùng cho mạng diện rộng. Trƣờng netid có 7 bits nên có thể có
127 mạng. Mạng lớp B là mạng có kích thƣớc trung bình và thích hợp cho các tổ chức
có quy mô lớp và vừa. Mạng lớp C dùng trong cơ quan nhỏ, trong đó mỗi mạng chỉ có
không hơn 254 nút.
Con số 32 bits biểu thị 4 chữ số thập phân tƣơng ứng giá trị 4 byte tạo thành
địa chỉ IP. Những số thập phân cách nhau bởi dấu chấm (.). Một ví dụ về tên máy và
địa chỉ IP của máy :
Hostname : viethung
IP Address : 192.168.0.55
II.1.1 KHÁI NIỆM SOCKET
Socket là một đơn vị cấu trúc truyền thông 2 chiều. Chúng có thể đọc hay ghi
lên nó. Tuy nhiên mỗi socket là một thành phần của một mối nào đó giữa các máy trên
mạng máy tính và các thao tác đọc ghi chính là các thao tác trao đổi dữ liệu giữa các
ứng dụng trên nhiều máy khác nhau. Socket là điểm kết nối cuối cùng cho phép những
ứng dụng gắn vào mạng. Khái niệm socket đƣợc cung cấp bởi một thƣ viện chứa tất
cả các hàm yêu cầu cho bất kỳ chƣơng trình mạng nào. Khi một ứng dụng yêu cầu các
dịch vụ mạng, nó gọi quá trình tự tập hợp các thƣ viện để quản lý hoạt động mạng.
Hai loại socket có sẵn stream và datagram.[5]
Những socket stream dùng cho TCP (Transmission Control Protocol), những
socket datagram dùng UDP (User Datagram Protocol).
Máy B
Máy A
Port
Mối nối
Port
TCI/IP Interface
Hình II.3 Các socket và port trong mối nối TCP/IP
Số hiệu cổng
0
2
5
7
9
11
13
15
17
20
21
23
25
Mô tả
Reserved
Management Entry
Remote Job Entry
Echo
Discard
Systat
Daytime
Netstat
Quoted(quote of the day)
FTP data
FTP control
Telnet
SMTP
Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ
LUẬN VĂN TỐT NGHIỆP
37
42
49
53
80
102
103
104
111
139
160-223
Trang 8
Time
Host name server
Login host protocol
Domain name server
World wide web HTTP
ISO-TSAP
x.4000
X.4000 sending server
Sun RPC
NetBIOS session source
Reserved
Ghi chú :
Trị số của cổng trong các ứng dụng :
- Các ứng dụng chuẩn : 0 – 999
- Các ứng dụng không chuẩn : 1000 – 64000
II.1.2 GIAO THỨC IP
Internet protocol (IP) là một dạng giao thức truyền tin đƣợc thiết kế cho mạng
chuyển mạng gói. Vai trò của IP tƣơng đƣơng với vai trò của tầng mạng trong mô
hình OSI. Giao thức IP đảm nhiệm việc chuyển những gói mạch dữ liệu (datagram) từ
địa chỉ nguồn đến địa chỉ đích. Địa chỉ IP có địa chỉ cố định (4 byte) dùng để xác định
duy nhất các trạm làm việc đang tham gia vào việc truyền, nhận dữ liệu. Trong trƣờng
hợp mạng truyền tin chỉ có thể truyền những gói dữ liệu có kích thức nhỏ, giao thức
IP cũng đảm nhiệm chức năng chia nhỏ các gói dữ liệu có kích thƣớc lớn trƣớc khi
truyền và gộp chúng lại chúng sau khi nhận đƣợc.[5]
Giao thức IP đƣợc thiết kế với chức năng chuyển 1 gói các bit, gọi là internet
datagram từ địa chỉ nguồn đến địa chỉ đích. Đây là một giao thức theo kiểu không liên
kết, nghĩa là không có giai đoạn thiết lập liên kết trƣớc khi truyền dữ liệu, nó cũng
không có các cơ chế bảo đảm thông tin tới đích an toàn, không có cơ chế điều khiển
luồng dữ liệu. Trên thực tế việc thông báo về lỗi đƣờng truyền có thể đƣợc thực hiện
nhờ một giao thức khác có tên ICMP( Internet Control Message Protocol).
Địa chỉ IP nhƣ đã nói ở trên, là một chuỗi bit có độ dài 4 byte, đƣợc phân chia
làm 5 lớp và các bit đầu tiên đƣợc dùng làm định danh lớp địa chỉ.
II.2 GIAO THỨC TCP
Giao thức TCP là giao thức dùng cho tầng ngay trên tầng IP. Đối với mô hình
OSI, ta có thể thấy tầng TCP có vai trò tƣơng ứng với các tầng giao vận và tầng phiên
.
Khác với IP, TCP là giao thức có liên kết (connection oriented), nghĩa là nhất
thiết phải có giai đoạn thiết lập liên kết giữ các cặp thực thể TCP trƣớc khi chúng có
trao đổi dữ liệu với nhau. Giao thức TCP cung cấp một khả năng truyền dữ liệu một
cách an toàn giữa các thực thể trên mạng. Nó cung cấp các chức năng nhằm kiểm tra
tính chính xác của dữ liệu khi gửi đến và gửi lại dữ liệu khi có lỗi xảy ra.[5]
Đơn vị dữ liệu cơ bản của TCP gọi là segment. Trong segment có một cặp
tham số là số hiệu cổng của trạm nguồn và số hiệu cổng của trạm đích. Mỗi một tiến
trình ứng dụng tại một trạm sẽ truy cập các dịch vụ TCP thông qua một cổng. Một
Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ
LUẬN VĂN TỐT NGHIỆP
Trang 9
cổng nhƣ vậy kết hợp với một địa chỉ IP sẽ tạo thành một socket duy nhất trong mạng.
Dịch vụ TCP đƣợc cung cấp nhờ liên kết logic giữa một cặp socket, mỗi socket có thể
tham gia liên kết với nhiều socket ở xa khác nhau. Trƣớc khi truyền dữ liệu chúng
thiết lập liên kết và khi không có nhu cầu truyền dữ liệu nữa thì liên kết sẽ đƣợc giải
phòng.
Mỗi ứng dụng TCP gồm hai phần là client và server.
Lƣu đồ sau minh họa các bƣớc cần thiết để các ứng dụng client và server giao tiếp với
nhau :
Hình II.4 Tạo kết nối giữa client và server theo giao thức TCP
II.2.1 CÁCH THỨC CÀI ĐẶT ỨNG DỤNG TCP SERVER
Ứng dụng TCP server làm việc theo qui trình sau:
Gọi hàm socket để tạo một socket.
Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ
LUẬN VĂN TỐT NGHIỆP
Trang 10
Gọi hàm bind để kết buộc socket với một port, đối với mỗi giao thức ứng dụng
chuẩn thì sẽ có một hằng số đƣợc định nghĩa sẵn trong winsock cho port của giao thức
đó.
Gọi hàm listen để chờ đến khi có một client nối vào port.
Khi có một client nối vào thì hàm listen trả điều khiển về, ứng dụng server gọi
hàm accept để xác nhận mối nối của client.
Gọi các hàm gửi hay nhận dữ liệu để trao đổi thông tin với client, ví dụ send,
recv.
Sau khi đã hoàn tất quá trình trao đổi dữ liệu, ứng dụng server gọi hàm
closesocket để đóng socket đã tạo.
Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ
LUẬN VĂN TỐT NGHIỆP
Trang 11
Hình II.5 Sơ đồ giao tiếp giữa server với client
II.2.2 CÁCH THỨC CÀI ĐẶT ỨNG DỤNG CLIENT TCP
Ứng dụng client TCP làm việc theo qui trình sau :
- Gọi hàm socket để tạo một socket .
- Gọi hàm connect để nối vào server.
- Gọi hàm gửi hay nhận dữ liệu để trao đổi thông tin với server, ví dụ nhƣ
hàm send, recv.
Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ
LUẬN VĂN TỐT NGHIỆP
-
Trang 12
Sau khi đã hoàn tất quá trình trao đổi dữ liệu, ứng dụng client gọi hàm
closesocket để đóng socket đã tạo.
Hình II.6 Sơ đồ giao tiếp của client với server
Ghi chú:
Các bƣớc trên cơ bản là giống nhau cho các ứng dụng client và server viết trên
Windows NT và UNIX. Tuy nhiên, với ứng dụng viết trên UNIX thì không cần gọi
các hàm WSAStartup, WSACleanup để khởi tạo thƣ viện quản lý socket và đóng bộ
phận này. Lý do, với UNIX thì bộ phận quản lý socket đã đƣợc hệ điều hành nạp sẵn.
II.3 GIAO THỨC UDP
Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ
LUẬN VĂN TỐT NGHIỆP
Trang 13
Giao thức UDP cung cấp khả năng broadcast trên hệ thống mạng TCP/IP .
Chúng ta cũng cần cài đặt ứng dụng client và server. Ứng dụng client có nhiệm vụ gửi
thông báo đến tất cả các instance của ứng dụng server đang chạy trên hệ thống
mạng.[5]
II.3.1 CÁCH CÀI ĐẶT ỨNG DỤNG SERVER UDP
Ứng dụng server UDP đƣợc cài đặt đơn giản hơn ứng dụng TCP. Chúng ta cần
các bƣớc chính sau đây :
- Gọi hàm socket để tạo một socket .
- Gọi hàm bind để kết buộc socket với một port, đối với mỗi giao thức ứng
dụng chuẩn thì sẽ có một hằng số đƣợc định nghĩa sẵn trong winsock cho
port của giao thức đó.
- Gọi các hàm gửi hay nhận dữ liệu để trao đổi thông tin với client, ví nhƣ
hàm sendto, recvfrom.
- Sau khi đã hoàn tất quá trình trao đổi dữ liệu, ứng dụng server gọi hàm
closesocket để đóng socket đã tạo.
II.3.2 CÁCH CÀI ĐẶT ỨNG DỤNG CLIENT UDP
Ứng dụng client UDP thực hiện các bƣớc sau :
- Gọi hàm socket để tạo một socket.
- Gọi hàm setsockopt để làm cho socket có khả năng broadcoast .
- Gọi các hàm gửi hay nhận dữ liệu để trao đổi thông tin với server, ví dụ
hàm sendto, recvfrom.
- Sau khi đã hoàn tất quá trình trao đổi dữ liệu, ứng dụng client gọi hàm
closesocket để đóng socket đã tạo.
Ghi chú:
Ngoài các bƣớc trên, các ứng dụng viết trên Windows NT (kể cả client và
server) phải gọi hàm WSAStartup để khởi tạo thƣ viện liên kết động Windows Socket
DLL và hàm WSACleanup để đóng thƣ viện này. Tuy nhiên, đối với ứng dụng viết
trên UNIX thì bộ phận quản lý socket đã đƣợc hệ điều hành nạp sẵn và do đó không
cần gọi các hàm nhƣ WSAStartup, WSACleanup của Windows NT.
CHƢƠNG III
PHƢƠNG PHÁP MÃ HOÁ VÀ NÉN ÂM THANH
Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ
LUẬN VĂN TỐT NGHIỆP
Trang 14
III.1 CÁC PHƢƠNG PHÁP MÃ HOÁ
III.1.1 GIỚI THIỆU CHUNG
Trong hệ thống xử lý âm thanh, âm thanh đƣợc mã hoá PCM. Các mã hoá này
cho phép khôi phục một cách tƣơng đối trung thực tín hiệu âm thanh trong dải tần
nghe đƣợc. Tuy nhiên trong một ứng dụng đặc biệt nhƣ truyền dữ liệu âm thanh trên
mạng, âm thanh đƣợc truyền với tốc độ thấp hơn nhiều. Từ đó xuất hiện một số kỹ
thuật mã hoá và nén tín hiệu âm thanh nhƣ ADPCM, LPC, GSM….
Các loại phần mềm và phần cứng thực hiện mã hoá và nén âm thanh sang các
loại dữ liệu số thƣờng đƣợc gọi là codec(Coder-Decoder). Có thể phân loại các
phƣơng pháp mã hoá âm thanh thành 3 loại :
Mã hoá dạng sóng(waveform codec) : Giữ nguyên hình dạng nguyên thuỷ của
sóng âm. Phƣơng pháp mã hoá này đòi hỏi tốc độ dữ liệu rất cao nhƣng lại cho chất
lƣợng âm thanh rất tốt. Ƣu điểm của bộ mã hoá này là độ phức tạp, giá thành thiết kế,
độ trễ và công suất tiêu thụ thấp. Bộ mã hoá sóng đơn giản nhất là điều biên xung mã
(PCM)…Tuy nhiên nhƣợc điểm của bộ mã hoá là không tạo đƣợc âm thanh chất
lƣợng cao tại tốc độ dƣới 16 kbps, bộ mã nguồn khắc phục đƣợc nhƣợc điểm này.[4]
Mã hoá nguồn (Source codec) : Cho phép đạt đƣợc tốc độ truyền dữ liệu thấp,
có thể thực hiện tại tốc độ bit > 2kbps, nhƣng chất lƣợng âm thanh không cao.
Mã hoá hỗn hợp (hybrid codec) : Sử dụng cả hai phƣơng pháp trên để tạo ra tín
hiệu âm thanh có chất lƣợng tốt ở tốc độ dữ liệu trung bình.
Chất lƣợng tiếng nói
Rất tốt
Mã hoá hỗn
hợp
Mã hoá dạng sóng
Mã hoá dự đoán
tuyến tính LPC
Tốt
Trung
bình
2 Biểu
4 đồ
8 so sánh
16 32
64
Tốc
Hình III.1
các phƣơng
pháp
mãđộhoá
Mã hoá dạng sóng
Đòi hỏi tốc độ bit rất cao nhƣng tạo ra chất lƣợng âm thanh hoàn hảo và thời
gian xử lý rất ít, bởi vì phƣơng pháp này chỉ đơn giản lấy mẫu tín hiệu ở tốc độ nào đó
và lƣợng tử hoá từng mẫu dùng lƣợng tử hoá tuyến tính. Cách tiếp cận này gọi là điều
biến xung mã(PCM). Am thanh mã hoá theo phƣơng pháp PCM, lấy mẫu tốc độ
8KHz, lƣợng tử 8bit/mẫu, cho tốc độ bit ra là 64 kbps.
Phƣơng pháp điều biên xung mã vi phân (DPCM) dự đoán giá trị hiện tại dựa
vào các giá trị trƣớc của các mẫu quá khứ, chỉ lƣu trữ giá trị sai số lƣợng tử. Giá trị sai
số này sẽ nhỏ hơn giá trị thực của mẫu, do đó cho phép lƣu trữ giảm đi một phần.
Một cải tiến của DPCM là điều biến xung mã vi phân thích nghi(ADPCM). Bộ
tiến đoán và lƣợng tử hoá trong phƣơng pháp này có khả năng thích nghi với tín hiệu
Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ
LUẬN VĂN TỐT NGHIỆP
Trang 15
cần mã hoá. ADPCM hoạt động tốc độ 32 kbps cho chất lƣợng tƣơng đối với PCM 64
kbps.
Mã hoá dự đoán tuyến tính LPC
Một vấn đề đáng quan tâm là phƣơng pháp mã hoá dạng sóng là khi lấy mẫu tín
hiệu tƣơng đƣơng sẽ cho ra dòng dữ liệu khá lớn. Các phƣơng pháp mã hoá nguồn đi
theo một cách tiếp cận khác, ngƣời ta phải qua tâm đến việc âm thanh đƣợc tạo ra nhƣ
thế nào, nếu có thể mô hình hoá cách tạo ra âm thanh thì không phải truyền đi các mẫu
của tín hiệu âm thanh mà chỉ cần gửi đi cách thức tạo ra âm đó trên đến bộ mã. Nhƣ
vậy theo phƣơng pháp này thay vì mã hoá và truyền trực tiếp âm thanh thì ngƣời ta chỉ
mã hoá các tham số tạo ra âm thanh tại nơi nhận, từ các tham số này bộ tổng hợp tiếng
nói sẽ tổng hợp nên tiếng nói nhân tạo. Những phƣơng pháp đi theo cách tiếp cận này
gọi là Vocoder. Mô tả đơn giản nhất của mô hình này là mã hoá dự đoán tuyến tính
(LPC). Phƣơng pháp mã hoá Vocoder cho tốc độ bit rất thấp (>2 kbps) nhƣng độ phức
tạp cao hơn với phƣơng pháp mã hoá dạng sóng và chất lƣợng âm thanh không trung
thực .
Mã hoá hỗn hợp
Để giải quyết vấn đề của phƣơng pháp mã hoá dạng sóng và của phƣơng pháp
mã hoá dự đoán, một nhóm các phƣơng pháp mã hoá sử dụng phƣơng pháp AbS
(Analysis by Synthesis) để tạo ra mô hình máy phát âm phức tạp hơn. Trong khi
Vocoder sử dụng bộ lọc tuyến tính kích thích bởi chuỗi xung tuần hào hay chuồi nhiễu
trắng để tạo ra âm hữu thanh hay vô thanh, AbS sử dụng một dãy các trạng thái đƣợc
lƣu trữ trong codebook. Khi xem xét một khung âm thanh, AbS kiểm tra khung đó với
rất nhiều tín hiệu kích thƣớc rồi sẽ chọn tín hiệu nào đƣa ra kết quả gần đúng nhất với
âm thanh ban đầu. Bộ giải mã chỉ cần biết chỉ số của xung kích thƣớc đó, sau đó tra
codebook rồi tái tạo lại âm thanh. Một số các tham số khác nhau nhƣ năng lƣợng của
sự kích thích và giá trị chu kỳ cũng cần đến khi giải mã. Các phƣơng pháp mã đi theo
cách này đòi hỏi quá trình tính toán phức tạp, có thể tất cả các mục trong từ điển đều
phải thử để đƣa ra giá trị tốt nhất.
Hệ thống thông tin toàn cầu GMS : GSM là mộ chuẩn điện thoại đƣợc Viện
Tiêu Chuẩn Viễn Thông Châu Au ETSI để ra. Đầu vào của bộ nén GMS 06.10 bao
gồm các khung 160 mẫu các tín giệu PCM tuyến tính lấy mẫu tại tần số 8 kHz. Chu
kỳ mỗi khung là 20 ms, đây là khoảng thời gian rất ngắn và trong khoảng thời gian
này cho phép đƣợc coi tín hiệu âm thanh ổn định. Độ trễ truyền dẫn thông tin đƣợc
tính bằng tổng thời gian xử lý và kích thƣớc khung của thuật toán.
Bộ mã hoá thực hiện việc nén một khung tín hiệu đầu vào 160 mẫu (20 ms) vào
một khung 260 bit. Nhƣ vậy một giây nó sẽ thực hiện nén đƣợc 13.133 bit ( tƣơng
đƣơng với 1625 byte). Do vậy để nén một megabyte tín hiệu chỉ cần một thời gian
chƣa đầy 10 phút.[4]
Trung tâm của quá trình xử lý tín hiệu là bộ lọc. Đầu ra của bộ lọc phụ thuộc
rất nhiều vào giá trị đầu vào đơn của nó. Khi có một dãy các giá trị đƣa qua bộ lọc thì
dãy tín hiệu này sẽ đƣợc dùng để kích thích bộ lọc. Dạng của bộ nén GMS 06.10 dùng
để nén tín hiệu âm thanh bao gồm 2 bộ lọc và một giá trị kích thƣớc ban đầu. Bộ lọc
ngắn hạn dự đoán tuyến tính đƣợc đặt tại tầng đầu tiên của quá trình nén và tại tầng
cuối cùng trong suốt quá trình dãn. Nó đƣợc kích thích bởi đầu ra của bộ lọc dự đoán
dài hạn (LTP).
Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ
LUẬN VĂN TỐT NGHIỆP
Trang 16
III.1.2 PHƢƠNG PHÁP ĐIỀU BIẾN XUNG MÃ PCM
Mã hoá tín hiệu âm thanh liên qua tới các bƣớc sau đây :
a. Tín hiệu âm thanh đƣợc lấy mẫu với tần số tối thiểu là :
f s 2 f max
fs : tần số lấy mẫu
fmax : tần số lớn nhất trong tín hiệu đƣợc lấy mẫu.
Việc lấy mẫu nhƣ vậy là đảm bảo hoàn toàn khôi phục lại đƣợc tín hiệu tƣơng
đƣơng ban đầu bởi thiết bị khôi phục thiết bị. Tần số lấy mẫu nhỏ nhất cũng có thể
nhỏ hơn 2fmax nếu tần số thấp nhất của tín hiệu khác không.
b. Biên độ của từng mẫu tín hiệu đƣợc lƣợng tử hoá thành một trong số 2 B mức. Điều
này có nghĩa dùng B bit trên một mẫu và thông lƣợng là 2fsB bit/giây với tín hiệu
đƣợc lọc thông thấp.
c. Các mức biên độ riêng biệt đƣợc thể hiện bằng các từ nhị phân riêng biệt có chiều
dài B. ví dụ : với B =2 thì một từ có thể thể hiện cho 4 mức riêng biệt bằng cách sử
dụng các từ mã 00, 01, 10 và 11.
d. Đối với việc giải mã, các từu nhị phân đƣợc ứng thành các mức biên độ và chuỗi
xung biên độ – thời gian đƣợc lọc thông thấp với một bộ lọc có dải tần giới hạn là
fs. Bây giờ chúng ta giả sử là các bƣớc a, c và d có thể thực hiện một cách hoàn
toàn chính xác, chúng ta tập trung vào việc xác định các lỗi lƣợng tử xuất hiện
trong bƣớc b.
Cho bƣớc lƣợng tử (kí hiêu : ). Nếu số lƣợng các mức lƣợng tử rất lớn, ngƣời ta giả
sử rằng sai số lƣợng tử có phân bố đồng nhất nhƣ sau :
p(E )
1
, - E (1)
2
2
Điều này sẽ không đúng nếu tín hiệu là bão hoà bộ lƣợng tƣ. Ví du nhƣ biểu
diễn hình 1, đầu ra của bộ lƣợng tử có thể bão hoà tại 5 với tần số đầu và vƣợt qua số
lƣợng và mỗi lƣợng tử trong trƣờng hợp này sẽ là một hàm tăng tuyến tính.[4]
Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ
LUẬN VĂN TỐT NGHIỆP
Trang 17
Hình III.2 a.Đặc tuyến lƣợng tử hoá;b.Đặc tuyết sai số lƣợng tử; c.VD lƣợng tử đều
Nếu nhƣ ta cho rằng bộ lƣợng tử không bị bão hoà. Theo công thức (1) thì giá
trị bình phƣơng trung bình của sai số lƣợng tử là :
2
E 2 p( E )dE
2
(2)
12
2
Nếu giá trị độ rộng của đầu vào X là Xrms, thì tỷ số tín hiệu/nhiễu đƣợc tính bởi :
2
SNR X rms
/ 2 / 12 (3)
Ví dụ, cho bộ lƣợng tử có khoảng biên độ từ – 4Xrms đến + 4Xrms( để thuận
tiện về mặt lý thuyết, thì độ rộng 8Xrms của bộ lƣợng tử không có ràng buộc riêng,
ngoại trừ các trƣờng hợp đặc biệt. Ví dụ, nếu tín hiệu PDF p(x) đƣợc biến đổi bằng
hàm Gaussian trung bình – không, thì các mẫu tín hiệu sẽ rơi bên ngoài khoảng
8Xrms của bộ lƣợng tử với xác xuất nhỏ hơn 1/10.000). bƣớc lƣợng tử đều có thể
đƣợc thực hiện tỷ số của khoảng biên độ trên số lƣợng các bƣớc lƣợng tử (số các mức
đầu ra).
8 X rms / 2 B (4)
Từ (3) và (4) ta có :
SNR(dB) 10 log10 SNR 6B 7,2 (5)
Công thức trên miêu tả rất tốt về PCM với các điều kiện sau :
1.Hệ thống hoạt động với kênh sạch(không nhiễu), chỉ giới hạn về sai số lƣợng tử( và
không gây ra lỗi các từ mã khi kênh có nhiễu).
Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ
LUẬN VĂN TỐT NGHIỆP
Trang 18
2.Tín hiệu đầu vào đủ phức tạp để loại trừ cấu trúc thời gian hiển nhiên trong dạng tín
hiệu lỗi, nhƣ vậy biểu diễn tĩnh của lỗi trong 1 đƣợc thể hiện đầy đủ.
3.lƣợng tử hoá đủ mịn(B>6) để ngăn chặn những thành phẩm liên quan đến tín hiệu
trong dạng tín hiệu lỗi, sai số có thể đƣợc đo trong biểu thức công suất nhiễu hay là
biến sai số 2.
4.Bộ lƣợng tử đƣợc sắp với thanh biên độ từ (-4Xrms;+4Xrms)
nhƣ vậy trong lƣợng tử đều, cứ thêm 1 bit thì đƣợc lợi 6 dB và để có chất lƣợng thích
hợp thì B >11 do đó thông lƣợng tƣơng đối lớn.
III.2 CÁC PHƢƠNG PHÁP NÉN TIẾNG NÓI
III.2.1 GIỚI THIỆU CHUNG
Y tƣởng nén tiếng nói là để giảm kích thƣớc nhằm giúp ít tốn băng thông
truyền qua mạng. Dòng dữ liệu tiếng nói đƣợc giải nén ở tốc độ lấy mẫu mặc định (
8bits/mẫu, 8 khz, kênh mono) sẽ yêu cầu đƣờng truyền có tốc độ 8000 mẫu/giây * 8
bits/ mẫu = 64 Kbits/giây để truyền dữ liệu qua mạng. Do đó, tùy theo tốc độ đƣờng
truyền thực tế trên mỗi mạng mà chọn giải pháp nén hay không nén dữ liệu trƣớc khi
truyền dữ liệu âm thanh qua mạng, cũng nhƣ chọn tỉ lệ nén là bao nhiêu cho phù hợp
(chọn giải thuật nén). Vì nếu dữ liệu đƣợc nén thì phải giải nén khi đƣợc truyền đến
máy nhận, do đó cũng tốn thời gian để nén và giải nén dữ liệu, điều này dẫn đến ảnh
hƣởng thời gian thực của hệ thống.
Đối với các mạng cục bộ, thƣờng có tốc độ truyền của mạng cao nên có thể
không cần phải nén tiếng nói trƣớc khi truyền.
Ngƣợc lại, đối với mạng Internet, hệ thống đƣợc kết nối với Internet thông qua
các modem chuẩn có tốc độ thấp 14,4 Kbits/s hoặc 28,8Kbits/s thì nhất thiết phải nén
tiếng nói trƣớc khi truyền và giải nén trƣớc khi phát. Hai phƣơng pháp nén âm thanh
thƣờng đƣợc dùng nhất để giảm băng thông là GSM và ADPCM.[2]
III.2.2 CÁC PHƢƠNG PHÁP NÉN CỤ THỂ
III.2.2.1 Phƣơng pháp nén tiếng nói theo chuẩn GSM
Phát triển tại Đại học Kỹ thuật Berlin vào năm 1992, GSM là một trong những
phƣơng pháp nén âm thanh phức tạp nhất đang đƣợc sử dụng, cho tỉ lệ nén 1:10. Giải
thuật GSM dựa trên giao thức truyền thông Mobile Phone, hiện tại là giao thức phổ
biến nhất tại Châu Âu đối với điện thoại di động.
Đầu vào của GSM bao gồm các frames 160 tín hiệu, những tín hiệu PCM tuyến
tính 13 bits lấy mẫu ở 8 Khz. GSM có sẵn trong thƣ viện C có thể đƣợc dùng để tạo ra
một đối tƣợng gsm giữ trạng thái cần thiết hoặc để mã hóa những mẫu PCM tuyến
tính thành các frames GSM, hoặc giải mã các frames GSM thành các frames PCM
tuyến tính. Bộ mã hóa nén 160 frames PCM 16 bits thành các frames GSM 260 bits.
Tƣơng ứng một giây tiếng nói thành 1625 bytes. Bởi vì mẫu 260 bits không chẵn để
gắn vào các bytes 8 bits, nên bộ mã hóa sẽ mã hóa frame 160 bytes thành frame GSM
264 bits. Một buffer GSM nén 1 Mb có thể lƣu tiếng nói gần 10 phút.[2]
Một dòng dữ liệu tiếng nói giải nén 16 bits/mẫu ở 8Khz yêu cầu băng thông tốc
độ 128 Kbits/s, trong khi đó băng thông để truyền qua mạng nếu dùng giải thuật nén
GSM , tiếng nói 16 bits/mẫu chỉ cần:
( 264 bits * 8.000 mẫu/giây)/160 mẫu = 13,2 Kbits/giây
Cho tỉ lệ nén 128/13,2 = 9,7 tƣơng đƣơng 10 :1.
Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ
LUẬN VĂN TỐT NGHIỆP
Trang 19
III.2.2.2 Phƣơng pháp nén ADPCM
Nguyên tắc :
Là một phƣơng pháp có thể đƣợc dùng để nén các khối dữ liệu tiếng nói trƣớc
khi chúng đƣợc truyền đến các máy nhận và giải nén chúng để phát lại sau khi đƣợc
nhận từ đƣờng truyền.
Hình sau là một giản đồ khối đơn giản của bộ mã hóa và giải mã ADPCM :
Hình III.3 Sơ đồ khối bộ mã hoá và giải mã ADPCM
Bộ mã hóa ADPCM giả sử rằng những mẫu âm thanh kế cận nhau sẽ giống
nhau, vì thế thay vì biểu diễn mỗi mẫu độc lập nhƣ PCM. ADPCM tính toán sự chênh
lệch giữa các mẫu âm thanh và giá trị tiên đoán của nó và tạo ra những giá trị vi phân
PCM. Có nhiều giải thuật ADPCM khác nhau đƣợc đề nghị. Trong phạm vi luận văn
này em tìm hiểu và ứng dụng giải thuật đƣa ra bởi IMA (Interactive Multimedia
Association) .
Giải thuật IMA ADPCM nén những mẫu PCM tuyến tính thành các mức lƣợng
hóa 4 bits, trong đó mỗi mẫu DPCM đƣợc biểu diễn bằng các giá trị âm thanh 16 bits,
do đó giải thuật này cung cấp một tỉ lệ nén là 4:1. Ví dụ tiếng nói 16 bits/mẫu, 8 Khz,
kênh mono yêu cầu tốc độ truyền dữ liệu là 128 Kbits/s , khi nén với giải thuật
IMA_ADPCM chỉ cần tốc độ truyền dữ liệu 32 Kbits/s là đủ.
Quá trình thực hiện của giải thuật IMA_ADPCM là đọc từ những bộ đệm có
giá trị kiểu nguyên và nén chúng thành một mẫu âm thanh 16 bits đƣợc biểu diễn bằng
các mức lƣợng hóa 4 bit. Bởi vì không có giới hạn trong kích thƣớc buffers tiếng nói
nên những mã ADPCM đƣợc kết hợp một cách dễ dàng với các phần còn lại của
chƣơng trình để nén tiếng nói khi thu và giải nén trở lại khi phát.
Giải thuật nén IMA ADPCM :
Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ
LUẬN VĂN TỐT NGHIỆP
Trang 20
Theo sơ đồ mã hóa trên chúng ta thấy giải thuật IMA ADPCM tính toán sự
chênh lệch giữa mẫu âm thanh hiện tại X[n] và mẫu đã tiên đoán trƣớc Xp[n-1] và sử
dụng sự chênh lệch đó để tính toán mức lƣợng hóa D[n] cho mỗi mẫu. Giá trị Xp[n-1]
chỉ là giá trị trễ thời gian của giá trị X[n]. Hình sau chỉ ra sơ đồ khối của quá trình
lƣợng hóa dùng giải thuật IMA. Mỗi mức đầu ra của bộ lƣợng hóa đƣợc biểu diễn
bằng bốn bits. Bit thứ tƣ là bit dấu của mức độ lƣợng hóa.[2]
Hình III.4 Sơ đồ giải thuật mã hoá nén IMA ADPCM
Từ sơ đồ giải thuật ta thấy rằng bit thứ ba đƣợc cài đặt lên 1 nếu độ chênh lệch
giữa X[n] và Xp[n-1] là lớn hơn hay bằng step_size. Sau đó step_size đƣợc chia 2 và
so sánh trở lại với độ chênh lệch (độ chênh lệch sẽ đƣợc tính lại Mẫu = mẫu-kích
thƣớc mẫu tại bƣớc giải thuật nếu bit thứ ba đƣợc cài lên1). Bit thứ hai cũng đƣợc cài
lên 1 khi độ chênh lệch mới ≥ kích thƣớc mẫu tại bƣớc giải thuật/2. Bộ mã hóa một
lần nữa laị chia kích thƣớc mẫu tại bƣớc giải thuật cho 2 và so sánh với độ chênh lệch
mới và thiết lập giá trị cho bit một tƣơng tự nhƣ các bƣớc trƣớc.
Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ
- Xem thêm -