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

VIDEO TRANSMISSION USING THE NS2 SIMULATOR

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 (2.02 MB, 35 trang )

VIDEO TRANSMISSION USING THE NS2
SIMULATOR
TÓM TẮT
Ngày nay, video đóng vai trò rất quan trọng trong thế giới giải trí và truyền
thông. Rất nhiều dịch vụ được phát triển trên công nghệ video như video
streamming, video call,…. Việc nhu cầu sử dụng các dịch vụ này ngày càng tăng
đòi hỏi các nhà cung cấp dịch vụ phải đảm bảo chất lượng, giám sát và cải thiện
chất lượng dịch vụ đang cung cấp cho người sử dụng.
Việc đảm bảo chất lượng video trong các dịch vụ nêu trên ngày càng trở lên bức
thiết hơn bao giờ hết, việc người sử dụng dịch vụ nhận được một video chất lượng
thấp ảnh hưởng rất lớn đến các nhà cung cấp dịch vụ. Nhằm nâng cao chất lượng
dịch vụ và chỉ số QoS (Quality of Experience) của người sử dụng, việc mô phỏng
và đánh giá chất lượng video là rất cần thiết.
Hiện nay, có rất nhiều công cụ để đánh giá chất lượng video đã được sử dụng,
trong báo cáo này sử dụng công cụ myEvalVid2, NS2 – hai công cụ mã nguồn mở
để mô phỏng việc truyền video trong môi trường mạng internet, đánh giá chất
lượng video mà người dùng nhận được cũng như tính toán số gói (packet) bị mất
trong quá trình truyền. Kịch bản TCL mô phỏng sử dụng các gói UDP (User
Datagram Protocol) tạo ra một mạng tắc nghẽn giống với mô hình mạng thực tế.


MỤC LỤC
TÓM TẮT
I.
II.

III.

Giới thiệu .......................................................................................
Giới thiệu công cụ NS2, myEvalVid2 ...........................................
1. Công cụ NS2 .............................................................................


1.1. Giới thiệu ........................................................................
1.2. Cài đặt NS2 ....................................................................
2. Công cụ myEvalVid2 ...............................................................
2.1. Giới thiệu ........................................................................
2.2. Cài đặt myEval2 .............................................................
Mô phỏng truyền video trên NS2 ..................................................
1. Kịch bản TCL ...........................................................................
2. Mô phỏng .................................................................................

1
1
1
1
2
3
3
7
11
11
12

IV. Tính toán số gói bị mất trong quá trình truyền video ....... 18
1. Cơ sở lý thuyết .............................................................. 18
2. Công cụ tính toán ......................................................... 29
V. Kết luận.............................................................................. 32
VI. Tài liệu tham khảo ............................................................. 33


I. Giới thiệu
Các ứng dụng đa phương tiện chất lượng cao trong môi trường mạng IP (IP

network) có yêu cầu rất cao và nghiêm ngặt về việc mất gói tin (packet loss), sự
chậm trễ (delay) và sự chậm trễ jitter (delay jitter). Trong các mạng IP, việc mất
các gói tin ảnh hưởng rất lớn đến chất lượng các kết nối, chất lượng dịch vụ, thông
lượng truyền dữ liệu. Những đặc điểm này không thể xác định nếu chỉ dựa vào việc
tính xác suất mà đỏi hỏi các nghiên cứu, đánh giá chi tiết các mô hình.
Báo cáo này sử dụng ns-2 và myevalvid2 để mô phỏng việc truyền video và
tính toán số gói tin bị mất trong khi truyền video thông qua các gói UDP.
Trong phần 2 sẽ giới thiệu công cụ NS2, myEvalVid2, các cấu trúc liên kết
(topology) và các cấu trúc khác có liên quan. Phần 3 sẽ trình bày kịch bản mô
phỏng và kết quả mô phỏng. Phần 4 sẽ trình bày cơ sở và cách thức tính toán số gói
tin bị mất. Phần 5 sẽ là kết luận cuối cùng của báo cáo này.
Môi trường làm việc:
 Ubuntu 13.10 x64
 GCC, G++ 4.8.1
 Ns-allinone-2.35
 FFMPEG 2.1
 GPAC ver 0.5.1
 YUV Viewer (OpenEye ViWer v1.1)

II. Giới thiệu công cụ NS2 , myEvalVid2
1. Công cụ NS2
1.1. Giới thiệu
- NS2 (Network simulator version 2) là công cụ được phát triển để mô
phỏng các sự kiện một cách rời rạc phục vụ cho cho việc nghiên cứu
mạng (networking reseach). NS là một công cụ hỗ trợ rất đắc lực trong
việc mô phỏng quá trình truyền các gói tin (TCP, UDP), mô phỏng các
router, các giao thức multicast (multicast protocol) trong mạng wired,
wireless (cục bộ hoặc vệ tinh).
Page 1



- NS là một biến thể của REAL network simulator (1989) và được phát triển
nhanh chóng trong những năm trở lại đây. Năm 1995, NS được hỗ trợ và
phát triển bởi DARPA thông qua dự án VINT tại LBL, Xerox PARC,
UCB, and USC/ISI.
- Hiện nay, NS được phát triển thông qua sự hỗ trợ của DARPA với
SAMAN và NSF với CONSER, cả hai đều phối hợp với các nhà nghiên cứu
khác bao gồm ACIRI. NS cũng luôn có sự đóng góp từ các nhà nghiên cứu
khác trên toàn thế giới.
1.2. Cài đặt NS2
a. Download NS-ALLINONE 2.35
o Download ns-allinone 2.35 tại địa chỉ
/>b. Giải nén file ns-allinone-2.35.tar vừa tải về và cài đặt các gói cần thiết
khác bằng câu lệnh:
tar –xvf ns-allinone-2.35.tar.gz
sudo apt-get install build-essential autoconf automake libxmu-dev
c. Tiến hành cài đặt
o Chạy lệnh: ./install
o Sau khi quá trình cài đặt kết thúc sẽ có kết quả như sau:

Hình 1. Kết thúc quá trình cài đặt NS2.
Page 2


d. Cài đặt biến môi trường
export LD_LIBRARY_PATH=/home/chloe/OpenSourceDev/nsallinone-2.35/otcl-1.14:/home/chloe/OpenSourceDev/ns-allinone2.35/lib:/usr/local/lib
export TCL_LIBRARY=/home/chloe/OpenSourceDev/ns-allinone2.35/tcl8.5.10/library:/usr/lib
export PATH=$PATH:/home/chloe/OpenSourceDev/ns-allinone2.35/bin:/home/chloe/OpenSourceDev/ns-allinone2.35/tcl8.5.10/unix:/home/chloe/OpenSourceDev/ns-allinone2.35/tk8.5.10/unix:/home/chloe/OpenSourceDev/ns-allinone-2.35/ns2.35:/home/chloe/OpenSourceDev/ns-allinone-2.35/nam1.15:/home/chloe/OpenSourceDev/ns-allinone-2.35/xgraph-12.2
e. Cuối cùng, bạn có thể sử dụng lệnh ./validate để xác nhận việc cài đặt
hoàn tất. Tuy nhiên sẽ có vài test không thành công, điều này không

ảnh hưởng đến hệ thống.
2. Công cụ myEvalVid2
2.1. Giới thiệu công cụ myEvalVid2
- myEvalVid2 là một framework khá hoàn chỉnh và được thiết kế cho
việc tính toán và đánh giá chất lượng của video truyền đi trên một mạng
thực hoặc mạng mô phỏng, EvalVid cung cấp đầy đủ các chỉ số đánh giá
video như:
o Packet/frame loss rate.
o Packet/frame jitter.
o PSNR( Peak Signal Noise Ratio).
o MOS( Mean Opinion Scores).
- Nhiệm vụ chính của myEvalVid2 là hỗ trợ việc nghiên cứu và thực hành
tính toán chất lượng video mà người dùng cuối (end user) nhận được trên
các mạng mô phỏng hoặc mạng thực.
- Tuy nhiên, myEvalVid2 chỉ mô phỏng các mô hình lỗi đại diện cho các
lỗi và việc mất gói xảy ra trên môi trường mạng thực. Việc này gây ra vấn
đề cho các nhà nghiên cứu, học viên trong vấn đề đánh giá chất lượng
video gửi đến người dùng trong các kịch bản phức tạp.
- Cấu trúc của myEvalVid2 Framework như sơ đồ dưới đây.

