560 likes | 893 Views
Video Transmission Using NS2 Simulator. 1. Nội dung. Giới thiệu Cài đặt NS2 trên Linux Giới thiệu và tích hợp myevalvid2 với NS2 Mô phỏng truyền video qua mạng internet sử dụng NS2. 2. Giới thiệu.
E N D
Nội dung • Giới thiệu • Cài đặt NS2 trên Linux • Giới thiệu và tích hợp myevalvid2 với NS2 • Mô phỏng truyền video qua mạng internet sử dụng NS2 2
Giới thiệu • Ngày nay, nhu cầu truyền tải các dạng truyền thông đã phương tiện như audio, video ngày càng tăng với tốc độ chóng mặt, việc này đòi hỏi các nhà cung cấp dịch vụ nghiên cứu làm thế nào để cung cấp dịch vụ truyền video tốt hơn quan môi trường mạng trên nền IP. • Có rất nhiều chỉ số được dùng để đánh giá chất lượng video truyền đi trên môi trường mạng như: • Tỉ lệ mất gói packet/frame • Packet/ frame jitter • Tỉ lệ mất khung (frame) hiệu quả (effective frame loss rate) • Picture quality rating (PQR) 3
Giới thiệu • Tuy nhiên những chỉ số trên không đủ để đánh giá chất lượng của video sau khi truyền trên phương diện người dùng. • Thay vào đó, các chỉ dưới đây được sử dụng: • MOS (Mean Opinion Score): Là một thước đo mang tính chủ quan dùng để đo chất lượng video ở mức ứng dụng. MOS bắt đầu từ 1 (tồi nhất ) đến 5 (tốt nhất) dựa trên việc chia điểm PSNR. • PSNR (Peak Signal to Noise Ration): Là một số liệu khách quan phổ biến nhất để đánh giá QoS (Quality of Service). PSNR được tính dựa trên các thông số về độ sáng của cá điểm ảnh của video nguồn và video đích. 4
Giới thiệu • Để nghiên cứu được các ảnh hưởng đồng thời của các cơ chế truyền tải trong mạng lên việc truyền video là rất khó khăn do việc công bố các thiết lập mã hóa cho việc theo dấu dữ liệu còn rất hạn chế. Vấn đề đặt ra là làm thế nào để mô phỏng và đánh giá hiểu suất truyền video trong một mạng mô phỏng là hết sức cần thiết. • Đề tài này sử dụng NS (Network Simulator)- một công cụ mô phỏng mạng cũng với EvalVid để mô phỏng việc truyền video qua môi trường internet trên nền IP. 5
Giới thiệu • Môi trường và phần mềm 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 6
NS2 Installation - Tải ns2 từ địa chỉ from http://www.isi.edu/nsnam/ns/ . Bạn có thể chỉ download riêng từng gói hoặc download tất cả các gói trong gói all-in-one mà trang chủ đã nén sẵn. - Giải nén file ns-allinone-2.35.tar.gz vừa download bằng lệnh: tar –xvf ns-allinone-2.35.tar.gz - Tiến hành cài thêm một số components bằng lệnh: sudo apt-get install build-essential autoconf automake libxmu-dev - Sử dụng terminal, chuyển thư mục làm việc sang thư mục vừa giải nén ns2 và chạy lệnh: Sudo ./install Đối với nhiều máy yêu cầu super permission khi thực hiện các script trong file install nên ta dùng thêm lệnh sudo phía trước install. Quá trình cài đặt diễn ra trong khoảng 7-10 phút. 7
NS2 Installation - Trong quá trình cài đặt có thể bạn sẽ gặp lỗi: linkstate/ls.cc:396:28:required from here linkstate/ls.h:137:20: error: ‘erase’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive] linkstate/ls.h:137:20: note: declarations in dependent base ‘std::map<int, LsIdSeq, std::less<int>,std::allocator<std::pair<const int, LsIdSeq> > >’ are not found by unqualified lookup linkstate/ls.h:137:20: note: use ‘this->erase’ instead make: *** [linkstate/ls.o] Error 1 Ns make failed! Để sửa lỗi này bạn vào thư mục ns-allinone-2.35/ns-2.35/linkstate, tìm và sửa file ls.h như sau: 8
NS2 Installation Tìm dòng: void eraseAll() {erase(baseMap::begin(), baseMap::end()); } và sửa thành: void eraseAll() { this->erase(baseMap::begin(), baseMap::end()); } Sau đó chạy lại lệnh: Sudo ./install Khi kết thúc quá trình cài đặt bạn sẽ nhận được kết quả như hình 9
NS2 Installation - Tiếp theo bạn tiến hành cài các biến môi trường qua câu lệnh: export LD_LIBRARY_PATH=/home/chloe/OpenSourceDev/ns-allinone-2.35/otcl-1.14:/home/chloe/OpenSourceDev/ns-allinone-2.35/lib:/usr/local/lib export TCL_LIBRARY=/home/chloe/OpenSourceDev/ns-allinone-2.35/tcl8.5.10/library:/usr/lib export PATH=$PATH:/home/chloe/OpenSourceDev/ns-allinone-2.35/bin:/home/chloe/OpenSourceDev/ns-allinone-2.35/tcl8.5.10/unix:/home/chloe/OpenSourceDev/ns-allinone-2.35/tk8.5.10/unix:/home/chloe/OpenSourceDev/ns-allinone-2.35/ns-2.35:/home/chloe/OpenSourceDev/ns-allinone-2.35/nam-1.15:/home/chloe/OpenSourceDev/ns-allinone-2.35/xgraph-12.2 11
NS2 Installation - Để xác nhận cài đặt thành công bạn có thể chạy lệnh: sudo ./validate để tiến hành test với các test sẵn có của NS2 12
EvalVid • Giới thiệu công cụ EvalVid • Tích hợp EvalVid vào NS2 13
Giới thiệu EvalVid • - EvalVid 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ư: • Packet/frame loss rate. • Packet/frame jitter. • PSNR. • MOS. 14
Video Source - Video source có thể ở dạng YUV QCIF (176 x 144) or in the YUV CIF (352 x 288) formats. • 352 pixels • 176 pixels • 144 pixels • 288 pixels • QCIF • CIF 16
Video Encoder • - Hiện tại, EvalVid hỗ trợ 2 chuẩn mã hóa MPEG4 là NCTU và ffmpeg. Download tại địa chỉ: • NCTU: http://megaera.ee.nctu.edu.tw/mpeg • Ffmpeg: http://ffmpeg.sourceforge.net/index.php- - Đề tài này sử dụng ffmpeg để mã hóa video theo chuẩn MPEG4 17
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. 18
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 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. 19
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: Trong đó: Vpeak =2k-1 với k là số bit/pixel 20
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. 21
Integrate Evalvid into NS2 - Download Evalvid từ địa chỉ: http://140.116.164.80/~smallko/nctuns/myevalvid.tar.bz2 Mục đích: Lấy các tool đã compile, các file myudp.cc, myudp.h, myudpsink2.cc, myudpsink2.h, mytraffictrace2.cc - Giải nén file myevalvid.tar.bz2 - Di chuyển đến thư mục ns-allinone-2.35/common và sửa các file sau: 23
Integrate Evalvid into NS2 1. Thêm các trường frametype_ và sendtime_ vào struct hdr_cmn trong file packet.h 24
Integrate Evalvid into NS2 2. Sửa file agent.h 25
Integrate Evalvid into NS2 3. Sửa file agent.cc 26
Integrate Evalvid into NS2 4. 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). 5. Sửa file ns-allinone-2.28/ns-2.28/tcl/lib/ns-default.tcl thêm đoạn code: Agent/myUDP set packetSize_ 1000 Tracefile set debug_ 0 6. Sửa file ns-allinone-2.28/ns-2.28/Makefile.in thêm dòng: myevalvid/myudp.o myevalvid/myevalvid_sink.o myevalvid/myevalvid.o \ vào danh sách OBJ_CC 27
Integrate Evalvid into NS2 7. Chạy lệnh: ./configure ; make clean ; make 8. Có thể kiểm tra quá trình cài đặt thành công hay chưa bằng cách chạy thử một vài ví dụ có sẵn trong gói allinone này. Di chuyển đến thư mục ns-allinone-2.35/ns-2.35/tcl/ex gõ lệnh: ns simple.tcl kết quả như hình dưới đây. 31
Mô phỏng truyền video qua mạng internet sử dụng NS2 I. Chuẩn bị 1. Cài đặt ffmpeg bằng lệnh: sudo apt-get install ffmpeg 2. Cài đặt GPAC để chạy MP4Box bằng lệnh: sudo apt-get install gpac 3. File video gốc akiyo_cif.yuv II. Tiến hành. 1. Video Encoding chạy lệnh: ffmpeg -s cif -i akiyo_cif.yuv -s cif -vcodec mpeg4 -r 30 a01.m4v 34
Mô phỏng truyền video qua mạng internet sử dụng NS2 2. Create ISO MP4 Files - File ISO MP4 chứa các khung(Frames) và cách mã hóa cho việc chia và đóng gói các frame thành các gói (packet) để truyền đi bằng RTP (Real-time Transport Protocol) - Run: MP4Box -hint -mtu 1024 -fps 30 -add a01.m4v a01.mp4 36
Mô phỏng truyền video qua mạng internet sử dụng NS2 3. Record the tracefile sender - Sử dụng tool mp4trace có sẵn trong EvalVid để ghi tracefile sender. Bằng các gửi các hinted mp4-file ở bước 2 thông qua các RTP/UDP tới một host đặc biệt có địa chỉ 192.168.0.2 với password là 123456. - Tại đây, mỗi frame được chia thành 1024 byte. Kích thước tối đa của mỗi packet là 1024byte +20 byte (IP header) +8 byte (UDP header). - Tracefile này sẽ được đính (attached) vào VideoTrafficTrace agent. - Run: ./mp4trace -f -s 192.168.0.2 12346 1024 a01.mp4 > st_a01 38
Mô phỏng truyền video qua mạng internet sử dụng NS2 4. Run TCL script - Script này bao gồm 2 router, 18 Node truyền dữ liệu UDP thường (các node 0,2...9,12,14...21). Node 1 và 13 được thiết kế để truyền file video. - Mỗi connection giữa node và router có BW 1Mb, delay 10ms loại duplex-link. Giữa 2 router có 2 connection thuộc loại simplex-link, connection từ router 1 → router 2 có BW 6Mb, delay 1ms, connection từ router 2 → router 1 có BW 640kb, delay 1ms. - Việc thiết kế connection từ router 1 → router 2 có BW 6Mb < Tổng (các BW của các node connect tới router) nhằm tạo ra sự quá tải trên đường truyền, từ đó tạo ra sự mất gói (loss packet) . 43
Mô phỏng truyền video qua mạng internet sử dụng NS2 - Sau khi run tcl script, Ns2 sẽ tạo ra 2 file sd_a01(sending time of each packet), rd_a01 (received time of each packet) 45
Mô phỏng truyền video qua mạng internet sử dụng NS2 5. Reconstruction video as it's seen by the receiver - Sử dụng công cụ etmp4 cùng với file video gốc truyền đi, st_a01, sd_a01 và rd_a01 để tái tạo lại video giống như video mà người dùng cuối cùng nhận được sau quá trình truyền đi trên môi trường mạng. - Các frame bị mất hoặc bị hỏng trong quá trình truyền video thì các frame này bị xóa khỏi video gốc, kết quả chúng ta sẽ nhận được video giống video mà người dùng nhận được sau quá trình truyền. - Run: ./etmp4 -f sd_a01 rd_a01 st_a01 a01.mp4 a01e 48
Mô phỏng truyền video qua mạng internet sử dụng NS2 6. Decode the received video to yuv format. - Sử dụng ffmpeg để convert file có định *mp4 sang định *.yuv. - Mục đích: Tạo file đầu vào cho quá trình tính toán chất lượng của việc truyền video. - Run: ffmpeg -i a01e.mp4 a01e.yuv 50