เบเบฒเบ™เบชเบณเบซเบผเบงเบ”เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบ Mediastreamer2 VoIP. เบžเบฒเบเบ—เบต 6

เป€เบญเบเบฐเบชเบฒเบ™เบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเปเบกเปˆเบ™เป€เบญเบปเบฒเบกเบฒเบˆเบฒเบเบ‚เบญเบ‡เบ‚เป‰เบญเบ เบŠเปˆเบญเบ‡ zen.

เบเบฒเบ™เบชเบปเปˆเบ‡เบชเบฑเบ™เบเบฒเบ™เบชเบฝเบ‡เบœเปˆเบฒเบ™เบเบฐเปเบช RTP

เบเบฒเบ™เบชเบณเบซเบผเบงเบ”เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบ Mediastreamer2 VoIP. เบžเบฒเบเบ—เบต 6

เปƒเบ™เบ—เบตเปˆเบชเบธเบ” เบšเบปเบ”เบ„เบงเบฒเบก เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบ›เบฐเบเบญเบšเบงเบปเบ‡เบˆเบญเบ™เบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเป„เบฅเบเบฐเป„เบเบˆเบฒเบเป€เบ„เบทเปˆเบญเบ‡เบเปเบฒเป€เบ™เบตเบ”เบชเบฝเบ‡เปเบฅเบฐเป€เบ„เบทเปˆเบญเบ‡เบเบงเบ”เบˆเบฑเบšเบชเบฝเบ‡เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบžเบฒเบเปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ”เบฝเบงเบเบฑเบ™. เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบฎเบฝเบ™เบฎเบนเป‰เบงเบดเบ—เบตเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เป‚เบ›เป‚เบ•เบ„เบญเบ™ RTP (RFC 3550 - RTP: เบžเบดเบ—เบตเบเบฒเบ™เบเบฒเบ™เบ‚เบปเบ™เบชเบปเปˆเบ‡เบชเบณเบฅเบฑเบšเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เป€เบงเบฅเบฒเบˆเบดเบ‡) เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบฎเบฑเบš/เบชเบปเปˆเบ‡เบชเบฑเบ™เบเบฒเบ™เบชเบฝเบ‡เบœเปˆเบฒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบญเบตเป€เบ—เบตเป€เบ™เบฑเบ”.

เป‚เบ›เบฃเป‚เบ•เบ„เป RTP (เบžเบดเบ—เบตเบเบฒเบ™เป€เบงเบฅเบฒเบˆเบดเบ‡) เปเบ›เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเป‚เบ›เป‚เบ•เบ„เบญเบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡, เบกเบฑเบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบชเบปเปˆเบ‡เบชเบฝเบ‡, เบงเบดเบ”เบตเป‚เบญ, เบ‚เปเป‰เบกเบนเบ™, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบเบฒเบ™เบ–เปˆเบฒเบเบ—เบญเบ”เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡. เปƒเบซเป‰เป€เบญเบปเบฒเบชเบฑเบ™เบเบฒเบ™เบชเบฝเบ‡เป€เบ›เบฑเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡. เบ„เบงเบฒเบกเบเบทเบ”เบซเบเบธเปˆเบ™เบ‚เบญเบ‡เป‚เบ›เป‚เบ•เบ„เบญเบ™เปเบกเปˆเบ™เป€เบŠเบฑเปˆเบ™เบงเปˆเบฒเบกเบฑเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเบปเปˆเบ‡เบชเบฑเบ™เบเบฒเบ™เบชเบฝเบ‡เบ—เบตเปˆเบกเบตเบ„เบธเบ™เบฐเบžเบฒเบšเบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เบเปˆเบญเบ™.

เบเบฒเบ™เบชเบปเปˆเบ‡เบ•เปเปˆเปเบกเปˆเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป‚เบ”เบเปƒเบŠเป‰เปเบžเบฑเบเป€เบเบฑเบ” UDP, เบŠเบถเปˆเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบเบฒเบ™เบชเบนเบ™เป€เบชเบเปเบžเบฑเบเป€เบเบฑเบ”เปเบกเปˆเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบเบญเบกเบฎเบฑเบšเปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบชเบปเปˆเบ‡. เปเบ•เปˆเบฅเบฐเปเบžเบฑเบเป€เบเบฑเบ”เบกเบตเบชเปˆเบงเบ™เบซเบปเบง RTP เบžเบดเป€เบชเบ” เปเบฅเบฐเบšเบฅเบฑเบญเบเบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบชเบฑเบ™เบเบฒเบ™เบ—เบตเปˆเบชเบปเปˆเบ‡เบœเปˆเบฒเบ™. เบชเปˆเบงเบ™เบซเบปเบงเบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบ•เบปเบงเบฅเบฐเบšเบธเปเบซเบผเปˆเบ‡เบชเบฑเบ™เบเบฒเบ™เบ—เบตเปˆเป€เบฅเบทเบญเบเปเบšเบšเบชเบธเปˆเบก, เบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบชเบฑเบ™เบเบฒเบ™เบ—เบตเปˆเบ–เบทเบเบชเบปเปˆเบ‡, เปเบฅเบฐเปเบฒเบเป€เบฅเบเบฅเบณเบ”เบฑเบšเปเบžเบฑเบเป€เบเบฑเบ”เบ—เบตเปˆเป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบเป€เบžเบทเปˆเบญเปƒเบซเป‰เปเบžเบฑเบเป€เบเบฑเบ”เบ–เบทเบเบˆเบฑเบ”เบฅเบฝเบ‡เบ•เบฒเบกเบฅเบณเบ”เบฑเบšเบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เปƒเบ™เป€เบงเบฅเบฒเบ–เบญเบ”เบฅเบฐเบซเบฑเบ”, เป‚เบ”เบเบšเปเปˆเบ„เบณเบ™เบถเบ‡เป€เบ–เบดเบ‡เบเบฒเบ™เบˆเบฑเบ”เบฅเบฝเบ‡เบฅเบณเบ”เบฑเบšเบ—เบตเปˆเบžเบงเบเบกเบฑเบ™เบ–เบทเบเบชเบปเปˆเบ‡เป‚เบ”เบ เป€เบ„เบทเบญโ€‹เบ‚เปˆเบฒเบโ€‹. header เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบšเบฑเบ™เบˆเบธเบ‚เปเป‰เบกเบนเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบก, เบญเบฑเบ™เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒเบเบฒเบ™เบ‚เบฐเบซเบเบฒเบ, เป€เบŠเบดเปˆเบ‡เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰ header เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ”เบฑเบ”เปเบ›เบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เบงเบฝเบเบ‡เบฒเบ™เบชเบฐเป€เบžเบฒเบฐเปƒเบ”เบซเบ™เบถเปˆเบ‡.

