Mediastreamer2 VoIP เชเชจเซเชœเชฟเชจเชจเซ€ เชถเซ‹เชงเช–เซ‹เชณ. เชญเชพเช— 6

เชฒเซ‡เช–เชจเซ€ เชธเชพเชฎเช—เซเชฐเซ€ เชฎเชพเชฐเชพ เชชเชฐเชฅเซ€ เชฒเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซ€ เช›เซ‡ เชเซ‡เชจ เชšเซ‡เชจเชฒ.

RTP เชธเซเชŸเซเชฐเซ€เชฎ เชฆเซเชตเชพเชฐเชพ เช‘เชกเชฟเช“ เชธเชฟเช—เซเชจเชฒ เชŸเซเชฐเชพเชจเซเชธเชฎเชฟเชŸ เช•เชฐเชตเซเช‚

Mediastreamer2 VoIP เชเชจเซเชœเชฟเชจเชจเซ€ เชถเซ‹เชงเช–เซ‹เชณ. เชญเชพเช— 6

เช›เซ‡เชฒเซเชฒเชพเชฎเชพเช‚ เชฒเซ‡เช– เช…เชฎเซ‡ เชŸเซ‹เชจ เชœเชจเชฐเซ‡เชŸเชฐ เช…เชจเซ‡ เชŸเซ‹เชจ เชกเชฟเชŸเซ‡เช•เซเชŸเชฐเชฎเชพเช‚เชฅเซ€ เชฐเชฟเชฎเซ‹เชŸ เช•เช‚เชŸเซเชฐเซ‹เชฒ เชธเชฐเซเช•เชฟเชŸ เชเชธเซ‡เชฎเซเชฌเชฒ เช•เชฐเซเชฏเซเช‚ เช›เซ‡ เชœเซ‡ เชธเชฎเชพเชจ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฎเชพเช‚ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡. เช† เชฒเซ‡เช–เชฎเชพเช‚ เช†เชชเชฃเซ‡ RTP เชชเซเชฐเซ‹เชŸเซ‹เช•เซ‹เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชฐเชตเซ‹ เชคเซ‡ เชถเซ€เช–เซ€เชถเซเช‚ (RFC 3550 - RTP: เชฐเซ€เช…เชฒ-เชŸเชพเช‡เชฎ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธ เชฎเชพเชŸเซ‡ เชŸเซเชฐเชพเชจเซเชธเชชเซ‹เชฐเซเชŸ เชชเซเชฐเซ‹เชŸเซ‹เช•เซ‹เชฒ) เชˆเชฅเชฐเชจเซ‡เชŸ เชจเซ‡เชŸเชตเชฐเซเช• เชชเชฐ เช“เชกเชฟเชฏเซ‹ เชธเชฟเช—เซเชจเชฒ เชชเซเชฐเชพเชชเซเชค เช•เชฐเชตเชพ/เชชเซเชฐเชธเชพเชฐเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡.

RTP เชชเซเชฐเซ‹เชŸเซ‹เช•เซ‹เชฒ (เชฐเซ€เช…เชฒ เชŸเชพเช‡เชฎ เชชเซเชฐเซ‹เชŸเซ‹เช•เซ‹เชฒ) เช…เชจเซเชตเชพเชฆเชจเซ‹ เช…เชฐเซเชฅ เชฐเซ€เช…เชฒ-เชŸเชพเช‡เชฎ เชชเซเชฐเซ‹เชŸเซ‹เช•เซ‹เชฒ เช›เซ‡, เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช‘เชกเชฟเช“, เชตเชฟเชกเชฟเชฏเซ‹, เชกเซ‡เชŸเชพ, เชตเชพเชธเซเชคเชตเชฟเช• เชธเชฎเชฏเชฎเชพเช‚ เชŸเซเชฐเชพเชจเซเชธเชฎเชฟเชถเชจเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ เชคเซ‡ เชฌเชงเซเช‚ เชŸเซเชฐเชพเชจเซเชธเชฎเชฟเชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฅเชพเชฏ เช›เซ‡. เชšเชพเชฒเซ‹ เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡ เช“เชกเชฟเชฏเซ‹ เชธเชฟเช—เซเชจเชฒ เชฒเชˆเช. เชชเซเชฐเซ‹เชŸเซ‹เช•เซ‹เชฒเชจเซ€ เชฒเชตเชšเซ€เช•เชคเชพ เชเชตเซ€ เช›เซ‡ เช•เซ‡ เชคเซ‡ เชคเชฎเชจเซ‡ เชชเซ‚เชฐเซเชตเชจเชฟเชฐเซเชงเชพเชฐเชฟเชค เช—เซเชฃเชตเชคเซเชคเชพ เชธเชพเชฅเซ‡ เช‘เชกเชฟเช“ เชธเชฟเช—เซเชจเชฒ เชŸเซเชฐเชพเชจเซเชธเชฎเชฟเชŸ เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡.