Page 3


Hình 2. Cấu trúc của myEvalVid2.
o Video Source: Video source có thể ở định dạng YUV QCIF (176 x
144) hoặc định dạng YUV CIF (352 x 288).

352 pixels
176 pixels


144 pixels

288 pixels

QCIF

CIF
Hình 3. Các định dạng myEvalVid hỗ trợ.

Page 4


o Video Encoding: Hiện tại, EvalVid hỗ trợ 2 chuẩn mã hóa MPEG4
là NCTU và ffmpeg. Download tại địa chỉ:
 NCTU: /> ffmpeg: /> Trong báo cáo này sử dụng ffmpeg để mã hóa video theo
chuẩn MPEG4
o Video Sender (VS): Nhiệm vụ của video sender (vs) như sau:
 Đọc dữ liệu nén xuất ra từ Video Encoder
 Chia các frame video lớn thành các đoạn nhỏ để gửi đi.
 Gửi các segments thông qua các gói UDP/IP trong môi
trường mạng thực hoặc môi trường mô phỏng ( Simulated
network).
 Với mỗi gói UDP được truyền đi, framework sẽ ghi lại
timestamp, packet id, và packet payload size trong sender
trace file bằng cách sử dụng một công cụ khác như tcp-dump
hoặc win-dump nếu môi trường truyền là môi trường internet
thực.
o Evalute Trace ( ET):
 Dựa vào file video ban đầu dùng để truyền đi, video trace
file, sender trace file và receiver trace file các thành phần

trong ET sẽ tính toán các thông số frame/packet mất ,
frame/packet jitter và sinh ra file video giống như video sẽ
được người dùng cuối nhận được dựa trên việc tái cấu trúc
video ban đầu cùng với các file nêu trên.
 Về nguyên tắc, việc video phía người dùng nhận được bị mất
frame hay “vỡ hình” chỉ xảy ra trong quá trình copy và
truyền tải từng frame (frame by frame) của video gốc qua
môi trường mạng. Việc video bị mất frame chỉ xảy ra ở
video mà người dùng nhận được.
o Peak Signal Noise Ratio (PSNR): PSNR là một trong số các
thông số khách quan nhất để đánh giá QoS (Quanlity of Service)
của quá trình truyền video.
 PSNR được tính toán dựa trên các điểm ảnh Y của ảnh
nguồn S và ảnh đích D:

Page 5


 Với Vpeak =2k-1 với k là số bit/pixel
o Mean Opinion Score (MOS): MOS là một thước đo chủ quan để
đo chất lượng video ở mức ứng dụng. Thang đo được sử dụng từ 1
đến 5 dựa trên PSNR.

Hình 4. Những cải tiến của công cụ.
Page 6


- Bằng cách kết hợp NS2 và myEvalVid2 cùng với các tác nhân kết nối
(connecting simulation agent) mới là MyTrafficTrace, MyUDP,
MyUDPSick. Chúng được thiết kế với mục đích đọc các video trace file

hoặc sinh ra (generate) các dữ liệu cần thiết để đánh giá chất lượng video
truyền tải đến người sử dụng.
o MyTrafficTrace: Được sử dụng để trích xuất các loại khung (frame
type) và kich thước của chúng (frame size) từ video trace file – đầu
ra của VS. Ngoài ra, thành phần (component) này còn chia các
khung video (video frame) thành các thành phần (segment) nhỏ
hơn và gửi chúng đến lớp UDP thấp hơn tại các thời điểm được cài
đặt trong kịch bản mô phỏng (simulation script).
o MyUDP: Về cơ bản, MyUDP là sự mở rộng của UDP cho phép xác
định tên tập tin đầu ra (output file name) của sender trace file cũng
như ghi dấu thời gian (timestamp) của mỗi gói tin truyền đi, số hiệu
gói tin (packet id), kích thước gói tin (packet payload). Nhiệm vụ
của MyUDP giống như nhiệm vụ của các công cụ TCP-DUMP,
WIN-DUMP trong môi trường mạng thực (real network).
o MyUDPSick: Tiếp nhận các fragmented video frame được gửi đi từ
MyUDP đến phía người dùng. Nó ghi lại timestamp, packet ID,
payload size của mỗi gói tin người dùng nhận được trong một file
đặc biệt.
2.2. Cài đặt
2.2.1. Download công cụ tại địa chỉ:
http://140.116.164.80/~smallko/nctuns/myevalvid.tar.bz2
o Mục đích: Lấy các tool đã compile, các file myudp.cc, myudp.h,
myudpsink2.cc, myudpsink2.h, mytraffictrace2.cc
o Giải nén file và di chuyển thư mục làm việc đến thư mục nsallinone-2.35/ns-2.35/common
2.2.2. Thêm các trường frametype_ và sendtime_ vào struct hdr_cmn
trong file packet.h và thêm các dòng sau:
int frametype_; // frame type for MPEG video transmission (Henry)
double sendtime_; // send time (Henry)
unsigned long int frame_pkt_id_;


Page 7


2.2.3. Tìm đến file agent.h và thêm

Page 8


2.2.4. Tìm đến file agent.cc

2.2.5. Copy các file myevalvid.cc, myudp.cc, myudp.h,
myevalvid_sink.cc, and myevalvid_sink.h vào thư mục
myevalvid trong ns2 (tạo thư mục myevalvid trong ns2).

Page 9


2.2.6. Tìm đến file ns-allinone-2.35/ns-2.35/tcl/lib/ns-default.tcl thêm
đoạn code

2.2.7. Tìm đến ns-allinone-2.35/ns-2.35/Makefile.in thêm đoạn code
myevalvid/myudp.o myevalvid/myevalvid_sink.o
myevalvid/myevalvid.o \ vào danh sách OBJ_CC.

2.2.8. Run setup script
./configure ; make clean ; make

Page 10



III. Mô phỏng truyền video trên NS2
1. Kịch bản TCL
- Kịch bản TCL trong báo cáo này được thiết kế với 10 node truyền và 10
node nhận thông qua 2 router.
- Các node truyền và node nhận có bandwith 1Mb, delay 10ms và kết nối
với router bằng một duplex link. Hai router kết nối với nhau bằng 2 kết
nối simplex link, đường truyền từ router 1 đến router 2 có BW
(Bandwith) 6Mb, delay 1ms, đường truyền từ router 2 đến router 1 có
BW 640Kb, delay 1ms.

- Việc thiết kế BW từ router 1 đến router 2 là 6Mb nhỏ hơn tổng BW các
node phía bên trái gửi nhằm mục đích tạo ra sự tắc nghẽn chủ động gây
nên việc mất các gói tin (packet).

Page 11


Hình 5. Mô hình mô phỏng.
2. Mô phỏng
Báo cáo này sử dụng file video chuẩn cif. Video gốc akiyo_cif.yuv
2.1. Cài đặt ffmpeg
- Sử dụng terminal chạy lệnh: sudo apt-get install ffmpeg
2.2. Cài đặt GPAC
- Sử dụng terminal chạy lênh: sudo apt-get install gpac
- Mục đích: Sử dụng công cụ MP4Box trong gói cài đặt này.
2.3. Download myEvalVid2
- Download công cụ tại địa chỉ:
http://140.116.164.80/~smallko/nctuns/myevalvid.tar.bz2
- Mục đích: Sử dụng các công cụ đã compile hoặc recompile tùy thuộc yêu
cầu của người sử dụng.

2.4. Mã hóa file yuv sang chuẩn MPEG4.
- Quá trình này sẽ tạo ra file video với bitrate là 30 frame/s
- Run: ffmpeg -s cif -i akiyo_cif.yuv -s cif -vcodec mpeg4 -r 30 a01.m4v
2.5. Tạo file ISO MP4
- Quá trình này tạo ra file video ISO MP4 chứa các frame và hint track mô
tả cách thức đóng gói các frame để vẫn chuyển bằng RTP.
- Run: MP4Box -hint -mtu 1024 -fps 30 -add a01.m4v a01.mp4
2.6. Tạo Video sender trace file
- Sử dụng công cụ mp4trace để tạo video sender trace file.
Run: ./mp4trace -f -s 192.168.0.2 12346 1024 a01.mp4 > st_a01
Page 12


- Công cụ này sẽ đọc file *mp4 đã tạo ra ở bước trên (file chứa các hint
track), chia nhỏ các frame thành các gói tin nhỏ hơn kích thước 1024 byte
sau đó gửi chúng đến một địa chỉ ảo có IP 192.168.0.2 với port 123456 .
Ở đây IP và port không quan trọng vì chúng ta chỉ cần lấy thông tin các
các frame và lưu chúng trong file st (st_a01).

Hình 6. Cấu trúc của một packet.

Hình 7. Cấu trúc của st file.
2.7. Run TCL Script
- Sau khi tạo thành công các file đầu vào cần thiết, tiến hành chạy kịch bản
mô phỏng đã trình bày ở trên.
- Sử dụng terminal run:
ns Building.tcl
- Kết quả sau khi chạy file kịch bản ta nhận được các file:
o sd_a01: Record the sending time of each packet.
Page 13



o
o
o
o

rd_a01: Record the recived time of each packet.
Doan.tr : Trace file
Doan.nam: Nam file
Ngoài ra còn một số file phục vụ quá trình tính toán sẽ được trình
bày ở phần sau.

Hình 8. Cấu trúc của file sd_a01, rd_a01.
2.8. Xây dựng lại file video đã gửi đi.
- Công đoạn này giúp chúng ta xây dựng lại file video mà người dùng cuối
(end user) sẽ nhận được bằng cách tái sử dụng file video gốc và các file
sd_a01, rd_a01, st_a01.
- Bằng các so sánh các giá trị của các file này, tool sẽ sinh ra video mới
(reconstruction) dựa trên video gốc. Các frame bị hỏng, bị mất sẽ được
thay thế bằng cách sử dụng frame ngay trước nó (frame được truyền
thành công và không có lỗi) thay thế. Đây được coi là cách dễ dàng nhất
Page 14


để tái tạo video, nó cũng được coi là một kỹ thuật “che mắt” người dùng
cuối.
- Sử dụng công cụ etmp4 (trong gói myEvalVid2) chạy lệnh sau:
./etmp4 -f sd_a01 rd_a01 st_a01 a01.mp4 a01e
- Sau khi chạy lệnh trên, chúng ta nhận được 2 file a01e.m4p và a01e.mp4


- Ngoài ra chúng ta còn nhận được các file
o rate_r_a01e
o rate_s_a01e
o loss_a01e
o delay_a01e
- Ý nghĩa các file được giải thích trong bảng dưới

Page 15


2.9. Encoding file *.mp4 thành file *.yuv để phục vụ quá trình tính toán
PSNR.
- Sử dụng công cụ ffmpeg để encoding file a01e.mp4 thành file a01e.yuv
- Trên terminal gõ lệnh:
ffmpeg –i a01e.mp4 a01e.yuv

2.10. Tính chỉ số PSNR.
- Sử dụng công cụ psnr trong gói myEvalVid2 để tính toán chất lượng
video thông qua chỉ số PSNR (Peak Signal Noise Ratio).
- Trên terminal gõ lệnh:
./psnr 352 288 420 akiyo_cif.yuv a01e.yuv
- Kết quả nhận được bao gồm thời gian thực hiện tính toán, các chỉ số
PSNR của các frame, và kết quả cuối cùng là psnr trung bình cùng với độ
lệch chuẩn stdv (Standard Deviation).

Page 16


- Mã nguồn công cụ tính toán PSNR (C++ file)


Page 17


IV. Tính toán số gói bị mất trong quá trình truyền video
1. Cơ sở lý thuyết
1.1. Cấu trúc mạng và kịch bản mô phỏng.
1.1.1. Cấu trúc mạng
- Do tính phức tạp của cấu trúc mạng thử nghiệm thực tế, trong báo cáo
này sử dụng cấu trúc như hình dưới. Việc sử dụng cấu trúc ở hình dưới
đây không ảnh hưởng đến kết của của việc thử nghiệm thực tế trên môi
trưởng mô phỏng. Mục đích chính của hình minh họa dưới đây để chỉ ra
các thành phần (components) của một mô hình thử nghiệm.

Hình 9. A Simple Network Topology and Simulation Scenario.
- Mỗi node sử dụng một hàng đợi kiểu DropTail với delay là 10ms. Các tác
nhân tcp, udp được gắn vào node n0, n1 , chúng có nhiểm vụ “chở” dữ liệu
đi tới đích trong môi trường mạng từ node 0, node 1 đến node 3. Mặc
định kích thước tối đa của một gói tcp là 1Kb. Tác nhân “sick” có nhiệm
Page 18


vụ tạo và gửi gói ACK trở lại cho tcp agent đồng thời giải phóng dữ liệu
nhận được.
- Tác nhân UDP được gắng với node 1 và kết nối đến node 3 với tác nhân
null được gắn tại node 3. Tác nhân null chỉ có tác dụng giải phóng gói
nhận được.
- Các thành phần “ftp”, “cbr” gắn với các tác nhân tương ứng có tác dụng
tạo ra các thành phần tương ứng. Như hình phía trên, “cbr” được cấu hình
để sinh ra 1 packet với kích thước 1Kb và tốc độ 1Mbps.

- Đường đi của packet được mô phỏng như hình dưới

Hình 10. Chu trình của packet.
Page 19


- Trong hình minh họa, “cbr” được cài đặt để bắt đầu vào thời điểm 0.1
giây, và kết thúc vào thời điểm 4.5 giây, “ftp” được cài đặt để bắt đầu tại
thời điểm 1 giây và dừng lại tại thời điểm 4 giây. Tương tự, trong kịch
bản mô phỏng thực tế, các tác nhân này được cài đặt như hình dưới.

- Link là một khái niệm quan trọng trong NS, khi người dùng tạo một
Duplex-link, NS sẽ tạo ra 2 Simplex-link như hình dưới.

Page 20


Hình 11 . Inserting Trace Objects.

Hình 12 .Monitoring Queue.
- Dựa vào toàn bộ cơ sở lý thuyết phía trên, phần dưới đây sẽ trình bày kịch
bản mô phỏng của báo cáo này.
1.1.2. Kịch bản mô phỏng
#create a new Simulator
set ns [new Simulator]
#Initialize trace file
set nd [open Doan.tr w]
$ns trace-all $nd
set nf [open Doan.nam w]
$ns namtrace-all $nf

#set max_fragmented_size send
set max_fragmented_size
1024
#add udp header(8 bytes) and IP header (20bytes)
#1024+8+24
set packetSize
1052
#create node 10 node left 2 routers 10 node right, rleft have bw > rright bw
set s0 [$ns node]
set s1 [$ns node]
set s2 [$ns node]
set s3 [$ns node]
set s4 [$ns node]
set s5 [$ns node]
set s6 [$ns node]
set s7 [$ns node]
set s8 [$ns node]
set s9 [$ns node]
set rleft [$ns node]
set rright [$ns node]
set d0 [$ns node]

Page 21


set d1 [$ns node]
set d2 [$ns node]
set d3 [$ns node]
set d4 [$ns node]
set d5 [$ns node]

set d6 [$ns node]
set d7 [$ns node]
set d8 [$ns node]
set d9 [$ns node]
#create link between them
$ns duplex-link $s0 $rleft 1Mb 10ms DropTail orient right-down
$ns duplex-link $s1 $rleft 1Mb 10ms DropTail orient right-down
$ns duplex-link $s2 $rleft 1Mb 10ms DropTail orient right-down
$ns duplex-link $s3 $rleft 1Mb 10ms DropTail orient right-down
$ns duplex-link $s4 $rleft 1Mb 10ms DropTail orient right-down
$ns duplex-link $s5 $rleft 1Mb 10ms DropTail orient right-up
$ns duplex-link $s6 $rleft 1Mb 10ms DropTail orient right-up
$ns duplex-link $s7 $rleft 1Mb 10ms DropTail orient right-up
$ns duplex-link $s8 $rleft 1Mb 10ms DropTail orient right-up
$ns duplex-link $s9 $rleft 1Mb 10ms DropTail orient right-up
$ns duplex-link $rright $d0 1Mb 10ms DropTail orient right-down
$ns duplex-link $rright $d1 1Mb 10ms DropTail orient right-down
$ns duplex-link $rright $d2 1Mb 10ms DropTail orient right-down
$ns duplex-link $rright $d3 1Mb 10ms DropTail orient right-down
$ns duplex-link $rright $d4 1Mb 10ms DropTail orient right-down
$ns duplex-link $rright $d5 1Mb 10ms DropTail orient right-up
$ns duplex-link $rright $d6 1Mb 10ms DropTail orient right-up
$ns duplex-link $rright $d7 1Mb 10ms DropTail orient right-up
$ns duplex-link $rright $d8 1Mb 10ms DropTail orient right-up
$ns duplex-link $rright $d9 1Mb 10ms DropTail orient right-up
#Orientation of nodes:
$ns duplex-link-op $s0 $rleft orient right-down
$ns duplex-link-op $s1 $rleft orient right-down
$ns duplex-link-op $s2 $rleft orient right-down
$ns duplex-link-op $s3 $rleft orient right-down

$ns duplex-link-op $s4 $rleft orient right-down
$ns duplex-link-op $s5 $rleft orient right-up
$ns duplex-link-op $s6 $rleft orient right-up
$ns duplex-link-op $s7 $rleft orient right-up
$ns duplex-link-op $s8 $rleft orient right-up
$ns duplex-link-op $s9 $rleft orient right-up
$ns duplex-link-op $rright $d0 orient right-down
$ns duplex-link-op $rright $d1 orient right-down
$ns duplex-link-op $rright $d2 orient right-down
$ns duplex-link-op $rright $d3 orient right-down
$ns duplex-link-op $rright $d4 orient right-down
$ns duplex-link-op $rright $d5 orient right-up
$ns duplex-link-op $rright $d6 orient right-up
$ns duplex-link-op $rright $d7 orient right-up
$ns duplex-link-op $rright $d8 orient right-up
$ns duplex-link-op $rright $d9 orient right-up
#create link between two routers
$ns simplex-link $rright $rleft 640kb 1ms DropTail
$ns simplex-link $rleft $rright 6Mb 1ms DropTail
#queuePos 0.5
# Khi BW nhỏ có thể làm mất các header code của video do đó
# khi reconstruction video phía người dùng có thể gặp thông báo lỗi
# của ffmpeg như header damaged

Page 22


#set shape
$rleft shape square
$rright shape square

$s1 shape hexagon
$d1 shape hexagon
#set label
$ns at 0.0 "$rleft label Router1"
$ns at 0.0 "$rright label Router2"
$ns at 0.0 "$s1 label Source"
$ns at 0.0 "$d1 label Destination"
#$ns simplex-link-op $rright $rleft orient middle
#create queue between two routers
set qr1r2 [[$ns link $rleft $rright] queue]
$qr1r2 set limit_ 15 #gioi han queue tu router 1 --> router 2
#############################################################################
#####
# Video data will be sent from left node 1 to right node 1
#
#
#
# setup normal data left 0, 2->9 -------------- right 2->9
# node 0 -> left router
set udpl0 [new Agent/UDP]
$ns attach-agent $s0 $udpl0
set cbrl0 [new Application/Traffic/CBR]
$cbrl0 set packetSize_ 500
$cbrl0 set interval_ 0.005
$cbrl0 attach-agent $udpl0
set nulll0 [new Agent/Null]
$ns attach-agent $d0 $nulll0
$ns connect $udpl0 $nulll0
# node 2 -> left router
set udpl2 [new Agent/UDP]

$ns attach-agent $s2 $udpl2
set cbrl2 [new Application/Traffic/CBR]
$cbrl2 set packetSize_ 500
$cbrl2 set interval_ 0.005
$cbrl2 attach-agent $udpl2
set nulll2 [new Agent/Null]
$ns attach-agent $d2 $nulll2
$ns connect $udpl2 $nulll2
# node 3 -> left router
set udpl3 [new Agent/UDP]
$ns attach-agent $s3 $udpl3
set cbrl3 [new Application/Traffic/CBR]
$cbrl3 set packetSize_ 500
$cbrl3 set interval_ 0.005
$cbrl3 attach-agent $udpl3
set nulll3 [new Agent/Null]
$ns attach-agent $d3 $nulll3
$ns connect $udpl3 $nulll3
# node 4 -> left router
set udpl4 [new Agent/UDP]
$ns attach-agent $s4 $udpl4
set cbrl4 [new Application/Traffic/CBR]
$cbrl4 set packetSize_ 500
$cbrl4 set interval_ 0.005
$cbrl4 attach-agent $udpl4

Page 23



×