เบšเบฅเบฑเบญเบเบ‚เปเป‰เบกเบนเบ™เบ›เบฐเบเบญเบšเบกเบต payload เบ‚เบญเบ‡เปเบžเบฑเบเป€เบเบฑเบ”. เบญเบปเบ‡เบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบžเบฒเบเปƒเบ™เบ‚เบญเบ‡เป€เบ™เบทเป‰เบญเบซเบฒเปเบกเปˆเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบเบฒเบ™เป‚เบซเบผเบ”, เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบชเบฑเบ™เบเบฒเบ™ mono, เบชเบฑเบ™เบเบฒเบ™ stereo, เบชเบฒเบเบฎเบนเบšเบžเบฒเบšเบงเบดเบ”เบตเป‚เบญ, เปเบฅเบฐเบญเบทเปˆเบ™เป†.

เบ›เบฐเป€เบžเบ”เบเบฒเบ™เป‚เบซเบผเบ”เปเบกเปˆเบ™เบชเบฐเปเบ”เบ‡เป‚เบ”เบเบ•เบปเบงเป€เบฅเบเป€เบˆเบฑเบ”เบšเบดเบ”. เบ„เบณเปเบ™เบฐเบ™เบณ RFC3551 (เป‚เบ›เบฃเป„เบŸเบฅเปŒ RTP เบชเปเบฒเบฅเบฑเบšเบเบญเบ‡เบ›เบฐเบŠเบธเบกเบชเบฝเบ‡ เปเบฅเบฐเบงเบดเบ”เบตเป‚เบญเบ—เบตเปˆเบกเบตเบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเปœเป‰เบญเบเบ—เบตเปˆเบชเบธเบ”) เบเปเบฒเบ™เบปเบ”เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบเบฒเบ™เป‚เบซเบผเบ”เบซเบผเบฒเบ; เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™เปƒเบซเป‰เบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเบเปˆเบฝเบงเบเบฑเบšเบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบเบฒเบ™เป‚เบซเบผเบ”เปเบฅเบฐเบ„เบงเบฒเบกเบซเบกเบฒเบเบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบžเบงเบเป€เบ‚เบปเบฒเบ–เบทเบเบเปเบฒเบ™เบปเบ”. เบšเบฒเบ‡เบฅเบฐเบซเบฑเบ”เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบœเบนเบเบกเบฑเบ”เบขเปˆเบฒเบ‡เป€เบ‚เบฑเป‰เบกเบ‡เบงเบ”เบเบฑเบšเบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบเบฒเบ™เป‚เบซเบผเบ”เปƒเบ”เป†; เบžเบงเบเป€เบ‚เบปเบฒเบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เป‚เบซเบผเบ”เป‚เบ”เบเบ•เบปเบ™เป€เบญเบ‡.

เบ‚เบฐเปœเบฒเบ”เบ‚เบญเบ‡เบšเบฅเบฑเบญเบเบ‚เปเป‰เบกเบนเบ™เบ–เบทเบเบˆเบณเบเบฑเบ”เป„เบงเป‰เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เป‚เบ”เบเบ‚เบฐเปœเบฒเบ”เปเบžเบฑเบเป€เบเบฑเบ”เบชเบนเบ‡เบชเบธเบ”เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบชเบปเปˆเบ‡เบœเปˆเบฒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบเปƒเบ”เปœเบถเปˆเบ‡เป„เบ”เป‰เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เปเบšเปˆเบ‡เบชเปˆเบงเบ™ (เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต MTU). เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เบ™เบตเป‰เปเบกเปˆเบ™เบšเปเปˆเป€เบเบตเบ™ 1500 bytes. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป€เบžเบทเปˆเบญเป€เบžเบตเปˆเบกเบ›เบฐเบฅเบดเบกเบฒเบ™เบเบฒเบ™เบชเบปเปˆเบ‡เบ•เปเปˆเบ•เปเปˆเบงเบดเบ™เบฒเบ—เบต, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบžเบตเปˆเบกเบ‚เบฐเบซเบ™เบฒเบ”เปเบžเบฑเบเป€เบเบฑเบ”เป€เบ–เบดเบ‡เบˆเบธเบ”เปƒเบ”เบซเบ™เบถเปˆเบ‡, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ–เบตเปˆเบ‚เบญเบ‡เบเบฒเบ™เบชเบปเปˆเบ‡เปเบžเบฑเบเป€เบเบฑเบ”. เปƒเบ™เบ•เบปเบงเบ–เปˆเบฒเบเบ—เบญเบ”เบชเบทเปˆ, เบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบเบณเบ™เบปเบ”เป„เบ”เป‰. เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบกเบฑเบ™เปเบกเปˆเบ™ 50 Hz, i.e. 50 เบŠเบญเบ‡เบ•เปเปˆเบงเบดเบ™เบฒเบ—เบต. เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบˆเบฐโ€‹เป€เบญเบตเป‰เบ™โ€‹เบฅเปเบฒโ€‹เบ”เบฑเบšโ€‹เบ‚เบญเบ‡โ€‹เบŠเบญเบ‡ RTP เบชเบปเปˆเบ‡โ€‹เบญเบญเบโ€‹เป€เบ›เบฑเบ™ RTP streamโ€‹.

เป€เบžเบทเปˆเบญเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบชเบปเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เปเบซเบผเปˆเบ‡เปเบฅเบฐเบœเบนเป‰เบฎเบฑเบš, เบกเบฑเบ™เบžเบฝเบ‡เบžเปเบชเปเบฒเบฅเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เบชเบปเปˆเบ‡เบ—เบตเปˆเบˆเบฐเบฎเบนเป‰เบ—เบตเปˆเบขเบนเปˆ IP เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบฎเบฑเบšเปเบฅเบฐเบซเบกเบฒเบเป€เบฅเบเบžเบญเบ”เบ—เบตเปˆเบกเบฑเบ™เปƒเบŠเป‰เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบฎเบฑเบš. เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™. เป‚เบ”เบเบšเปเปˆเบกเบตเบ‚เบฑเป‰เบ™เบ•เบญเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เปƒเบ”เป†, เปเบซเบผเปˆเบ‡เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ—เบตเปˆเบˆเบฐเบชเบปเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™, เปเบฅเบฐเบœเบนเป‰เบฎเบฑเบš, เปƒเบ™เบ—เบฒเบ‡เบเบฑเบšเบเบฑเบ™, เบžเป‰เบญเบกเบ—เบตเปˆเบˆเบฐเบฎเบฑเบšเปเบฅเบฐเบ›เบธเบ‡เปเบ•เปˆเบ‡เบกเบฑเบ™เบ—เบฑเบ™เบ—เบต. เบ•เบฒเบกเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™, เปเบฒเบเป€เบฅเบเบžเบญเบ”เบ—เบตเปˆเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบชเบปเปˆเบ‡ เบซเบผเบทเบฎเบฑเบšเบเบฐเปเบช RTP เบˆเบฐเบ•เป‰เบญเบ‡เป€เบ›เบฑเบ™เบ„เบนเปˆ.

เปƒเบ™เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ—เบตเปˆเบšเปเปˆเบชเบฒเบกเบฒเบ”เบฎเบนเป‰เบ—เบตเปˆเบขเบนเปˆเบ‚เบญเบ‡เบœเบนเป‰เบฎเบฑเบšเบฅเปˆเบงเบ‡เบซเบ™เป‰เบฒ, เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบšเปˆเบญเบ™เบ—เบตเปˆเบœเบนเป‰เบฎเบฑเบšเบญเบญเบเบˆเบฒเบเบ—เบตเปˆเบขเบนเปˆเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ, เปเบฅเบฐเป€เบ„เบทเปˆเบญเบ‡เบชเบปเปˆเบ‡เบชเบฒเบกเบฒเบ”เบฎเป‰เบญเบ‡เบ‚เปเบกเบฑเบ™เป„เบ”เป‰เป‚เบ”เบเบเบฒเบ™เบญเป‰เบฒเบ‡เป€เบ–เบดเบ‡เบšเบฒเบ‡เบŠเบทเปˆเบ—เบตเปˆเป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบเบ‚เบญเบ‡เบœเบนเป‰เบฎเบฑเบš.

เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบ„เบธเบ™เบ™เบฐเบžเบฒเบšเบ‚เบญเบ‡เบŠเปˆเบญเบ‡เบ—เบฒเบ‡เบเบฒเบ™เบชเบทเปˆเบชเบฒเบ™เบซเบผเบทเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ‚เบญเบ‡เบœเบนเป‰เบฎเบฑเบšเปเบกเปˆเบ™เบšเปเปˆเบฎเบนเป‰, เบŠเปˆเบญเบ‡เบ—เบฒเบ‡เบเบฒเบ™เบ•เบญเบšเป‚เบ•เป‰เบ–เบทเบเบˆเบฑเบ”เบ‚เบทเป‰เบ™เป‚เบ”เบเบœเปˆเบฒเบ™เบ—เบตเปˆเบœเบนเป‰เบฎเบฑเบšเบชเบฒเบกเบฒเบ”เปเบˆเป‰เบ‡เปƒเบซเป‰เบœเบนเป‰เบชเบปเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ‚เบญเบ‡เบกเบฑเบ™, เบˆเปเบฒเบ™เบงเบ™เบŠเบญเบ‡เบ—เบตเปˆเบกเบฑเบ™เบžเบฒเบ”, เปเบฅเบฐเบญเบทเปˆเบ™เป†. เบŠเปˆเบญเบ‡เบ™เบตเป‰เปƒเบŠเป‰เป‚เบ›เบฃเป‚เบ•เบ„เป RTCP. เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เปเบžเบฑเบเป€เบเบฑเบ”เบ—เบตเปˆเบ–เปˆเบฒเบเบ—เบญเบ”เบขเบนเปˆเปƒเบ™เบŠเปˆเบญเบ‡เบ—เบฒเบ‡เบ™เบตเป‰เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เปƒเบ™ RFC 3605. เบ‚เปเป‰เบกเบนเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบซเบ™เป‰เบญเบเบ–เบทเบเบชเบปเปˆเบ‡เบœเปˆเบฒเบ™เบŠเปˆเบญเบ‡เบ—เบฒเบ‡เบ™เบตเป‰, 200..300 bytes เบ•เปเปˆเบงเบดเบ™เบฒเบ—เบต, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เบเบฒเบ™เบ›เบฐเบเบปเบ”เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เบšเปเปˆเปเบกเปˆเบ™เบžเบฒเบฅเบฐเบซเบ™เบฑเบ. เปเบฒเบเป€เบฅเบเบžเบญเบ”เบ—เบตเปˆเปเบžเบฑเบเป€เบเบฑเบ” RTCP เบ–เบทเบเบชเบปเปˆเบ‡เบ•เป‰เบญเบ‡เป€เบ›เบฑเบ™เป€เบฅเบเบ„เบตเบ เปเบฅเบฐเบญเบฑเบ™เปœเบถเปˆเบ‡เปƒเบซเบเปˆเบเบงเปˆเบฒเปเบฒเบเป€เบฅเบเบžเบญเบ”เบ—เบตเปˆเบเบฐเปเบช RTP เบกเบฒ. เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเปเปˆเปƒเบŠเป‰เบŠเปˆเบญเบ‡เบ—เบฒเบ‡เบ™เบตเป‰, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ‚เบญเบ‡เบœเบนเป‰เบฎเบฑเบšเปเบฅเบฐเบŠเปˆเบญเบ‡เบ—เบฒเบ‡เปเบ™เปˆเบ™เบญเบ™เป€เบเบตเบ™เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบกเบฒเบฎเบญเบ”เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เป€เบฅเบฑเบเบ™เป‰เบญเบ.

เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบงเบปเบ‡เบˆเบญเบ™เบเบฒเบ™เบชเบปเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™, เบšเปเปˆเป€เบซเบกเบทเบญเบ™เบเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ, เบˆเบฐเปเบšเปˆเบ‡เบญเบญเบเป€เบ›เบฑเบ™เบชเบญเบ‡เบžเบฒเบเบชเปˆเบงเบ™: เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบชเบปเปˆเบ‡เปเบฅเบฐเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบฎเบฑเบš. เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบžเบฒเบเบชเปˆเบงเบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เปเบซเบผเปˆเบ‡เป‚เบกเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบญเบ‡, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบชเบฐเปเบ”เบ‡เบขเบนเปˆเปƒเบ™เบฎเบนเบšเบซเบปเบงเบ‚เปเป‰.

เบเบฒเบ™เบชเบทเปˆเบชเบฒเบ™เบ—เบฒเบ‡เบ”เบฝเบงเบฅเบฐเบซเบงเปˆเบฒเบ‡เบžเบงเบเบกเบฑเบ™เบˆเบฐเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ”เบเปƒเบŠเป‰เป‚เบ›เป‚เบ•เบ„เบญเบ™ RTP. เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบžเบฒเบเบ™เบญเบ, เป€เบžเบฒเบฐเบงเปˆเบฒเบ—เบฑเบ‡เป€เบ„เบทเปˆเบญเบ‡เบชเบปเปˆเบ‡เปเบฅเบฐเป€เบ„เบทเปˆเบญเบ‡เบฎเบฑเบšเบˆเบฐเบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เบ„เบญเบกเบžเบดเบงเป€เบ•เบตเบ”เบฝเบงเบเบฑเบ™ - เบŠเบธเบ”เบˆเบฐเป€เบ”เบตเบ™เบ—เบฒเบ‡เบžเบฒเบเปƒเบ™เบกเบฑเบ™.

เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡ RTP stream, media streamer เปƒเบŠเป‰เบชเบญเบ‡เบ•เบปเบงเบเบญเบ‡: MS_RTP_SEND เปเบฅเบฐ MS_RTP_RECV. เบญเบฑเบ™เบ—เปเบฒเบญเบดเบ”เบชเบปเปˆเบ‡เบญเบฑเบ™เบ—เบตเบชเบญเบ‡เปเบฅเบฐเป„เบ”เป‰เบฎเบฑเบšเบเบฐเปเบช RTP. เป€เบžเบทเปˆเบญเปƒเบซเป‰เบ•เบปเบงเบเบญเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เป€เบฎเบฑเบ”เบงเบฝเบ, เบžเบงเบเป€เบ‚เบปเบฒเบ•เป‰เบญเบ‡เบชเบปเปˆเบ‡เบ•เบปเบงเบŠเบตเป‰เป„เบ›เบซเบฒเบงเบฑเบ”เบ–เบธเป€เบŠเบ”เบŠเบฑเบ™ RTP, เป€เบŠเบดเปˆเบ‡เบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เบเบฐเปเบชเบ‚เบญเบ‡เบšเบฅเบฑเบญเบเบ‚เปเป‰เบกเบนเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบชเบฐเบ•เบฃเบตเบกเบ‚เบญเบ‡เปเบžเบฑเบเป€เบเบฑเบ” RTP เบซเบผเบทเป€เบฎเบฑเบ”เบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบก. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบฎเบนเบšเปเบšเบšเบ‚เปเป‰เบกเบนเบ™เบžเบฒเบเปƒเบ™เบ‚เบญเบ‡ media streamer เบšเปเปˆเบเบปเบ‡เบเบฑเบšเบฎเบนเบšเปเบšเบšเบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เปเบžเบฑเบเป€เบเบฑเบ” RTP, เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเป‚เบญเบ™เบ‚เปเป‰เบกเบนเบ™เป„เบ›เปƒเบชเปˆ MS_RTP_SEND, เบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เปƒเบŠเป‰เบ•เบปเบงเบเบญเบ‡เบ•เบปเบงเป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบ›เปˆเบฝเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบชเบฑเบ™เบเบฒเบ™เบชเบฝเบ‡ 16-bit เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบฅเบฐเบซเบฑเบ”เปเบ›เบ”เบšเบดเบ”เบ•เบฒเบกเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”. u-law (mu-law). เปƒเบ™เบ”เป‰เบฒเบ™เบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบš, เบ•เบปเบงเบเบญเบ‡เบ•เบปเบงเบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆเบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบก.

เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เปเบกเปˆเบ™เบ‚เปเป‰เบ„เบงเบฒเบกเบ‚เบญเบ‡เป‚เบ›เบฅเปเบเบฅเบกเบ—เบตเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเบชเบฐเปเบ”เบ‡เบขเบนเปˆเปƒเบ™เบฎเบนเบš (เบชเบฑเบ™เบเบฒเบฅเบฑเบ # เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเป€เบญเบปเบฒเบ„เปเบฒเบชเบฑเปˆเบ‡เบฅเบงเบกเป€เบญเบปเบฒเบญเบญเบ, เบขเปˆเบฒเบฅเบทเบกเปƒเบชเปˆเบžเบงเบเบกเบฑเบ™):

/* ะคะฐะนะป mstest6.c ะ˜ะผะธั‚ะฐั‚ะพั€ ะฟัƒะปัŒั‚ะฐ ัƒะฟั€ะฐะฒะปะตะฝะธั ะธ ะฟั€ะธะตะผะฝะธะบะฐ. */
#include <mediastreamer2/msfilter.h>
#include <mediastreamer2/msticker.h>
#include <mediastreamer2/dtmfgen.h>
#include <mediastreamer2/mssndcard.h>
#include <mediastreamer2/msvolume.h>
#include <mediastreamer2/mstonedetector.h>
#include <mediastreamer2/msrtp.h>
#include <ortp/rtpsession.h>
#include <ortp/payloadtype.h>
/* ะŸะพะดะบะปัŽั‡ะฐะตะผ ะทะฐะณะพะปะพะฒะพั‡ะฝั‹ะน ั„ะฐะนะป ั ั„ัƒะฝะบั†ะธัะผะธ ัƒะฟั€ะฐะฒะปะตะฝะธั ัะพะฑั‹ั‚ะธัะผะธ
* ะผะตะดะธะฐัั‚ั€ะธะผะตั€ะฐ.*/
include <mediastreamer2/mseventqueue.h>
#define PCMU 0
/* ะคัƒะฝะบั†ะธั ะพะฑั€ะฐั‚ะฝะพะณะพ ะฒั‹ะทะพะฒะฐ, ะพะฝะฐ ะฑัƒะดะตั‚ ะฒั‹ะทะฒะฐะฝะฐ ั„ะธะปัŒั‚ั€ะพะผ, ะบะฐะบ ั‚ะพะปัŒะบะพ ะพะฝ
ะพะฑะฝะฐั€ัƒะถะธั‚ ัะพะฒะฟะฐะดะตะฝะธะต ั…ะฐั€ะฐะบั‚ะตั€ะธัั‚ะธะบ ะฒั…ะพะดะฝะพะณะพ ัะธะณะฝะฐะปะฐ ั ะทะฐะดะฐะฝะฝั‹ะผะธ. */
static void tone_detected_cb(void *data, MSFilter *f, unsigned int event_id,
MSToneDetectorEvent *ev)
{
printf("ะŸั€ะธะฝัั‚ะฐ ะบะพะผะฐะฝะดะฐ: %sn", ev->tone_name);
}
/*----------------------------------------------------------------------------*/
/* ะคัƒะฝะบั†ะธั ั€ะตะณะธัั‚ั€ะฐั†ะธะธ ั‚ะธะฟะพะฒ ะฟะพะปะตะทะฝั‹ั… ะฝะฐะณั€ัƒะทะพะบ. */
void register_payloads(void)
{
/*ะ ะตะณะธัั‚ั€ะธั€ัƒะตะผ ั‚ะธะฟั‹ ะฝะฐะณั€ัƒะทะพะบ ะฒ ั‚ะฐะฑะปะธั†ะต ะฟั€ะพั„ะธะปะตะน. ะŸะพะทะดะฝะตะต, ะฟะพ ะธะฝะดะตะบััƒ
ะฒะทัั‚ะพะผัƒ ะธะท ะทะฐะณะพะปะพะฒะบะฐ RTP-ะฟะฐะบะตั‚ะฐ ะธะท ัั‚ะพะน ั‚ะฐะฑะปะธั†ั‹ ะฑัƒะดัƒั‚ ะธะทะฒะปะตะบะฐั‚ัŒัั
ะฟะฐั€ะฐะผะตั‚ั€ั‹ ะฝะฐะณั€ัƒะทะบะธ, ะฝะตะพะฑั…ะพะดะธะผั‹ะต ะดะปั ะดะตะบะพะดะธั€ะพะฒะฐะฝะธั ะดะฐะฝะฝั‹ั… ะฟะฐะบะตั‚ะฐ. */
rtp_profile_set_payload (&av_profile, PCMU, &payload_type_pcm8000);
}
/*----------------------------------------------------------------------------*/
/* ะญั‚ะฐ ั„ัƒะฝะบั†ะธั ัะพะทะดะฐะฝะฐ ะธะท ั„ัƒะฝะบั†ะธะธ create_duplex_rtpsession() ะฒ audiostream.c
ะผะตะดะธะฐัั‚ั€ะธะผะตั€ะฐ2. */
static RtpSession *
create_rtpsession (int loc_rtp_port, int loc_rtcp_port,
bool_t ipv6, RtpSessionMode mode)
{
RtpSession *rtpr;
rtpr = rtp_session_new ((int) mode);
rtp_session_set_scheduling_mode (rtpr, 0);
rtp_session_set_blocking_mode (rtpr, 0);
rtp_session_enable_adaptive_jitter_compensation (rtpr, TRUE);
rtp_session_set_symmetric_rtp (rtpr, TRUE);
rtp_session_set_local_addr (rtpr, ipv6 ? "::" : "0.0.0.0", loc_rtp_port,
loc_rtcp_port);
rtp_session_signal_connect (rtpr, "timestamp_jump",
(RtpCallback) rtp_session_resync, 0);
rtp_session_signal_connect (rtpr, "ssrc_changed",
(RtpCallback) rtp_session_resync, 0);
rtp_session_set_ssrc_changed_threshold (rtpr, 0);
rtp_session_set_send_payload_type(rtpr, PCMU);
/* ะŸะพ ัƒะผะพะปั‡ะฐะฝะธัŽ ะฒั‹ะบะปัŽั‡ะฐะตะผ RTCP-ัะตััะธัŽ, ั‚ะฐะบ ะบะฐะบ ะฝะฐัˆ ะฟัƒะปัŒั‚ ะฝะต ะฑัƒะดะตั‚ ะธัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ะตั‘. */
rtp_session_enable_rtcp (rtpr, FALSE);
return rtpr;
}
/*----------------------------------------------------------------------------*/
int main()
{
ms_init();
/* ะกะพะทะดะฐะตะผ ัะบะทะตะผะฟะปัั€ั‹ ั„ะธะปัŒั‚ั€ะพะฒ. */
MSFilter *voidsource = ms_filter_new(MS_VOID_SOURCE_ID);
MSFilter *dtmfgen = ms_filter_new(MS_DTMF_GEN_ID);
MSFilter *volume = ms_filter_new(MS_VOLUME_ID);
MSSndCard *card_playback =
ms_snd_card_manager_get_default_card(ms_snd_card_manager_get());
MSFilter *snd_card_write = ms_snd_card_create_writer(card_playback);
MSFilter *detector = ms_filter_new(MS_TONE_DETECTOR_ID);
/* ะžั‡ะธั‰ะฐะตะผ ะผะฐััะธะฒ ะฝะฐั…ะพะดัั‰ะธะนัั ะฒะฝัƒั‚ั€ะธ ะดะตั‚ะตะบั‚ะพั€ะฐ ั‚ะพะฝะพะฒ, ะพะฝ ะพะฟะธัั‹ะฒะฐะตั‚
* ะพัะพะฑั‹ะต ะฟั€ะธะผะตั‚ั‹ ั€ะฐะทั‹ัะบะธะฒะฐะตะผั‹ั… ัะธะณะฝะฐะปะพะฒ.*/
ms_filter_call_method(detector, MS_TONE_DETECTOR_CLEAR_SCANS, 0);
/* ะŸะพะดะบะปัŽั‡ะฐะตะผ ะบ ั„ะธะปัŒั‚ั€ัƒ ั„ัƒะฝะบั†ะธัŽ ะพะฑั€ะฐั‚ะฝะพะณะพ ะฒั‹ะทะพะฒะฐ. */
ms_filter_set_notify_callback(detector,
(MSFilterNotifyFunc)tone_detected_cb, NULL);
/* ะกะพะทะดะฐะตะผ ะผะฐััะธะฒ, ะบะฐะถะดั‹ะน ัะปะตะผะตะฝั‚ ะบะพั‚ะพั€ะพะณะพ ะพะฟะธัั‹ะฒะฐะตั‚ ั…ะฐั€ะฐะบั‚ะตั€ะธัั‚ะธะบัƒ
* ะพะดะฝะพะณะพ ะธะท ั‚ะพะฝะพะฒ, ะบะพั‚ะพั€ั‹ะน ั‚ั€ะตะฑัƒะตั‚ัั ะพะฑะฝะฐั€ัƒะถะธะฒะฐั‚ัŒ: ะขะตะบัั‚ะพะฒะพะต ะธะผั
* ะดะฐะฝะฝะพะณะพ ัะปะตะผะตะฝั‚ะฐ, ั‡ะฐัั‚ะพั‚ะฐ ะฒ ะณะตั€ั†ะฐั…, ะดะปะธั‚ะตะปัŒะฝะพัั‚ัŒ ะฒ ะผะธะปะปะธัะตะบัƒะฝะดะฐั…,
* ะผะธะฝะธะผะฐะปัŒะฝั‹ะน ัƒั€ะพะฒะตะฝัŒ ะพั‚ะฝะพัะธั‚ะตะปัŒะฝะพ 0,775ะ’. */
MSToneDetectorDef scan[6]=
{
{"V+",440, 100, 0.1}, /* ะšะพะผะฐะฝะดะฐ "ะฃะฒะตะปะธั‡ะธั‚ัŒ ะณั€ะพะผะบะพัั‚ัŒ". */
{"V-",540, 100, 0.1}, /* ะšะพะผะฐะฝะดะฐ "ะฃะผะตะฝัŒัˆะธั‚ัŒ ะณั€ะพะผะบะพัั‚ัŒ". */
{"C+",640, 100, 0.1}, /* ะšะพะผะฐะฝะดะฐ "ะฃะฒะตะปะธั‡ะธั‚ัŒ ะฝะพะผะตั€ ะบะฐะฝะฐะปะฐ". */
{"C-",740, 100, 0.1}, /* ะšะพะผะฐะฝะดะฐ "ะฃะผะตะฝัŒัˆะธั‚ัŒ ะฝะพะผะตั€ ะบะฐะฝะฐะปะฐ". */
{"ON",840, 100, 0.1}, /* ะšะพะผะฐะฝะดะฐ "ะ’ะบะปัŽั‡ะธั‚ัŒ ั‚ะตะปะตะฒะธะทะพั€". */
{"OFF", 940, 100, 0.1}/* ะšะพะผะฐะฝะดะฐ "ะ’ั‹ะบะปัŽั‡ะธั‚ัŒ ั‚ะตะปะตะฒะธะทะพั€". */
};
/* ะŸะตั€ะตะดะฐะตะผ "ะฟั€ะธะผะตั‚ั‹" ัะธะณะฝะฐะปะพะฒ ะดะตั‚ะตะบั‚ะพั€ ั‚ะพะฝะพะฒ. */
int i;
for (i = 0; i < 6; i++)
{
ms_filter_call_method(detector, MS_TONE_DETECTOR_ADD_SCAN,
&scan[i]);
}
/* ะกะพะทะดะฐะตะผ ั„ะธะปัŒั‚ั€ั‹ ะบะพะดะตั€ะฐ ะธ ะดะตะบะพะดะตั€ะฐ */
MSFilter *encoder = ms_filter_create_encoder("PCMU");
MSFilter *decoder=ms_filter_create_decoder("PCMU");
/* ะ ะตะณะธัั‚ั€ะธั€ัƒะตะผ ั‚ะธะฟั‹ ะฝะฐะณั€ัƒะทะบะธ. */
register_payloads();
/* ะกะพะทะดะฐะตะผ RTP-ัะตััะธัŽ ะฟะตั€ะตะดะฐั‚ั‡ะธะบะฐ. */
RtpSession *tx_rtp_session = create_rtpsession (8010, 8011, FALSE, RTP_SESSION_SENDONLY);
rtp_session_set_remote_addr_and_port(tx_rtp_session,"127.0.0.1", 7010, 7011);
rtp_session_set_send_payload_type(tx_rtp_session, PCMU);
MSFilter *rtpsend = ms_filter_new(MS_RTP_SEND_ID);
ms_filter_call_method(rtpsend, MS_RTP_SEND_SET_SESSION, tx_rtp_session);
/* ะกะพะทะดะฐะตะผ RTP-ัะตััะธัŽ ะฟั€ะธะตะผะฝะธะบะฐ. */
MSFilter *rtprecv = ms_filter_new(MS_RTP_RECV_ID);
RtpSession *rx_rtp_session = create_rtpsession (7010, 7011, FALSE, RTP_SESSION_RECVONLY);
ms_filter_call_method(rtprecv, MS_RTP_RECV_SET_SESSION, rx_rtp_session);
/* ะกะพะทะดะฐะตะผ ะธัั‚ะพั‡ะฝะธะบะธ ั‚ะฐะบั‚ะพะฒ - ั‚ะธะบะตั€ั‹. */
MSTicker *ticker_tx = ms_ticker_new();
MSTicker *ticker_rx = ms_ticker_new();
/* ะกะพะตะดะธะฝัะตะผ ั„ะธะปัŒั‚ั€ั‹ ะฟะตั€ะตะดะฐั‚ั‡ะธะบะฐ. */
ms_filter_link(voidsource, 0, dtmfgen, 0);
ms_filter_link(dtmfgen, 0, volume, 0);
ms_filter_link(volume, 0, encoder, 0);
ms_filter_link(encoder, 0, rtpsend, 0);
/* ะกะพะตะดะธะฝัะตะผ ั„ะธะปัŒั‚ั€ั‹ ะฟั€ะธั‘ะผะฝะธะบะฐ. */
ms_filter_link(rtprecv, 0, decoder, 0);
ms_filter_link(decoder, 0, detector, 0);
ms_filter_link(detector, 0, snd_card_write, 0);
/* ะŸะพะดะบะปัŽั‡ะฐะตะผ ะธัั‚ะพั‡ะฝะธะบ ั‚ะฐะบั‚ะพะฒ. */
ms_ticker_attach(ticker_tx, voidsource);
ms_ticker_attach(ticker_rx, rtprecv);
/* ะะฐัั‚ั€ะฐะธะฒะฐะตะผ ัั‚ั€ัƒะบั‚ัƒั€ัƒ, ัƒะฟั€ะฐะฒะปััŽั‰ัƒัŽ ะฒั‹ั…ะพะดะฝั‹ะผ ัะธะณะฝะฐะปะพะผ ะณะตะฝะตั€ะฐั‚ะพั€ะฐ. */
MSDtmfGenCustomTone dtmf_cfg;
dtmf_cfg.tone_name[0] = 0;
dtmf_cfg.duration = 1000;
dtmf_cfg.frequencies[0] = 440;
/* ะ‘ัƒะดะตะผ ะณะตะฝะตั€ะธั€ะพะฒะฐั‚ัŒ ะพะดะธะฝ ั‚ะพะฝ, ั‡ะฐัั‚ะพั‚ัƒ ะฒั‚ะพั€ะพะณะพ ั‚ะพะฝะฐ ัƒัั‚ะฐะฝะพะฒะธะผ ะฒ 0. */
dtmf_cfg.frequencies[1] = 0;
dtmf_cfg.amplitude = 1.0;
dtmf_cfg.interval = 0.;
dtmf_cfg.repeat_count = 0.;
/* ะžั€ะณะฐะฝะธะทัƒะตะผ ั†ะธะบะป ัะบะฐะฝะธั€ะพะฒะฐะฝะธั ะฝะฐะถะฐั‚ั‹ั… ะบะปะฐะฒะธัˆ. ะ’ะฒะพะด ะฝัƒะปั ะทะฐะฒะตั€ัˆะฐะตั‚
* ั†ะธะบะป ะธ ั€ะฐะฑะพั‚ัƒ ะฟั€ะพะณั€ะฐะผะผั‹. */
char key='9';
printf("ะะฐะถะผะธั‚ะต ะบะปะฐะฒะธัˆัƒ ะบะพะผะฐะฝะดั‹, ะทะฐั‚ะตะผ ะฒะฒะพะด.n"
"ะ”ะปั ะทะฐะฒะตั€ัˆะตะฝะธั ะฟั€ะพะณั€ะฐะผะผั‹ ะฒะฒะตะดะธั‚ะต 0.n");
while(key != '0')
{
key = getchar();
if ((key >= 49) && (key <= 54))
{
printf("ะžั‚ะฟั€ะฐะฒะปะตะฝะฐ ะบะพะผะฐะฝะดะฐ: %cn", key);
/* ะฃัั‚ะฐะฝะฐะฒะปะธะฒะฐะตะผ ั‡ะฐัั‚ะพั‚ัƒ ะณะตะฝะตั€ะฐั‚ะพั€ะฐ ะฒ ัะพะพั‚ะฒะตั‚ัั‚ะฒะธะธ ั
* ะบะพะดะพะผ ะฝะฐะถะฐั‚ะพะน ะบะปะฐะฒะธัˆะธ. */
dtmf_cfg.frequencies[0] = 440 + 100*(key-49);
/* ะ’ะบะปัŽั‡ะฐะตะผ ะทะฒัƒะบะพะฒะพะน ะณะตะฝะตั€ะฐั‚ะพั€ c ะพะฑะฝะพะฒะปะตะฝะฝะพะน ั‡ะฐัั‚ะพั‚ะพะน. */
ms_filter_call_method(dtmfgen, MS_DTMF_GEN_PLAY_CUSTOM,
(void*)&dtmf_cfg);
}
/* ะฃะบะปะฐะดั‹ะฒะฐะตะผ ั‚ั€ะตะด ะฒ ัะฟัั‡ะบัƒ ะฝะฐ 20ะผั, ั‡ั‚ะพะฑั‹ ะดั€ัƒะณะธะต ั‚ั€ะตะดั‹
* ะฟั€ะธะปะพะถะตะฝะธั ะฟะพะปัƒั‡ะธะปะธ ะฒั€ะตะผั ะฝะฐ ั€ะฐะฑะพั‚ัƒ. */
ms_usleep(20000);
}
}

เบžเบงเบเป€เบฎเบปเบฒเบฅเบงเบšเบฅเบงเบกเปเบฅเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™. เป‚เบ›เบฃเปเบเบฃเบกเบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบ„เบทเบเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ, เปเบ•เปˆเบ‚เปเป‰เบกเบนเบ™เบˆเบฐเบ–เบทเบเบชเบปเปˆเบ‡เบœเปˆเบฒเบ™เบเบฐเปเบช RTP.

เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ•เปเปˆเป„เบ›เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเปเบšเปˆเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบ™เบตเป‰เบญเบญเบเป€เบ›เบฑเบ™เบชเบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเป€เบญเบเบฐเบฅเบฒเบ” - เป€เบ„เบทเปˆเบญเบ‡เบฎเบฑเบšเปเบฅเบฐเป€เบ„เบทเปˆเบญเบ‡เบชเบปเปˆเบ‡เปเบฅเบฐเป€เบ›เบตเบ”เปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบขเบนเปˆเปƒเบ™เบˆเบธเบ”เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบฎเบฝเบ™เบฎเบนเป‰เบงเบดเบ—เบตเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเปเบžเบฑเบเป€เบเบฑเบ” RTP เป‚เบ”เบเปƒเบŠเป‰เป‚เบ›เปเบเบผเบก TShark.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™