เชŸเซเชฐเชพเชจเซเชธเชฎเชฟเชถเชจ UDP เชชเซ‡เช•เซ‡เชŸเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชนเชพเชฅ เชงเชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชœเซ‡เชจเซ‹ เช…เชฐเซเชฅ เช›เซ‡ เช•เซ‡ เชŸเซเชฐเชพเชจเซเชธเชฎเชฟเชถเชจ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชชเซ‡เช•เซ‡เชŸเชจเซ€ เช–เซ‹เชŸ เชคเชฆเซเชฆเชจ เชธเซเชตเซ€เช•เชพเชฐเซเชฏ เช›เซ‡. เชฆเชฐเซ‡เช• เชชเซ‡เช•เซ‡เชŸเชฎเชพเช‚ เช–เชพเชธ RTP เชนเซ‡เชกเชฐ เช…เชจเซ‡ เชŸเซเชฐเชพเชจเซเชธเชฎเชฟเชŸเซ‡เชก เชธเชฟเช—เซเชจเชฒเชจเซ‹ เชกเซ‡เชŸเชพ เชฌเซเชฒเซ‹เช• เชนเซ‹เชฏ เช›เซ‡. เชนเซ‡เชกเชฐเชฎเชพเช‚ เช…เชตเซเชฏเชตเชธเซเชฅเชฟเชค เชฐเซ€เชคเซ‡ เชชเชธเช‚เชฆ เช•เชฐเซ‡เชฒ เชธเชฟเช—เซเชจเชฒ เชธเซเชคเซเชฐเซ‹เชค เช“เชณเช–เช•เชฐเซเชคเชพ, เชชเซเชฐเชธเชพเชฐเชฟเชค เชฅเชคเชพ เชธเชฟเช—เซเชจเชฒเชจเชพ เชชเซเชฐเช•เชพเชฐ เชตเชฟเชถเซ‡เชจเซ€ เชฎเชพเชนเชฟเชคเซ€ เช…เชจเซ‡ เชเช• เช…เชจเชจเซเชฏ เชชเซ‡เช•เซ‡เชŸ เชธเชฟเช•เซเชตเชจเซเชธ เชจเช‚เชฌเชฐเชจเซ‹ เชธเชฎเชพเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡ เชœเซ‡เชฅเซ€ เชชเซ‡เช•เซ‡เชŸเซ‹เชจเซ‡ เชกเซ€เช•เซ‹เชก เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เชฏเซ‹เช—เซเชฏ เช•เซเชฐเชฎเชฎเชพเช‚ เช—เซ‹เช เชตเซ€ เชถเช•เชพเชฏ, เชชเช›เซ€ เชญเชฒเซ‡เชจเซ‡ เชคเซ‡เช“ เชœเซ‡ เช•เซเชฐเชฎเชฎเชพเช‚ เชตเชฟเชคเชฐเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เชนเซ‹เชฏ. เชจเซ‡เชŸเชตเชฐเซเช• เชนเซ‡เชกเชฐเชฎเชพเช‚ เชตเชงเชพเชฐเชพเชจเซ€ เชฎเชพเชนเชฟเชคเซ€ เชชเชฃ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡, เช•เชนเซ‡เชตเชพเชคเชพ เชเช•เซเชธเซเชŸเซ‡เช‚เชถเชจ, เชœเซ‡ เชนเซ‡เชกเชฐเชจเซ‡ เชšเซ‹เช•เซเช•เชธ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เช•เชพเชฐเซเชฏเชฎเชพเช‚ เช‰เชชเชฏเซ‹เช— เชฎเชพเชŸเซ‡ เช…เชจเซเช•เซ‚เชฒเชฟเชค เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡.

เชกเซ‡เชŸเชพ เชฌเซเชฒเซ‹เช•เชฎเชพเช‚ เชชเซ‡เช•เซ‡เชŸเชจเซ‹ เชชเซ‡เชฒเซ‹เชก เชนเซ‹เชฏ เช›เซ‡. เชธเชพเชฎเช—เซเชฐเซ€เชจเซ€ เช†เช‚เชคเชฐเชฟเช• เชธเช‚เชธเซเชฅเชพ เชฒเซ‹เชกเชจเชพ เชชเซเชฐเช•เชพเชฐ เชชเชฐ เช†เชงเชพเชฐเชฟเชค เช›เซ‡, เชคเซ‡ เชฎเซ‹เชจเซ‹ เชธเชฟเช—เซเชจเชฒ, เชธเซเชŸเซ€เชฐเชฟเชฏเซ‹ เชธเชฟเช—เซเชจเชฒ, เชตเชฟเชกเชฟเช“ เช‡เชฎเซ‡เชœ เชฒเชพเช‡เชจ เชตเช—เซ‡เชฐเซ‡เชจเชพ เชจเชฎเซ‚เชจเชพเช“ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡.

เชฒเซ‹เชกเชจเซ‹ เชชเซเชฐเช•เชพเชฐ เชธเชพเชค-เชฌเซ€เชŸ เชจเช‚เชฌเชฐ เชฆเซเชตเชพเชฐเชพ เชธเซ‚เชšเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชญเชฒเชพเชฎเชฃ RFC3551 (เชจเซเชฏเซ‚เชจเชคเชฎ เชจเชฟเชฏเช‚เชคเซเชฐเชฃ เชธเชพเชฅเซ‡ เช“เชกเชฟเชฏเซ‹ เช…เชจเซ‡ เชตเชฟเชกเชฟเชฏเซ‹ เช•เซ‹เชจเซเชซเชฐเชจเซเชธ เชฎเชพเชŸเซ‡ RTP เชชเซเชฐเซ‹เชซเชพเช‡เชฒ) เชตเชฟเชตเชฟเชง เชชเซเชฐเช•เชพเชฐเชจเชพ เชฒเซ‹เชกเชจเซ€ เชธเซเชฅเชพเชชเชจเชพ เช•เชฐเซ‡ เช›เซ‡; เช…เชจเซเชฐเซ‚เชช เช•เซ‹เชทเซเชŸเช• เชฒเซ‹เชกเชจเชพ เชชเซเชฐเช•เชพเชฐเซ‹ เช…เชจเซ‡ เช•เซ‹เชกเชจเชพ เช…เชฐเซเชฅเชจเซเช‚ เชตเชฐเซเชฃเชจ เชชเซเชฐเชฆเชพเชจ เช•เชฐเซ‡ เช›เซ‡ เชœเซ‡เชจเชพ เชฆเซเชตเชพเชฐเชพ เชคเซ‡เช“ เชจเชฟเชฏเซเช•เซเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เช›เซ‡. เช•เซ‡เชŸเชฒเชพเช• เช•เซ‹เชก เช•เซ‹เชˆเชชเชฃ เชชเซเชฐเช•เชพเชฐเชจเชพ เชฒเซ‹เชก เชธเชพเชฅเซ‡ เชธเช–เชค เชฐเซ€เชคเซ‡ เชœเซ‹เชกเชพเชฏเซ‡เชฒเชพ เชจเชฅเซ€; เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชฎเชจเชธเซเชตเซ€ เชฒเซ‹เชกเชจเซ‡ เชจเชฟเชฏเซเช•เซเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฅเชˆ เชถเช•เซ‡ เช›เซ‡.

เชกเซ‡เชŸเชพ เชฌเซเชฒเซ‹เช•เชจเซเช‚ เช•เชฆ เช‰เชชเชฐเชจเชพ เชฎเชนเชคเซเชคเชฎ เชชเซ‡เช•เซ‡เชŸ เช•เชฆ เชฆเซเชตเชพเชฐเชพ เชฎเชฐเซเชฏเชพเชฆเชฟเชค เช›เซ‡ เชœเซ‡ เช†เชชเซ‡เชฒ เชจเซ‡เชŸเชตเชฐเซเช• เชชเชฐ เชธเซ‡เช—เซเชฎเซ‡เชจเซเชŸเซ‡เชถเชจ (MTU เชชเซ‡เชฐเชพเชฎเซ€เชŸเชฐ) เชตเชฟเชจเชพ เชŸเซเชฐเชพเชจเซเชธเชฎเชฟเชŸ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡. เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡, เช† 1500 เชฌเชพเช‡เชŸเซเชธ เช•เชฐเชคเชพเช‚ เชตเชงเซ เชจเชฅเซ€. เช†เชฎ, เชชเซเชฐเชคเชฟ เชธเซ‡เช•เชจเซเชก เชŸเซเชฐเชพเชจเซเชธเชฎเชฟเชŸ เชฅเชคเชพ เชกเซ‡เชŸเชพเชจเซ€ เชฎเชพเชคเซเชฐเชพ เชตเชงเชพเชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเซ‡ เชชเซ‡เช•เซ‡เชŸเชจเซเช‚ เช•เชฆ เชšเซ‹เช•เซเช•เชธ เชฌเชฟเช‚เชฆเซ เชธเซเชงเซ€ เชตเชงเชพเชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เช…เชจเซ‡ เชชเช›เซ€ เชคเชฎเชพเชฐเซ‡ เชชเซ‡เช•เซ‡เชŸเซ‹ เชฎเซ‹เช•เชฒเชตเชพเชจเซ€ เช†เชตเชฐเซเชคเชจ เชตเชงเชพเชฐเชตเซ€ เชชเชกเชถเซ‡. เชฎเซ€เชกเชฟเชฏเชพ เชธเซเชŸเซเชฐเซ€เชฎเชฐเชฎเชพเช‚, เช† เช—เซ‹เช เชตเชฃเซ€ เช•เชฐเซ€ เชถเช•เชพเชฏ เชคเซ‡เชตเซ€ เชธเซ‡เชŸเชฟเช‚เช— เช›เซ‡. เชฎเซ‚เชณเชญเซ‚เชค เชฐเซ€เชคเซ‡ เชคเซ‡ 50 Hz เช›เซ‡, เชเชŸเชฒเซ‡ เช•เซ‡. 50 เชชเซ‡เช•เซ‡เชŸ เชชเซเชฐเชคเชฟ เชธเซ‡เช•เชจเซเชก. เช…เชฎเซ‡ เชŸเซเชฐเชพเชจเซเชธเชฎเชฟเชŸเซ‡เชก RTP เชชเซ‡เช•เซ‡เชŸเชจเชพ เช•เซเชฐเชฎเชจเซ‡ RTP เชธเซเชŸเซเชฐเซ€เชฎ เช•เชนเซ€เชถเซเช‚.

เชธเซเชคเซเชฐเซ‹เชค เช…เชจเซ‡ เชฐเซ€เชธเซ€เชตเชฐ เชตเชšเซเชšเซ‡ เชกเซ‡เชŸเชพ เชŸเซเชฐเชพเชจเซเชธเชฎเชฟเชŸ เช•เชฐเชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเซ‡ เชชเชฐเซเชฏเชพเชชเซเชค เช›เซ‡ เช•เซ‡ เชŸเซเชฐเชพเชจเซเชธเชฎเซ€เชŸเชฐ เชฐเซ€เชธเซ€เชตเชฐเชจเซเช‚ IP เชธเชฐเชจเชพเชฎเซเช‚ เช…เชจเซ‡ เชคเซ‡ เชชเซเชฐเชพเชชเซเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡ เชคเซ‡ เชชเซ‹เชฐเซเชŸ เชจเช‚เชฌเชฐ เชœเชพเชฃเซ‡ เช›เซ‡. เชคเซ‡. เช•เซ‹เชˆเชชเชฃ เชชเซเชฐเชพเชฐเช‚เชญเชฟเช• เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“ เชตเชฟเชจเชพ, เชธเซเชคเซเชฐเซ‹เชค เชกเซ‡เชŸเชพ เชŸเซเชฐเชพเชจเซเชธเชฎเชฟเชŸ เช•เชฐเชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเซ‡ เช›เซ‡, เช…เชจเซ‡ เชฐเซ€เชธเซ€เชตเชฐ, เชฌเชฆเชฒเชพเชฎเชพเช‚, เชคเซ‡เชจเซ‡ เชคเชฐเชค เชœ เชชเซเชฐเชพเชชเซเชค เช•เชฐเชตเชพ เช…เชจเซ‡ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชคเซˆเชฏเชพเชฐ เช›เซ‡. เชงเซ‹เชฐเชฃ เชฎเซเชœเชฌ, RTP เชธเซเชŸเซเชฐเซ€เชฎ เชŸเซเชฐเชพเชจเซเชธเชฎเชฟเชŸ เช•เชฐเชตเชพ เช…เชฅเชตเชพ เชชเซเชฐเชพเชชเซเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชตเชชเชฐเชพเชคเซ‹ เชชเซ‹เชฐเซเชŸ เชจเช‚เชฌเชฐ เชธเชฎ เชนเซ‹เชตเซ‹ เชœเซ‹เชˆเช.

เชเชตเซ€ เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเช“เชฎเชพเช‚ เชœเซเชฏเชพเช‚ เชฐเซ€เชธเซ€เชตเชฐเชจเซเช‚ เชธเชฐเชจเชพเชฎเซเช‚ เช…เช—เชพเช‰เชฅเซ€ เชœเชพเชฃเชตเซเช‚ เช…เชถเช•เซเชฏ เช›เซ‡, เชธเชฐเซเชตเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เชœเซเชฏเชพเช‚ เชฐเซ€เชธเซ€เชตเชฐเซ‹ เชคเซ‡เชฎเชจเซเช‚ เชธเชฐเชจเชพเชฎเซเช‚ เช›เซ‹เชกเซ€ เชฆเซ‡ เช›เซ‡, เช…เชจเซ‡ เชŸเซเชฐเชพเชจเซเชธเชฎเซ€เชŸเชฐ เชฐเซ€เชธเซ€เชตเชฐเชจเชพ เช…เชฎเซเช• เชตเชฟเชถเชฟเชทเซเชŸ เชจเชพเชฎเชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเซ€เชจเซ‡ เชคเซ‡เชจเซ€ เชตเชฟเชจเช‚เชคเซ€ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡.

เชเชตเชพ เช•เชฟเชธเซเชธเชพเช“เชฎเชพเช‚ เช•เซ‡ เชœเซเชฏเชพเช‚ เชธเช‚เชšเชพเชฐ เชšเซ‡เชจเชฒเชจเซ€ เช—เซเชฃเชตเชคเซเชคเชพ เช…เชฅเชตเชพ เชฐเซ€เชธเซ€เชตเชฐเชจเซ€ เช•เซเชทเชฎเชคเชพเช“ เช…เชœเชพเชฃ เช›เซ‡, เชเช• เชชเซเชฐเชคเชฟเชธเชพเชฆ เชšเซ‡เชจเชฒเชจเซเช‚ เช†เชฏเซ‹เชœเชจ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เชœเซ‡เชจเชพ เชฆเซเชตเชพเชฐเชพ เชฐเซ€เชธเซ€เชตเชฐ เชŸเซเชฐเชพเชจเซเชธเชฎเซ€เชŸเชฐเชจเซ‡ เชคเซ‡เชจเซ€ เช•เซเชทเชฎเชคเชพเช“, เชคเซ‡ เชšเซ‚เช•เซ€ เช—เชฏเซ‡เชฒเชพ เชชเซ‡เช•เซ‡เชŸเซ‹เชจเซ€ เชธเช‚เช–เซเชฏเชพ เชตเช—เซ‡เชฐเซ‡ เชตเชฟเชถเซ‡ เชœเชพเชฃ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡. เช† เชšเซ‡เชจเชฒ RTCP เชชเซเชฐเซ‹เชŸเซ‹เช•เซ‹เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡. เช† เชšเซ‡เชจเชฒเชฎเชพเช‚ เชชเซเชฐเชธเชพเชฐเชฟเชค เชฅเชคเชพ เชชเซ‡เช•เซ‡เชŸเซ‹เชจเซเช‚ เชซเซ‹เชฐเซเชฎเซ‡เชŸ RFC 3605 เชฎเชพเช‚ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เชฅเชฏเซ‡เชฒ เช›เซ‡. เช† เชšเซ‡เชจเชฒ เชชเชฐ เชชเซเชฐเชฎเชพเชฃเชฎเชพเช‚ เช“เช›เซ‹ เชกเซ‡เชŸเชพ เชชเซเชฐเชธเชพเชฐเชฟเชค เชฅเชพเชฏ เช›เซ‡, 200..300 เชฌเชพเช‡เชŸเซเชธ เชชเซเชฐเชคเชฟ เชธเซ‡เช•เชจเซเชก, เชคเซ‡เชฅเซ€ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡, เชคเซ‡เชจเซ€ เชนเชพเชœเชฐเซ€ เชฌเซ‹เชœเชพเชฐเซ‚เชช เชจเชฅเซ€. เชœเซ‡ เชชเซ‹เชฐเซเชŸ เชจเช‚เชฌเชฐ เชชเชฐ RTCP เชชเซ‡เช•เซ‡เชŸเซ‹ เชฎเซ‹เช•เชฒเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เชคเซ‡ เชชเซ‹เชฐเซเชŸ เชจเช‚เชฌเชฐ เชเช• เชตเชฟเชทเชฎ เช…เชจเซ‡ RTP เชธเซเชŸเซเชฐเซ€เชฎ เชœเซ‡เชฎเชพเช‚เชฅเซ€ เช†เชตเซ‡ เช›เซ‡ เชคเซ‡เชจเชพ เช•เชฐเชคเชพ เชฎเซ‹เชŸเซ‹ เชนเซ‹เชตเซ‹ เชœเซ‹เชˆเช. เช…เชฎเชพเชฐเชพ เช‰เชฆเชพเชนเชฐเชฃเชฎเชพเช‚, เช…เชฎเซ‡ เช† เชšเซ‡เชจเชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚ เชจเชนเซ€เช‚, เช•เชพเชฐเชฃ เช•เซ‡ เชฐเซ€เชธเซ€เชตเชฐ เช…เชจเซ‡ เชšเซ‡เชจเชฒเชจเซ€ เช•เซเชทเชฎเชคเชพเช“ เชฆเซ‡เช–เซ€เชคเซ€ เชฐเซ€เชคเซ‡ เช…เชฎเชพเชฐเซ€, เช…เชคเซเชฏเชพเชฐ เชธเซเชงเซ€เชจเซ€ เชธเชพเชงเชพเชฐเชฃ, เชœเชฐเซ‚เชฐเชฟเชฏเชพเชคเซ‹ เช•เชฐเชคเชพเช‚ เชตเชงเซ€ เช—เชˆ เช›เซ‡.

เช…เชฎเชพเชฐเชพ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฎเชพเช‚, เชกเซ‡เชŸเชพ เชŸเซเชฐเชพเชจเซเชธเชฎเชฟเชถเชจ เชธเชฐเซเช•เชฟเชŸ, เช…เช—เชพเช‰เชจเชพ เช‰เชฆเชพเชนเชฐเชฃเชฅเซ€ เชตเชฟเชชเชฐเซ€เชค, เชฌเซ‡ เชญเชพเช—เซ‹เชฎเชพเช‚ เชตเชฟเชญเชพเชœเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡: เชŸเซเชฐเชพเชจเซเชธเชฎเชฟเชŸเชฟเช‚เช— เชชเชพเชฅ เช…เชจเซ‡ เชชเซเชฐเชพเชชเซเชค เช•เชฐเชตเชพเชจเซ‹ เชฎเชพเชฐเซเช—. เชถเซ€เชฐเซเชทเช• เชšเชฟเชคเซเชฐเชฎเชพเช‚ เชฌเชคเชพเชตเซเชฏเชพ เชชเซเชฐเชฎเชพเชฃเซ‡ เชฆเชฐเซ‡เช• เชญเชพเช— เชฎเชพเชŸเซ‡ เช†เชชเชฃเซ‡ เช†เชชเชฃเซ€ เชชเซ‹เชคเชพเชจเซ€ เช˜เชกเชฟเชฏเชพเชณเชจเซ‹ เชธเซเชคเซเชฐเซ‹เชค เชฌเชจเชพเชตเซ€เชถเซเช‚.

RTP เชชเซเชฐเซ‹เชŸเซ‹เช•เซ‹เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชคเซ‡เชฎเชจเซ€ เชตเชšเซเชšเซ‡ เชตเชจ-เชตเซ‡ เชธเช‚เชšเชพเชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡. เช† เช‰เชฆเชพเชนเชฐเชฃเชฎเชพเช‚, เช…เชฎเชจเซ‡ เชฌเชพเชนเซเชฏ เชจเซ‡เชŸเชตเชฐเซเช•เชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€, เช•เชพเชฐเชฃ เช•เซ‡ เชŸเซเชฐเชพเชจเซเชธเชฎเซ€เชŸเชฐ เช…เชจเซ‡ เชฐเซ€เชธเซ€เชตเชฐ เชฌเช‚เชจเซ‡ เชเช• เชœ เช•เชฎเซเชชเซเชฏเซเชŸเชฐ เชชเชฐ เชธเซเชฅเชฟเชค เชนเชถเซ‡ - เชชเซ‡เช•เซ‡เชŸเซ‹ เชคเซ‡เชจเซ€ เช…เช‚เชฆเชฐ เชœเชถเซ‡.

RTP เชธเซเชŸเซเชฐเซ€เชฎ เชธเซเชฅเชพเชชเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชฎเซ€เชกเชฟเชฏเชพ เชธเซเชŸเซเชฐเซ€เชฎเชฐ เชฌเซ‡ เชซเชฟเชฒเซเชŸเชฐเซเชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡: MS_RTP_SEND เช…เชจเซ‡ MS_RTP_RECV. เชชเซเชฐเชฅเชฎ เชเช• เชฌเซ€เชœเชพเชจเซ‡ เชŸเซเชฐเชพเชจเซเชธเชฎเชฟเชŸ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ RTP เชธเซเชŸเซเชฐเซ€เชฎ เชฎเซ‡เชณเชตเซ‡ เช›เซ‡. เช† เชซเชฟเชฒเซเชŸเชฐเซเชธ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเซ‡เชฎเชจเซ‡ RTP เชธเชคเซเชฐ เช‘เชฌเซเชœเซ‡เช•เซเชŸ เชชเชฐ เชเช• เชจเชฟเชฐเซเชฆเซ‡เชถเช• เชชเชธเชพเชฐ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡, เชœเซ‡ เช•เชพเช‚ เชคเซ‹ เชกเซ‡เชŸเชพ เชฌเซเชฒเซ‹เช•เซเชธเชจเชพ เชชเซเชฐเชตเชพเชนเชจเซ‡ RTP เชชเซ‡เช•เซ‡เชŸเชจเชพ เชชเซเชฐเชตเชพเชนเชฎเชพเช‚ เชฐเซ‚เชชเชพเช‚เชคเชฐเชฟเชค เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡ เช…เชฅเชตเชพ เชคเซ‡เชจเชพเชฅเซ€ เชตเชฟเชฐเซเชฆเซเชง เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡. เชฎเซ€เชกเชฟเชฏเชพ เชธเซเชŸเซเชฐเซ€เชฎเชฐเชจเซเช‚ เช†เช‚เชคเชฐเชฟเช• เชกเซ‡เชŸเชพ เชซเซ‹เชฐเซเชฎเซ‡เชŸ RTP เชชเซ‡เช•เซ‡เชŸเชจเชพ เชกเซ‡เชŸเชพ เชซเซ‹เชฐเซเชฎเซ‡เชŸ เชธเชพเชฅเซ‡ เชฎเซ‡เชณ เช–เชพเชคเซเช‚ เชจ เชนเซ‹เชตเชพเชฅเซ€, เชกเซ‡เชŸเชพเชจเซ‡ MS_RTP_SEND เชชเชฐ เชธเซเชฅเชพเชจเชพเช‚เชคเชฐเชฟเชค เช•เชฐเชคเชพ เชชเชนเซ‡เชฒเชพ, เชคเชฎเชพเชฐเซ‡ เชเชจเซเช•เซ‹เชกเชฐ เชซเชฟเชฒเซเชŸเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เชœเซ‡ 16-เชฌเซ€เชŸ เช‘เชกเชฟเช“ เชธเชฟเช—เซเชจเชฒ เชจเชฎเซ‚เชจเชพเช“เชจเซ‡ เช†เช -เชฌเซ€เชŸ เชเชจเซเช•เซ‹เชกเซ‡เชกเชฎเชพเช‚ เชฐเซ‚เชชเชพเช‚เชคเชฐเชฟเชค เช•เชฐเซ‡ เช›เซ‡. เชฏเซ-เชฒเซ‹ (เชฎเซ-เช•เชพเชฏเชฆเซ‹). เชชเซเชฐเชพเชชเซเชค เชฌเชพเชœเซ เชชเชฐ, เชกเซ€เช•เซ‹เชกเชฐ เชซเชฟเชฒเซเชŸเชฐ เชตเชฟเชชเชฐเซ€เชค เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡.

เชจเซ€เชšเซ‡ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชจเซ‹ เชŸเซ‡เช•เซเชธเซเชŸ เช›เซ‡ เชœเซ‡ เช†เช•เซƒเชคเชฟเชฎเชพเช‚ เชฌเชคเชพเชตเซ‡เชฒ เชฏเซ‹เชœเชจเชพเชจเซ‡ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เซ‡ เช›เซ‡ (เชธเชฎเชพเชตเซ‡เชถ เชจเชฟเชฐเซเชฆเซ‡เชถเซ‹ เชชเชนเซ‡เชฒเชพเช‚เชจเชพ # เชชเซเชฐเชคเซ€เช•เซ‹ เชฆเซ‚เชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เช›เซ‡, เชคเซ‡เชฎเชจเซ‡ เชถเชพเชฎเซ‡เชฒ เช•เชฐเชตเชพเชจเซเช‚ เชญเซ‚เชฒเชถเซ‹ เชจเชนเซ€เช‚):

/* ะคะฐะนะป 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 เชธเซเชŸเซเชฐเซ€เชฎ เชฆเซเชตเชพเชฐเชพ เชชเซเชฐเชธเชพเชฐเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡.

เชนเชตเซ‡ เชชเช›เซ€เชจเชพ เชฒเซ‡เช–เชฎเชพเช‚ เช†เชชเชฃเซ‡ เช† เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชจเซ‡ เชฌเซ‡ เชธเซเชตเชคเช‚เชคเซเชฐ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธเชฎเชพเช‚ เชตเชฟเชญเชพเชœเซ€เชค เช•เชฐเซ€เชถเซเช‚ - เชเช• เชฐเซ€เชธเซ€เชตเชฐ เช…เชจเซ‡ เชŸเซเชฐเชพเชจเซเชธเชฎเซ€เชŸเชฐ เช…เชจเซ‡ เชคเซ‡เชฎเชจเซ‡ เชตเชฟเชตเชฟเชง เชŸเชฐเซเชฎเชฟเชจเชฒเซเชธเชฎเชพเช‚ เชฒเซ‹เชจเซเชš เช•เชฐเซ€เชถเซเช‚. เชคเซ‡ เชœ เชธเชฎเชฏเซ‡, เช…เชฎเซ‡ TShark เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ RTP เชชเซ‡เช•เซ‡เชŸเซเชธเชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชฐเชตเซเช‚ เชคเซ‡ เชถเซ€เช–เซ€เชถเซเช‚.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