một phương pháp đảm bảo chất lượng cho dịch vụ truyền thông đa hướng thời gian thực qua mạng ip

139 422 0
một phương pháp đảm bảo chất lượng cho dịch vụ truyền thông đa hướng thời gian thực qua mạng ip

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI ĐỖ TRỌNG TUẤN MỘT PHƯƠNG PHÁP ĐẢM BẢO CHẤT LƯỢNG CHO DỊCH VỤ TRUYỀN THÔNG ĐA HƯỚNG THỜI GIAN THỰC QUA MẠNG IP Chuyên ngành: Thông tin vơ tuyến, phát vơ tuyến truyền hình Mã số: 2.07.02 LUẬN ÁN TIẾN SĨ KỸ THUẬT CÁN BỘ HƯỚNG DẪN KHOA HỌC PGS.TS PHẠM MINH HÀ Hà Nội - 2006 LỜI CAM ĐOAN Tôi xin cam đoan luận án cơng trình nghiên cứu thân Các kết nghiên cứu luận án trung thực chưa công bố cơng trình khác Tác giả luận án Đỗ Trọng Tuấn LỜI CẢM ƠN Tơi xin bày tỏ lịng biết ơn chân thành tới PGS.TS Phạm Minh Hà - người dìu dắt giúp đỡ tơi lĩnh vực nghiên cứu luận án công tác chuyên môn sống Tôi xin chân thành cảm ơn Thầy Cô Khoa Điện tử Viễn thơng giúp đỡ tơi q trình học tập, công tác nghiên cứu từ sinh viên, thành viên khoa Điện tử Viễn thông – Trường Đại học Bách Khoa Hà Nội Tôi xin chân thành cảm ơn Trung tâm Đào tạo & Bồi dưỡng Sau Đại học, Phòng Quản lý Khoa học & CGCN, Trung tâm Thông tin & Mạng - Trường ĐHBK Hà Nội, Trung tâm Âm thanh, Trung tâm ứng dụng cơng nghệ phát - Đài tiếng nói Việt Nam tạo điều kiện giúp đỡ trình nghiên cứu hồn thành luận án Tơi xin cảm ơn giúp đỡ nhiệt tình góp ý quý báu anh chị bạn đồng nghiệp phịng thí nghiệm kỹ thuật thơng tin: TS Nguyễn Hữu Thanh, ThS Đỗ Trọng Tú, TS Nguyễn Văn Đức, ThS Nguyễn Quốc Khương, TS Trần Thị Ngọc Lan, TS Nguyễn Hữu Trung Tôi xin chân thành cảm ơn thầy Phạm Văn Tuân dẫn giới thiệu giúp liên hệ thực tế, cảm ơn anh Nguyễn Năng Khang nhiệt tình giúp tơi tìm hiểu cấu hình thực tế hệ thống kỹ thuật Đài Tiếng Nói Việt Nam Tơi xin chân thành cảm ơn giáo sư Tomio Takara thành viên phịng thí nghiệm xử lý tiếng nói, Bộ mơn Kỹ thuật Thơng tin, Đại học Ryukyus tạo điều kiện giúp đỡ tơi triển khai mơ hình thực nghiệm ĐHBK Hà Nội ĐH Ryukyus, Nhật Bản Xin cảm ơn người bạn Pin Hu nghiên cứu Đại học Plymouth-Anh quốc, nhiệt tình khoa học số liệu mà anh cung cấp Tôi đặc biệt cảm ơn Gia đình, Thầy tơi Người bạn thân thiết động viên tơi lúc khó khăn NCS Đỗ Trọng Tuấn MỤC LỤC Lời cam đoan Lời Cảm ơn Mục lục Danh mục từ khóa, từ viết tắt Danh sách hình vẽ, bảng kí hiệu toán học MỞ ĐẦU Đặt vấn đề Đối tượng mục tiêu luận án 3 Tình hình nghiên cứu giới nước Hướng tiếp cận Kết cấu luận án .7 CHƯƠNG 1: TỔNG QUAN VỀ TRUYỀN THƠNG ĐA HƯỚNG VÀ MƠ HÌNH HỆ THỐNG RoIP 1.1 Các phương thức truyền thông qua Internet 1.2 Truyền thông đa hướng qua mạng IP 10 1.2.1 Khái niệm 11 1.2.2 Đặc điểm 11 1.2.3 Nguyên lý truyền thông đa hướng qua mạng IP 12 1.2.4 IP multicast 15 1.3 Truy nhập vô tuyến theo chuẩn IEEE 802.11 19 1.3.1 Phổ tần số vô tuyến 19 1.3.2 Cấu trúc giao thức IEEE 802.11 20 1.3.3 Các cấu hình mạng truy nhập vơ tuyến .23 1.3.4 Các khu vực dịch vụ mở rộng 24 1.3.5 Hệ thống phân tán 26 1.4 Mơ hình hệ thống RoIP 26 1.4.1 Khái niệm 26 1.4.2 Những lợi ích cản trở công nghệ .27 1.4.3 Mô hình hệ thống RoIP đài tiếng nói Việt Nam 28 1.4.4 Mơ hình hệ thống RoIP đề xuất 31 1.5 Kết luận chương 39 CHƯƠNG 2: PHỎNG TẠO THAM SỐ CHẤT LƯỢNG CỦA TÍN HIỆU PHÁT THANH KHI TRUYỀN TẢI QUA MẠNG IP 2.1 Các tham số chất lượng mạng .40 2.1.1 Giới thiệu .40 2.1.2 Tổn thất gói tin 41 2.1.3 Trễ biến động trễ 44 2.2 Đề xuất mô hình tạo tham số QoS qua mạng IP 48 2.2.1 Kiến trúc mơ hình 48 2.2.2 Phỏng tạo tham số mạng IP đa hướng 50 2.3 Kết triển khai thực nghiệm 51 2.4 Kết luận chương 58 CHƯƠNG 3: ĐẢM BẢO CHẤT LƯỢNG TÍN HIỆU TẠI ĐẦU THU TRUYỀN TẢI QUA MẠNG IP THEO THỜI GIAN THỰC 3.1 Vấn đề tái tạo tín hiệu phát đầu thu 60 3.2 Thuật toán ước đoán trễ tái tạo 61 3.2.1 Thuật toán trung bình hàm mũ Exp-Avg .61 3.2.2 Thuật tốn trung bình hàm mũ nhanh F-Exp-Avg 63 3.2.3 Thuật toán trễ tối thiểu Min-D 63 3.2.4 Thuật toán phát đột biến Spike-Det .63 3.2.5 Thuật toán cửa sổ 64 3.3 Đánh giá chất lượng tín hiệu đầu thu .66 3.3.1 Phương pháp đánh giá chất lượng chủ quan 68 3.3.2 Phương pháp đánh giá chất lượng khách quan .69 3.4 Giải pháp đảm bảo chất lượng truyền tải tín hiệu phát qua mạng IP 74 3.4.1 Đặt vấn đề 74 3.4.2 Thiết lập thông số nguồn 74 3.4.1 Giải pháp đảm bảo chất lượng tín hiệu đầu thu .77 3.4.2 Cấu hình thực nghiệm kết 81 3.5 Kết luận chương 91 Kết luận luận án 92 Hướng phát triển đề tài .93 Danh mục cơng trình tác giả Tài liệu tham khảo Các phụ lục luận án Từ khóa: Real-time service, IP multicast, RoIP, VoIP, QoS, WLAN IEEE 802.11, Heterogeneous Networks DANH MỤC CÁC TỪ VIẾT TẮT Từ viết tắt Tiếng Anh Nghĩa Tiếng Việt ACR Absolute Category Rating Đánh giá phân loại tuyệt đối ADPCM Adaptive Diffirential PCM Điều xung mã vi sai thích ứng AN Access Network Mạng truy nhập AP Access Point Điểm truy nhập vô tuyến ATR Audio Tape Recorder Máy ghi băng âm BSA Basic Service Area Vùng dịch vụ BSA Basic Service Area Vùng dịch vụ BSS Infrastructure Basic Service Set Cấu hình mạng phụ thuộc CODEC Coder / Decoder Bộ mã hóa / giải mã DAT Digital Audio Tape Băng âm số DAW Digital Audio WorkStation Máy trạm xử lý âm số DCR Degradation Category Rating Đánh giá phân loại theo mức suy giảm chất lượng DMOS Degradation MOS Điểm đánh giá suy giảm chất lượng DSL Digital Subscriber Line Đường dây thuê bao số DSSS Direct Sequence Spectrum Spread Trải phổ dãy trực tiếp eRTP enhanced RTP packet Gói RTP cải tiến ESS Extended Service Set Vùng dịch vụ mở rộng FCC Frequency Commission Tổ chức quản lý tần số FEC Forward Error Correction Sửa lỗi trước FHSS Frequency Hoping Spectrum Spread Trải phổ nhảy tần GOB Good Or Better Thông số đánh giá độ chất lượng tốt IANA Internet Address Number Asignment Tổ chức cấp phát địa Internet IBSS Indepentent Basic Service Set Cấu hình mạng độc lập IETF Internet Enginering Task Force Nhóm đặc trách kỹ thuật Internet IGMP Internet Group Management Protocol Giao thức quản lý nhóm mạng Internet IGMP Internet Group Management Protocol Giao thức quản nhóm Internet IP Internet Protocol Giao thức mạng Internet IPv4 Internet Protocol version Giao thức IP phiên ITU International Telecommunication Union Tổ chức viễn thông quốc tế iVoVGateway internet Voice of VietNam Gateway Cổng chuyển đổi giao thức truyền tải tín hiệu phát qua mạng IP iVoVReceiver internet Voice of VietNam Receiver Máy thu tín hiệu phát qua mạng IP iVoVStation internet Voice of VietNam Station Máy chủ phát qua mạng IP LLC Logical Link Control Điều khiển liên kết liệu logic LPC Linear Predictive Encoding Mã hoá dự đoán tuyến tính LPC Linear Predictive Coding Mã hóa dự đốn tuyến tính LR Loss Rate Tỷ lệ tổn thất MAC Media Access Control Điều khiển truy nhập phương tiện truyền thông MBONE Multicast BackBone Mạng đường trục hỗ trợ multicast MCR Master Control Room Phòng tổng khống chế MOS Mean Opinion Score Điểm đánh giá chất lượng MRouter Multicast Router Bộ định tuyến hỗ trợ multicast OFDM Orthogonal Frequency Division Multiplexing Ghép kênh đa sóng mang OSI Open Systems Interconnection Mơ hình liên kết hệ thống mở PAMS Perceptual Analysis Measurement System Hệ thống đo đạc phân tích cảm nhận PCM Pulse Code Modulation Điều xung mã PESQ Perceptual Evaluation of Speech Quality Đánh giá cảm nhận chất lượng tiếng nói PLC Packet Loss Concealment Bù tổn thất gói tin POW Poor or Worse Thông số đánh giá độ chất lượng tồi PQoS Perceived Quality of Service Chất lượng dịch vụ thu nhận PSQM Perceptual Speech Quality Measurement Đo đạc chất lượng tiếng nói cảm nhận QoS Quality of Service Chất lượng dịch vụ RECAD Radio source total Eneregy Calculation and Activity Detection Tính tốn tổng lượng tín hiệu phát nguồn phát khoảng tích cực tín hiệu RFC Request For Comment Khuyến nghị RoIP Radio over IP Truyền tải tín hiệu mang tin tức phát qua mạng IP RTCP RTP Control Protocol Giao thức điều khiển thời gian thực RTP Real Time Transport Protocol Giao thức truyền tải thời gian thực SDH Synchronous Digital Hieracy Phân cấp số đồng SIP Session Initial Protocol Giao thức khởi tạo phiên SNR Signal - to - Noise Ratio Tỷ số tín hiệu tạp âm SSNR Segmentation Signal - to - Noise Ratio Tỷ số tín hiệu tạp âm phân đoạn STA Station Máy trạm di động TCP Transmission Control Protocol Giao thức điều khiển truyền thông hướng kết nối qua mạng IP TESF Total Energy of Source Frame Tổng mức lượng khung tín hiệu nguồn TTL Time To Live Thời gian sống gói tin UDP User Datagram Protocol Giao thức điều khiển truyền thông không hướng kết nối qua mạng IP UHF Untra High Frequency Tần số siêu cao URouter Unicast Router Bộ định tuyến hỗ trợ truyền thông đơn hướng VLAN Virtual LAN Mạng LAN ảo VoIP Voice over IP Truyền thoại sử dụng giao thức IP WLAN Wireless Local Area Network Mạng máy tính cục khơng dây - ix - Phụ lục 5: Mã nguồn thực thuận toán phát khoảng tín hiệu tích cực / khoảng lặng bên phát Thuật tốn thực xác định gói tin cần truyền mang tín hiệu tích cực hay khoảng lặng tín hiệu phát dự việc tính tốn lượng so sánh ngưỡng Q trình phát mức tín hiệu tích cực thực cách gọi hàm: double SoundDevice:: silenceDetect ( char *inputData, int inputSize ) Trong : inputData: khối liệu vào mang tín hiệu phát nguồn, inputSize : kích thước khối liệu liệu đầu vào mã hóa Trước hết, chương trình xác định số mẫu tính hiệu gói tin từ khối liệu đầu vào input Data Tính tốn lượng mẫu tín hiệu lưu vào biến totalEnergy Cuối cùng, mức lượng tín hiệu trung bình everageEnergy mẫu gói tin xác định Giá trị biến everageEnergy so sánh với ngưỡng lượng tín hiệu phát tích cực activeSignalTheshold Hàm trả kết khoảng lặng tín hiệu giá trị mức lượng trung bình mẫu tín hiệu gói tin khoảng tín hiệu tích cực Mã nguồn chương trình: #define energy (x) pow (x ,2 ) double SoundDevice::silenceDetect ( char *inputData, int inputSize ) { double averageEnergy = 0; int numberSample = size *8 / bitPerSample; for ( int i = ; i < numberSample ; i++ ) { if (bitPerSample ==8) { averageEnergy += energy (* ( data + i ) ); } else if ( bitPerSample ==16 ) { averageEnergy += energy ( * (short * ) ( data + i*2 ) ); } } printf ("%d :: %0.3f\n", seq, averageEnergy/numberSample); // seq: thứ tự gói tin -x- return (averageEnergy / numberSample ); } a Giao diện chương trình xử lý số liệu khoảng tích cực / khoảng lặng tín hiệu b Minh họa khoảng tích cực / khoảng lặng tín hiệu phát Phụ lục 6: Mã nguồn thực mã hóa tín hiệu phát Q trình mã hóa tín hiệu thực cách gọi hàm: int encodeData ( char * inputData, int inputSize, char * outputData ); Trong : inputData: khối liệu vào mang tín hiệu phát nguồn, inputSize : kích thước khối liệu liệu đầu vào mã hóa outputData : khối liệu mã hóa - xi - Hàm mã hóa tín hiệu encodeData trả dung lượng khối liệu mã hóa Khối liệu vào chia thành khung liệu có dung lượng 160 Bytes Mỗi khung liệu mã hóa dựa thuật tốn nén tín hiệu sử dụng thư viện Tùy thuộc vào mức chất lượng mà độ dài khung liệu mã hóa có kích thước khác Các khung liệu sau mã hóa ghép lại thành khối liệu mã hóa outputData dung lượng khối liệu trả Mã nguồn chương trình: # define FRAME_SIZE 160 int SpeexCodec::encodeData ( char* inputData , int inputSize, char *outputData ) { int outputSize = 0; int nbBytes = 0; int numberFrame = inputsize / ( FRAME_SIZE * sizeof ( short ) ); char *cbits = ( char * ) malloc ( 200 ); float *input = ( float * ) malloc ( FRAME_SIZE * sizeof ( float ) ); short * buffer16 = ( short * ) inputData; for ( int i = ; i < numberFrame ; i++ ) { // thực mã hóa tín hiệu speex_bits_reset ( &bits ); for ( int j = ; j < FRAME_SIZE ; j ++ ) *( input + j ) = * ( buffer16 + j + i * FRAME_SIZE ); speex_encode ( state, input, &bits); nbBytes = speex_bits_write ( &bits, cbits, 200 ); memcpy ( outputdata + i * nbBytes , cbits , nbBytes ); outputSize += nbBytes; } - xii - return outputSize; } Phụ lục 7: Mã nguồn thực giải mã tín hiệu phát Q trình giải mã tín hiệu thực cách gọi hàm: int decodeData ( char * inputData, int inputSize , int nbBytes , char * outputData ); Trong : inputData: khối liệu vào mang tín hiệu phát mã hóa, inputSize : kích thước khối liệu liệu đầu vào giải mã nbBytes : số Byte tương ứng với mức chất lượng nén tham số cung cấp cho giải nén phục vụ giải mã liệu tương ứng với mức chất lượng mã hóa outputData : khối liệu giải mã Hàm mã hóa tín hiệu decodeData trả dung lượng khối liệu giải mã Khối liệu đầu vào chia nhỏ thành khung liệu mã hóa có kích thước nbBytes Các khung giải nén thành khung ban đầu liệu mang tín hiệu phát nguồn có kích thước FRAM_SIZE (160 bytes) dựa thuật toán giải nén sử dụng thư viện Các khung liệu sau giải mã ghép lại thành khối liệu outputData phục vụ tái tạo tín hiệu phát dung lượng khối liệu trả Mã nguồn chương trình: int SpeexCodec::decodeData ( char* inputData,int inputSize, int nbBytes, char* outputData ) { int numberFrame = inputSize / nbBytes; int outputSize = 0; float *output = ( float * ) malloc ( FRAME_SIZE * sizeof ( float ) ); - xiii - short *data = ( short * ) malloc (FRAME_SIZE * sizeof ( short ) ); for ( int i = ; i < numberFrame ; i ++ ) { // thực giải mã tín hiệu speex_bits_read_from ( &bits , inputData + i * nbBytes , nbBytes ); speex_decode ( state, &bits, output ); for ( int j = ; j < FRAME_SIZE ; j ++ ) * ( data + j ) = * ( output + j ); memcpy ( outputData + i * FRAME_SIZE * sizeof ( short ) , ( char * ) data , FRAME_SIZE * sizeof ( short ) ); outputsize += FRAME_SIZE * sizeof ( short ) ; } return outputSize; } Phụ lục 8: Mã nguồn thực thuật toán thu liệu từ thiết bị âm lưu vào đệm phía phát Dữ liệu nguồn mang tín hiệu phát số hóa đọc từ đệm thiết bị âm lưu vào nhớ trung gian soundBuffer theo độ dài gói tin packetLength thiết lập trước Kế tiếp, thuật tốn xác định mức lượng tín hiệu phát tích cực thực Kết trả định gói tin có lưu vào đệm phát trường hợp mang tín hiệu tích cực hay bị loại bỏ trường hợp mang tín hiệu khoảng lặng Dữ liệu trước lưu vào đệm phát mã hóa theo loại tải tin xác lập trước Các phần tử mang liệu lưu đệm phát gửi vào mạng theo điều khiển điều khiển lịch trình phát Mã nguồn chương trình: void SoundDevice::capture( ) - xiv - { // cấp phát đệm lưu liệu nguồn char* soundBuffer = ( char * ) malloc ( packetLength); int seqNumber = 0; int totalSilencePacket = ; int nbBytes = speexEncode->getEncodedByte ( qualityLevel ); int outputSize = len * nbBytes / FRAME_SIZE * sizeof ( short ) ; char * speexData = ( char * ) malloc ( outputSize ); stopTxProccess = FALSE; openSoundDevice( O_RDONLY); txBuffer->clear(); while ( ! stopTxProccess ) { if ( totalSilencePacket == SILENCE_PACKET_NUMBER) { for ( int i = SILENCE_PACKET_NUMBER - ; i > ; i ) { if ( txBuffer->count() >= i ) { txBuffer->remove ( txBuffer->count() - i ); totalSilencePacket = 1; } else { totalSilencePacket = txBuffer->count(); } } - xv - } // Đọc liệu từ đệm thiết bị âm lưu vào đệm trung gian int size = read ( sound_fd, soundBuffer, packetLength); sound_item_t * item = new sound_item_t; item->seqNumber = seqNumber; item->mark = silenceDetect (soundBuffer, size); if ( item->mark == 0) // tăng số biến đếm gói tin liên tiếp mang tín hiệu khơng tích cực totalSilencePacket ++ ; else // Gói tin bắt đầu chu kỳ tín hiệu phát tích cực, thiết lập lại biến đếm số gói tin mang tín hiệu khoảng lặng totalSilencePacket = ; switch ( codecType ) { case PCM: item->length = size; item->data = ( char * ) malloc ( item->length ); memcpy ( item->data, soundBuffer, size ); break; case SPEEX : item->length = speexEncode->encodeData ( soundBuffer, size, speexData); item->data = ( char * ) malloc ( item->length ); memcpy ( item->data , speexData, item->length); break; } - xvi - // Đưa gói liệu vào đệm phát txBuffer->append ( item ); seqNumber ++ ; } closeSoundDevice ( ); } Phụ lục 9: Mã nguồn module tạo lịch trình gửi liệu vào mạng void VoVBuffer::txTimerExpired() { if ( ( txBuffer->count( ) < initialWaterMark ) && !capturer->txFlag ) { txBufferProgressBar->setProgress( txBuffer->count( ) ); return; } else capturer->txFlag = TRUE; if ( txBuffer->isEmpty( ) && !capturer->txFlag ) { txTimer->stop(); stateInfor->info(); return; } if ( txBuffer->isEmpty( ) && capturer->txFlag ) { return; } else { rtp_header_t * rtpHeader = new rtp_header_t; rtpHeader ->seqNumber = txBuffer->at(0)->seqNumber; rtpHeader ->length = txBuffer->at(0)->length; rtpHeader ->timeStamp = QTime::currentTime ( Qt::UTC ); - xvii - int headerSize = sizeof (rtp_header_t ); int packetSize = headerSize + txBuffer->at(0)->length; if ( ( txBuffer->at(0)->mark != 0) { switch ( codecType ) { case PCM : rtpHeader->payloadType = PCM; break; case SPEEX: rtpHeader->payloadType = SPEEX; } } else rtpHeader->payloadType = SILENCE; char * rtpPacket = (char * ) malloc ( packetSize); memcpy (rtpPacket , rtpHeader , headerSize ); memcpy (rtpPacket+headerSize, txBuffer->at(0)->data, txBuffer->at(0)->length); sendDataToNetwork ( rtpPacket, packetSize); delete rtpHeader; free ( rtpPacket ); txBuffer->removeFirst(); } Phụ lục 10: Mã nguồn thực thuật toán thu nhận liệu từ mạng lưu vào đệm phía thu Module chương trình thực thao tác đọc liệu từ socket, tách liệu mang tín hiệu phát lưu vào đệm tạo, xử lý thơng tin điều khiển, giải mã tín hiệu tính tốn thời điểm tái tạo tín hiệu phát gói tin Mã nguồn chương trình: # define alpha 0.998002 - xviii - void PlayoutBuffer::receiveData ( char * data, int size) { rtp_header_t * rtpHeader = new rtp_header_t; rtpHeader = (rtp_header_t * ) data; int inputSize; inputSize = rtpHeader ->length; char * inputData = ( char * ) malloc ( inputSize ); int nbBytes = speexDecode->getEncodedByte ( qualityLevel ); int outputSize = inputSize * FRAME_SIZE * sizeof ( short ) / nbBytes; char* outputData = ( char * ) malloc ( outputSize); QTime rxTime = QTime::currentTime ( Qt::UTC ); long rxTime = timeConversion ( rxTime ); long txTime = timeConversion (rtpHeader->txTime); int currentNetworkDelay = rxTime - txTime; memcpy ( inputData , data + sizeof ( rtpHeader ), inputSize); if ( rtpHeader->payloadType == SILENCE ) { startTalkSpurt = FALSE; return; } else { sound_item_t *item = new sound_item_t; item->seqNumber = rtpHeader->seqNumber; switch ( rtpHeader->payloadType ) { case PCM : - xix - item->length = inputSize; item->data = ( char * ) malloc ( item->length ); memcpy ( item->data , inputData , inputSize ); break; case SPEEX : item->length = speexDecode->decodeData ( inputData , inputSize, nbBytes , outputData); item->data = ( char * ) malloc ( item->length); memcpy ( item->data , outputData, item->length ); break; } if ( startTalkSpurt ) { // bắt đầu chu kỳ tín hiệu phát tích cực if ( !startFlag ) { // bắt đầu nhận liệu, khởi tạo đồng hồ tạo lịch trình tái tạo tín hiệu previousPlayoutTime = rxTime; playoutTime = ( int ) ( txTime + currentAvarageDelay + * currentDelayVariation ); item->interval = playoutTime - previousPlayoutTime; previousPlayoutTime = playoutTime; pushDataToPlayoutBuffer ( item ); if ( algorithmType == SPIKE_DET ) { beforePreviousNetworkDelay = currentNetworkDelay; previousNetworkDelay = currentNetworkDelay; - xx - delayMode = NORMAL; } playoutTimer->start ( item->interval, TRUE ); startFlag = TRUE ; } else { // Thiết lập thời điểm tái tạo tín hiệu gói chu kỳ tín hiệu phát tích cực playoutTime = ( int ) ( txTime + curentAverageDelay + * currentDelayVariation ); item->interval = playoutTime - previousPlayoutTime; previousPlayoutTime = playoutTime; // Đưa liệu vào đệm tái tạo pushDataToPlayoutBuffer ( item ); // Ước đoán trễ mạng networkDelayEstimation ( currentNetworkDelay ); } startTalkspurt = TRUE; } else { // Tái tạo tín hiệu từ gói tin chu kỳ tín hiệu tích cực playoutTime = previousPlayoutTime + packetTimeLength; // Thiết lập thời điểm tái tạo tín hiệu item->interval = playoutTime - previousPlayoutTime; previousPlayoutTime = playoutTime; // Đưa liệu vào đệm tái tạo pushDataToPlayoutBuffer ( item ); // Ước đoán trễ mạng - xxi - networkDelayEstimation ( currentNetworkDelay ); } } } Phụ lục 11: Mã nguồn thực thuật toán ước đốn trễ mạng biến động trễ trung bình gói tin phục vụ q trình tái tạo tín hiệu thích ứng Trễ mạng ước đốn xác định thơng qua hàm: void PlayoutBuffer::networkDelayEstimation ( int currentNetworkDelay); Căn vào trễ mạng gói tin currentNetworkDelay [ms] Thuật tốn hàm trung bình mũ EXP_AVG thuật tốn SPIKE_DETECT sử dụng để tính tốn trễ mạng trung bình currentAverageDelay biến động trễ mạng trung bình currentDelayVariation Các thông số sử dụng phục vụ việc tạo lịch trình tái tạo tín hiệu phát thích ứng theo tình trạng trễ mạng Mã nguồn chương trình: # define spike_factor 0.875 void PlayoutBuffer::networkDelayEstimation ( int currentNetworkDelay) { swicth ( algorithmType ) { case EXP_AVG: currentAverageDelay = alpha * previousAverageDelay + ( - alpha ) * currentNetworkDelay ; currentDelayVariation = alpha * previousDelayVariation + ( - alpha ) * abs ( currentAverageDelay - currentNetworkDelay ); break; case SPIKE_DET: if (delayMode == NORMAL ) { - xxii - if ( abs ( currentNetworkDelay - previousNetworkDelay ) > abs ( * currentDelayVariation ) + 800 ) { // đột biến trễ bắt đầu xuất var = 0; delayMode = SPIKE; } } else { // mode:: SPIKE var = var / + abs ( * currentNetworkDelay previousNetworkDelay - beforePreviousNetworkDelay ) / 8; if ( var

Ngày đăng: 19/02/2014, 08:59

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan