Mediastreamer2 VoIP เจ‡เฉฐเจœเจฃ เจฆเฉ€ เจชเฉœเจšเฉ‹เจฒ เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉˆเฅค เจญเจพเจ— 9

เจฒเฉ‡เจ– เจธเจฎเฉฑเจ—เจฐเฉ€ เจฎเฉ‡เจฐเฉ‡ เจคเฉ‹เจ‚ เจฒเจˆ เจ—เจˆ เจนเฉˆ เจœเจผเฉˆเจจ เจšเฉˆเจจเจฒ.

เจกเฉเจชเจฒเฉˆเจ•เจธ เจ‡เฉฐเจŸเจฐเจ•เจพเจฎ

Mediastreamer2 VoIP เจ‡เฉฐเจœเจฃ เจฆเฉ€ เจชเฉœเจšเฉ‹เจฒ เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉˆเฅค เจญเจพเจ— 9

เจชเจฟเจ›เจฒเฉ‡ เจตเจฟเฉฑเจš เจฒเฉ‡เจ– เจ‡เฉฑเจ• เจกเฉเจชเจฒเฉˆเจ•เจธ เจ‡เฉฐเจŸเจฐเจ•เจพเจฎ เจฆเจพ เจเจฒเจพเจจ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€, เจ…เจคเฉ‡ เจ‡เจธ เจตเจฟเฉฑเจš เจ…เจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจฌเจฃเจพเจตเจพเจ‚เจ—เฉ‡เฅค

เจ‡เจน เจšเจฟเฉฑเจคเจฐ เจธเจฟเจฐเจฒเฉ‡เจ– เจšเจฟเฉฑเจคเจฐ เจตเจฟเฉฑเจš เจฆเจฟเจ–เจพเจ‡เจ† เจ—เจฟเจ† เจนเฉˆเฅค เจนเฉ‡เจ เจฒเฉ€ เจซเจฟเจฒเจŸเจฐ เจšเฉ‡เจจ เจŸเฉเจฐเจพเจ‚เจธเจฎเจฟเจŸ เจฎเจพเจฐเจ— เจฌเจฃเจพเจ‰เจ‚เจฆเฉ€ เจนเฉˆ, เจœเฉ‹ เจ•เจฟ เจธเจพเจŠเจ‚เจก เจ•เจพเจฐเจก เจจเจพเจฒ เจธเจผเฉเจฐเฉ‚ เจนเฉเฉฐเจฆเจพ เจนเฉˆเฅค เจ‡เจน เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจซเฉ‹เจจ เจคเฉ‹เจ‚ เจธเจฟเจ—เจจเจฒ เจจเจฎเฉ‚เจจเฉ‡ เจ†เจ‰เจŸเจชเฉเฉฑเจŸ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจกเจฟเจซเฉŒเจฒเจŸ เจฐเฉ‚เจช เจตเจฟเฉฑเจš, เจ‡เจน เจชเฉเจฐเจคเฉ€ เจธเจ•เจฟเฉฐเจŸ 8000 เจจเจฎเฉ‚เจจเจฟเจ†เจ‚ เจฆเฉ€ เจฆเจฐ เจจเจพเจฒ เจนเฉเฉฐเจฆเจพ เจนเฉˆเฅค เจฎเฉ€เจกเฉ€เจ† เจธเจŸเฉเจฐเฉ€เจฎเจฐ เจฆเฉ‡ เจ†เจกเฉ€เจ“ เจซเจฟเจฒเจŸเจฐเจพเจ‚ เจฆเฉเจ†เจฐเจพ เจตเจฐเจคเจฟเจ† เจœเจพเจฃ เจตเจพเจฒเจพ เจกเฉ‡เจŸเจพ เจฐเฉˆเจœเจผเฉ‹เจฒเจฟเจŠเจธเจผเจจ 16 เจฌเจฟเฉฑเจŸ เจนเฉˆ (เจ‡เจน เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจจเจนเฉ€เจ‚ เจนเฉˆ; เจซเจฟเจฒเจŸเจฐ เจœเฉ‹ เจ‰เฉฑเจš เจฐเฉˆเจœเจผเฉ‹เจฒเจฟเจŠเจธเจผเจจ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจฆเฉ‡ เจนเจจ เจœเฉ‡เจ•เจฐ เจฒเฉ‹เฉœ เจนเฉ‹เจตเฉ‡ เจคเจพเจ‚ เจฒเจฟเจ–เจฟเจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ)เฅค เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ 160 เจจเจฎเฉ‚เจจเจฟเจ†เจ‚ เจฆเฉ‡ เจฌเจฒเจพเจ•เจพเจ‚ เจตเจฟเฉฑเจš เจธเจฎเฉ‚เจนเจฌเฉฑเจง เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ, เจœเจฟเจธ เจจเจพเจฒ เจนเจฐเฉ‡เจ• เจฌเจฒเจพเจ• 320 เจฌเจพเจˆเจŸ เจฆเจพ เจ†เจ•เจพเจฐ เจฌเจฃเจพเจ‰เจ‚เจฆเจพ เจนเฉˆเฅค เจ…เฉฑเจ—เฉ‡, เจ…เจธเฉ€เจ‚ เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจœเจจเจฐเฉ‡เจŸเจฐ เจ‡เจจเจชเฉเจŸ เจตเจฟเฉฑเจš เจซเฉ€เจก เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจœเฉ‹ เจ•เจฟ เจ…เจฏเฉ‹เจ— เจนเฉ‹เจฃ 'เจคเฉ‡ เจกเฉ‡เจŸเจพ เจฒเจˆ "เจชเจพเจฐเจฆเจฐเจธเจผเฉ€" เจนเฉเฉฐเจฆเจพ เจนเฉˆเฅค เจฎเฉˆเจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจ‡เจธ เจฒเจˆ เจœเฉ‹เฉœเจฟเจ† เจนเฉˆ เจคเจพเจ‚ เจœเฉ‹ เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจกเฉ€เจฌเฉฑเจ—เจฟเฉฐเจ— เจ•เจฐเจฆเฉ‡ เจธเจฎเฉ‡เจ‚ เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจซเฉ‹เจจ เจตเจฟเฉฑเจš เจฌเฉ‹เจฒเจฃ เจคเฉ‹เจ‚ เจฅเฉฑเจ• เจœเจพเจ‚เจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจคเฉเจธเฉ€เจ‚ เจฎเจพเจฐเจ— เจฐเจพเจนเฉ€เจ‚ เจ‡เฉฑเจ• เจŸเฉ‹เจจ "เจธเจผเฉ‚เจŸ" เจ•เจฐเจจ เจฒเจˆ เจœเจจเจฐเฉ‡เจŸเจฐ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค

เจœเจจเจฐเฉ‡เจŸเจฐ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจธเจฟเจ—เจจเจฒ เจเจจเจ•เฉ‹เจกเจฐ เจจเฉ‚เฉฐ เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจœเฉ‹ ยต-law (G.711 เจธเจŸเฉˆเจ‚เจกเจฐเจก) เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจธเจพเจกเฉ‡ 16-เจฌเจฟเฉฑเจŸ เจธเฉˆเจ‚เจชเจฒเจพเจ‚ เจจเฉ‚เฉฐ 8-เจฌเจฟเฉฑเจŸ เจตเจพเจฒเฉ‡ เจตเจฟเฉฑเจš เจฌเจฆเจฒเจฆเจพ เจนเฉˆเฅค เจเจจเจ•เฉ‹เจกเจฐ เจฆเฉ‡ เจ†เจ‰เจŸเจชเฉเฉฑเจŸ 'เจคเฉ‡, เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจนเฉเจฃ เจ…เฉฑเจงเฉ‡ เจ†เจ•เจพเจฐ เจฆเจพ เจกเฉ‡เจŸเจพ เจฌเจฒเจพเจ• เจนเฉˆเฅค เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡, เจ…เจธเฉ€เจ‚ เจฌเจฟเจจเจพเจ‚ เจ•เฉฐเจชเจฐเฉˆเจธเจผเจจ เจฆเฉ‡ เจกเฉ‡เจŸเจพ เจŸเฉเจฐเจพเจ‚เจธเจฎเจฟเจŸ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚ เจœเฉ‡เจ•เจฐ เจธเจพเจจเฉ‚เฉฐ เจฌเฉˆเจ‚เจกเจตเจฟเจกเจฅ เจจเฉ‚เฉฐ เจฌเจšเจพเจ‰เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจจเจนเฉ€เจ‚ เจนเฉˆเฅค เจนเจพเจฒเจพเจ‚เจ•เจฟ, เจ‡เฉฑเจ• เจเจจเจ•เฉ‹เจกเจฐ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ‡เฉฑเจฅเฉ‡ เจฒเจพเจญเจฆเจพเจ‡เจ• เจนเฉˆ, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจตเจพเจ‡เจฐเจธเจผเจพเจฐเจ• เจธเจฟเจฐเจซเจผ เจ‡เฉฑเจ• RTP เจธเจŸเฉเจฐเฉ€เจฎ เจคเฉ‹เจ‚ เจ†เจกเฉ€เจ“ เจšเจฒเจพ เจธเจ•เจฆเจพ เจนเฉˆ เจœเฉ‡เจ•เจฐ เจ‡เจธเจจเฉ‚เฉฐ ยต-law เจœเจพเจ‚ ฮฑ-law เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจธเฉฐเจ•เฉเจšเจฟเจค เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค

เจเจจเจ•เฉ‹เจกเจฐ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจนเจฒเจ•เฉ‡ เจกเฉ‡เจŸเจพ เจฌเจฒเจพเจ• rtpsend เจซเจฟเจฒเจŸเจฐ เจจเฉ‚เฉฐ เจญเฉ‡เจœเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจจ, เจœเฉ‹ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• RTP เจชเฉˆเจ•เฉ‡เจŸ เจตเจฟเฉฑเจš เจชเจพ เจฆเฉ‡เจตเฉ‡เจ—เจพ, เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ เจซเจฒเฉˆเจ— เจธเฉˆเฉฑเจŸ เจ•เจฐเฉ‡เจ—เจพ, เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• UDP เจชเฉˆเจ•เฉ‡เจŸ เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจ‰เฉฑเจคเฉ‡ เจชเฉเจฐเจธเจพเจฐเจฃ เจฒเจˆ เจฎเฉ€เจกเฉ€เจ† เจธเจŸเฉเจฐเฉ€เจฎเจฐ เจจเฉ‚เฉฐ เจฆเฉ‡เจตเฉ‡เจ—เจพเฅค

เจ‰เฉฑเจชเจฐเจฒเฉ€ เจซเจฟเจฒเจŸเจฐ เจšเฉ‡เจจ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจตเจพเจฒเจพ เจฎเจพเจฐเจ— เจฌเจฃเจพเจ‰เจ‚เจฆเฉ€ เจนเฉˆเฅค เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจคเฉ‹เจ‚ เจฎเฉ€เจกเฉ€เจ† เจธเจŸเฉเจฐเฉ€เจฎเจฐ เจฆเฉเจ†เจฐเจพ เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเฉ‡ เจ—เจ RTP เจชเฉˆเจ•เฉ‡เจŸ rtprecv เจซเจฟเจฒเจŸเจฐ เจจเฉ‚เฉฐ เจซเฉ€เจก เจ•เฉ€เจคเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจจ, เจœเจฟเจธ เจฆเฉ‡ เจ†เจ‰เจŸเจชเฉเฉฑเจŸ 'เจคเฉ‡ เจ‰เจน เจกเฉ‡เจŸเจพ เจฌเจฒเจพเจ•เจพเจ‚ เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจฆเจฟเจ–เจพเจˆ เจฆเจฟเฉฐเจฆเฉ‡ เจนเจจ, เจนเจฐเฉ‡เจ• เจ‡เฉฑเจ• เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเฉ‡ เจชเฉˆเจ•เฉ‡เจŸ เจจเจพเจฒ เจธเฉฐเจฌเฉฐเจงเจฟเจค เจนเฉเฉฐเจฆเจพ เจนเฉˆเฅค เจ‡เฉฑเจ• เจฌเจฒเจพเจ• เจตเจฟเฉฑเจš เจธเจฟเจฐเจซเจผ เจชเฉ‡เจฒเฉ‹เจก เจกเฉ‡เจŸเจพ เจนเฉเฉฐเจฆเจพ เจนเฉˆ, เจœเฉ‹ เจ•เจฟ เจชเจฟเจ›เจฒเฉ‡ เจฒเฉ‡เจ– เจฆเฉ‡ เจšเจฟเฉฑเจคเจฐ เจตเจฟเฉฑเจš เจนเจฐเฉ‡ เจฐเฉฐเจ— เจตเจฟเฉฑเจš เจฆเจฟเจ–เจพเจ‡เจ† เจ—เจฟเจ† เจธเฉ€เฅค

เจซเจฟเจฐ เจฌเจฒเจพเจ•เจพเจ‚ เจจเฉ‚เฉฐ เจกเฉ€เจ•เฉ‹เจกเจฐ เจซเจฟเจฒเจŸเจฐ เจตเจฟเฉฑเจš เจซเฉ€เจก เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจœเฉ‹ เจ‰เจนเจจเจพเจ‚ เจตเจฟเฉฑเจš เจฎเฉŒเจœเฉ‚เจฆ เจธเจฟเฉฐเจ—เจฒ-เจฌเจพเจˆเจŸ เจธเฉˆเจ‚เจชเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจฒเฉ€เจจเฉ€เจ…เจฐ 16-เจฌเจฟเฉฑเจŸ เจกเฉ‡เจŸเจพ เจตเจฟเฉฑเจš เจฌเจฆเจฒเจฆเจพ เจนเฉˆเฅค เจ‡เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจซเจฟเจฐ เจฎเฉ€เจกเฉ€เจ† เจธเจŸเฉเจฐเฉ€เจฎเจฐ เจฆเฉ‡ เจซเจฟเจฒเจŸเจฐเจพเจ‚ เจฆเฉเจ†เจฐเจพ เจชเฉเจฐเฉ‹เจธเฉˆเจธ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค เจธเจพเจกเฉ‡ เจฎเจพเจฎเจฒเฉ‡ เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจคเฉเจนเจพเจกเฉ‡ เจนเฉˆเฉฑเจกเจธเฉˆเฉฑเจŸ เจฆเฉ‡ เจธเจชเฉ€เจ•เจฐเจพเจ‚ 'เจคเฉ‡ เจชเจฒเฉ‡เจฌเฉˆเจ• เจฒเจˆ เจธเจพเจŠเจ‚เจก เจ•เจพเจฐเจก เจตเจฟเฉฑเจš เจซเฉ€เจก เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚เฅค

เจนเฉเจฃ เจ†เจ“ เจธเจพเจซเจŸเจตเฉ‡เจ…เจฐ เจฒเจพเจ—เฉ‚เจ•เจฐเจจ เจตเฉฑเจฒ เจตเจงเฉ€เจเฅค เจ…เจœเจฟเจนเจพ เจ•เจฐเจจ เจฒเจˆ, เจ…เจธเฉ€เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจตเฉฑเจ– เจ•เฉ€เจคเฉ€เจ†เจ‚ เจฐเจฟเจธเฉ€เจตเจฐ เจ…เจคเฉ‡ เจŸเฉเจฐเจพเจ‚เจธเจฎเฉ€เจŸเจฐ เจซเจพเจˆเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจพเจ‚เจ—เฉ‡เฅค เจชเจนเจฟเจฒเจพเจ‚, เจ…เจธเฉ€เจ‚ เจซเจฟเจ•เจธเจก เจชเฉ‹เจฐเจŸ เจ…เจคเฉ‡ เจเจกเจฐเฉˆเฉฑเจธ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจธเฉ€, เจชเจฐ เจนเฉเจฃ เจธเจพเจจเฉ‚เฉฐ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจจเฉ‚เฉฐ เจ‰เจนเจจเจพเจ‚ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ‡ เจฏเฉ‹เจ— เจนเฉ‹เจฃ เจฆเฉ€ เจœเจผเจฐเฉ‚เจฐเจค เจนเฉˆ เจœเฉ‹ เจ…เจธเฉ€เจ‚ เจธเจŸเจพเจฐเจŸเจ…เฉฑเจช 'เจคเฉ‡ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚เฅค เจ…เจœเจฟเจนเจพ เจ•เจฐเจจ เจฒเจˆ, เจ…เจธเฉ€เจ‚ เจ•เจฎเจพเจ‚เจก เจฒเจพเจˆเจจ เจ†เจฐเจ—เฉ‚เจฎเฉˆเจ‚เจŸเจพเจ‚ เจจเฉ‚เฉฐ เจชเฉเจฐเฉ‹เจธเฉˆเจธ เจ•เจฐเจจ เจฒเจˆ เจ•เจพเจฐเจœเจธเจผเฉ€เจฒเจคเจพ เจœเฉ‹เฉœเจพเจ‚เจ—เฉ‡เฅค เจ‡เจธ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจ…เจธเฉ€เจ‚ เจ‰เจธ เจ‡เฉฐเจŸเจฐเจ•เจพเจฎ เจกเจฟเจตเจพเจˆเจธ เจฆเจพ IP เจเจกเจฐเฉˆเฉฑเจธ เจ…เจคเฉ‡ เจชเฉ‹เจฐเจŸ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจจ เจฆเฉ‡ เจฏเฉ‹เจ— เจนเฉ‹เจตเจพเจ‚เจ—เฉ‡ เจœเจฟเจธ เจจเจพเจฒ เจ…เจธเฉ€เจ‚ เจธเฉฐเจšเจพเจฐ เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเจพเจ‚เฅค

เจชเจนเจฟเจฒเจพเจ‚, เจ†เจ“ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจขเจพเจ‚เจšเจพ เจœเฉ‹เฉœเฉ€เจ เจœเฉ‹ เจ‡เจธเจฆเฉ€เจ†เจ‚ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจจเฉ‚เฉฐ เจธเจŸเฉ‹เจฐ เจ•เจฐเฉ‡เจ—เจพ:

struct _app_vars
{
  int  local_port;              /* ะ›ะพะบะฐะปัŒะฝั‹ะน ะฟะพั€ั‚. */
  int  remote_port;             /* ะŸะพั€ั‚ ะฟะตั€ะตะณะพะฒะพั€ะฝะพะณะพ ัƒัั‚ั€ะพะนัั‚ะฒะฐ ะฝะฐ ัƒะดะฐะปะตะฝะฝะพะผ ะบะพะผะฟัŒัŽั‚ะตั€ะต. */
  char remote_addr[128];        /* IP-ะฐะดั€ะตั ัƒะดะฐะปะตะฝะฝะพะณะพ ะบะพะผะฟัŒัŽั‚ะตั€ะฐ. */
  MSDtmfGenCustomTone dtmf_cfg; /* ะะฐัั‚ั€ะพะนะบะธ ั‚ะตัั‚ะพะฒะพะณะพ ัะธะณะฝะฐะปะฐ ะณะตะฝะตั€ะฐั‚ะพั€ะฐ. */
};

typedef struct _app_vars app_vars;

เจ‡เจน เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจ‡เจธ เจ•เจฟเจธเจฎ เจฆเฉ€ เจ‡เฉฑเจ• เจฌเจฃเจคเจฐ เจฆเจพ เจเจฒเจพเจจ เจ•เจฐเฉ‡เจ—เจพ เจœเจฟเจธเจฆเจพ เจจเจพเจฎ vars เจนเฉˆเฅค
เจซเจฟเจฐ เจ…เจธเฉ€เจ‚ เจ•เจฎเจพเจ‚เจก เจฒเจพเจˆเจจ เจ†เจฐเจ—เฉ‚เจฎเฉˆเจ‚เจŸเจธ เจจเฉ‚เฉฐ เจชเจพเจฐเจธ เจ•เจฐเจจ เจฒเจˆ เจ‡เฉฑเจ• เจซเฉฐเจ•เจธเจผเจจ เจœเฉ‹เฉœเจพเจ‚เจ—เฉ‡:

/* ะคัƒะฝะบั†ะธั ะฟั€ะตะพะฑั€ะฐะทะพะฒะฐะฝะธั ะฐั€ะณัƒะผะตะฝั‚ะพะฒ ะบะพะผะฐะฝะดะฝะพะน ัั‚ั€ะพะบะธ ะฒ
* ะฝะฐัั‚ั€ะพะนะบะธ ะฟั€ะพะณั€ะฐะผะผั‹. */
void  scan_args(int argc, char *argv[], app_vars *v)
{
    char i;
    for (i=0; i<argc; i++)
    {
        if (!strcmp(argv[i], "--help"))
        {
            char *p=argv[0]; p=p + 2;
            printf("  %s walkie talkienn", p);
            printf("--help      List of options.n");
            printf("--version   Version of application.n");
            printf("--addr      Remote abonent IP address string.n");
            printf("--port      Remote abonent port number.n");
            printf("--lport     Local port number.n");
            printf("--gen       Generator frequency.n");
            exit(0);
        }

        if (!strcmp(argv[i], "--version"))
        {
            printf("0.1n");
            exit(0);
        }

        if (!strcmp(argv[i], "--addr"))
        {
            strncpy(v->remote_addr, argv[i+1], 16);
            v->remote_addr[16]=0;
            printf("remote addr: %sn", v->remote_addr);
        }

        if (!strcmp(argv[i], "--port"))
        {
            v->remote_port=atoi(argv[i+1]);
            printf("remote port: %in", v->remote_port);
        }

        if (!strcmp(argv[i], "--lport"))
        {
            v->local_port=atoi(argv[i+1]);
            printf("local port : %in", v->local_port);
        }

        if (!strcmp(argv[i], "--gen"))
        {
            v -> dtmf_cfg.frequencies[0] = atoi(argv[i+1]);
                printf("gen freq : %in", v -> dtmf_cfg.frequencies[0]);
        }
    }
}

เจชเจพเจฐเจธ เจ•เจฐเจจ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจ•เจฎเจพเจ‚เจก เจฒเจพเจˆเจจ เจ†เจฐเจ—เฉ‚เจฎเฉˆเจ‚เจŸเจพเจ‚ เจจเฉ‚เฉฐ เจตเจพเจฐเจธ เจธเจŸเฉเจฐเจ•เจšเจฐ เจฆเฉ‡ เจ–เฉ‡เจคเจฐเจพเจ‚ เจตเจฟเฉฑเจš เจฐเฉฑเจ–เจฟเจ† เจœเจพเจตเฉ‡เจ—เจพเฅค เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฆเจพ เจฎเฉเฉฑเจ– เจซเฉฐเจ•เจธเจผเจจ เจŸเฉเจฐเจพเจ‚เจธเจฎเจฟเจŸ เจจเฉ‚เฉฐ เจ‡เจ•เฉฑเจ เจพ เจ•เจฐเฉ‡เจ—เจพ เจ…เจคเฉ‡ เจซเจฟเจฒเจŸเจฐเจพเจ‚ เจคเฉ‹เจ‚ เจฎเจพเจฐเจ— เจชเฉเจฐเจพเจชเจค เจ•เจฐเฉ‡เจ—เจพเฅค เจŸเจฟเฉฑเจ•เจฐ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจจ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจจเจฟเจฏเฉฐเจคเจฐเจฃ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจ…เจจเฉฐเจค เจฒเฉ‚เจช เจตเจฟเฉฑเจš เจŸเฉเจฐเจพเจ‚เจธเจซเจฐ เจ•เฉ€เจคเจพ เจœเจพเจตเฉ‡เจ—เจพ, เจœเฉ‡เจ•เจฐ เจœเจจเจฐเฉ‡เจŸเจฐ เจซเฉเจฐเฉ€เจ•เฉเจเจ‚เจธเฉ€ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจ—เฉˆเจฐ-เจœเจผเฉ€เจฐเฉ‹ เจฎเฉเฉฑเจฒ 'เจคเฉ‡ เจธเฉˆเฉฑเจŸ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€, เจคเจพเจ‚ เจŸเฉˆเจธเจŸ เจœเจจเจฐเฉ‡เจŸเจฐ เจจเฉ‚เฉฐ เจฎเฉเฉœ เจšเจพเจฒเฉ‚ เจ•เจฐเฉ‡เจ—เจพ เจคเจพเจ‚ เจœเฉ‹ เจ‡เจน เจฒเจ—เจพเจคเจพเจฐ เจšเฉฑเจฒเฉ‡เฅค

เจ‡เจน เจฐเฉ€เจธเจŸเจพเจฐเจŸ เจœเจจเจฐเฉ‡เจŸเจฐ เจฒเจˆ เจ‡เจธเจฆเฉ‡ เจกเจฟเจœเจผเจพเจˆเจจ เจฆเฉ‡ เจ•เจพเจฐเจจ เจœเจผเจฐเฉ‚เจฐเฉ€ เจนเฉ‹เจฃเจ—เฉ‡; เจ•เจฟเจธเฉ‡ เจ•เจพเจฐเจจ เจ•เจฐเจ•เฉ‡, เจ‡เจน 16 เจธเจ•เจฟเฉฐเจŸเจพเจ‚ เจคเฉ‹เจ‚ เจตเฉฑเจง เจธเจฎเจพเจ‚ เจธเจฟเจ—เจจเจฒ เจชเฉˆเจฆเจพ เจจเจนเฉ€เจ‚ เจ•เจฐ เจธเจ•เจฆเจพเฅค เจ‡เจน เจงเจฟเจ†เจจ เจตเจฟเฉฑเจš เจฐเฉฑเจ–เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ เจ•เจฟ เจ‡เจธเจฆเฉ€ เจฎเจฟเจ†เจฆ เจ‡เฉฑเจ• 32-เจฌเจฟเฉฑเจŸ เจจเฉฐเจฌเจฐ เจฆเฉเจ†เจฐเจพ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เฉ€เจคเฉ€ เจ—เจˆ เจนเฉˆเฅค

เจชเฉ‚เจฐเจพ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฆเจฟเจ–เจพเจˆ เจฆเฉ‡เจตเฉ‡เจ—เจพ:

/* ะคะฐะนะป mstest8.c ะ˜ะผะธั‚ะฐั‚ะพั€ ะฟะตั€ะตะณะพะฒะพั€ะฝะพะณะพ ัƒัั‚ั€ะพะนัั‚ะฒะฐ. */

#include <mediastreamer2/mssndcard.h>
#include <mediastreamer2/dtmfgen.h>
#include <mediastreamer2/msrtp.h>

/* ะŸะพะดะบะปัŽั‡ะฐะตะผ ั„ะฐะนะป ะพะฑั‰ะธั… ั„ัƒะฝะบั†ะธะน. */
#include "mstest_common.c"

/*----------------------------------------------------------*/
struct _app_vars
{
    int  local_port;              /* ะ›ะพะบะฐะปัŒะฝั‹ะน ะฟะพั€ั‚. */
    int  remote_port;             /* ะŸะพั€ั‚ ะฟะตั€ะตะณะพะฒะพั€ะฝะพะณะพ ัƒัั‚ั€ะพะนัั‚ะฒะฐ ะฝะฐ ัƒะดะฐะปะตะฝะฝะพะผ ะบะพะผะฟัŒัŽั‚ะตั€ะต. */
    char remote_addr[128];        /* IP-ะฐะดั€ะตั ัƒะดะฐะปะตะฝะฝะพะณะพ ะบะพะผะฟัŒัŽั‚ะตั€ะฐ. */
    MSDtmfGenCustomTone dtmf_cfg; /* ะะฐัั‚ั€ะพะนะบะธ ั‚ะตัั‚ะพะฒะพะณะพ ัะธะณะฝะฐะปะฐ ะณะตะฝะตั€ะฐั‚ะพั€ะฐ. */
};

typedef struct _app_vars app_vars;

/*----------------------------------------------------------*/
/* ะกะพะทะดะฐะตะผ ะดัƒะฟะปะตะบัะฝัƒัŽ RTP-ัะตััะธัŽ. */
RtpSession* create_duplex_rtp_session(app_vars v)
{
    RtpSession *session = create_rtpsession (v.local_port, v.local_port + 1, FALSE, RTP_SESSION_SENDRECV);
    rtp_session_set_remote_addr_and_port(session, v.remote_addr, v.remote_port, v.remote_port + 1);
    rtp_session_set_send_payload_type(session, PCMU);
    return session;
}

/*----------------------------------------------------------*/
/* ะคัƒะฝะบั†ะธั ะฟั€ะตะพะฑั€ะฐะทะพะฒะฐะฝะธั ะฐั€ะณัƒะผะตะฝั‚ะพะฒ ะบะพะผะฐะฝะดะฝะพะน ัั‚ั€ะพะบะธ ะฒ
* ะฝะฐัั‚ั€ะพะนะบะธ ะฟั€ะพะณั€ะฐะผะผั‹. */
void  scan_args(int argc, char *argv[], app_vars *v)
{
    char i;
    for (i=0; i<argc; i++)
    {
        if (!strcmp(argv[i], "--help"))
        {
            char *p=argv[0]; p=p + 2;
            printf("  %s walkie talkienn", p);
            printf("--help      List of options.n");
            printf("--version   Version of application.n");
            printf("--addr      Remote abonent IP address string.n");
            printf("--port      Remote abonent port number.n");
            printf("--lport     Local port number.n");
            printf("--gen       Generator frequency.n");
            exit(0);
        }

        if (!strcmp(argv[i], "--version"))
        {
            printf("0.1n");
            exit(0);
        }

        if (!strcmp(argv[i], "--addr"))
        {
            strncpy(v->remote_addr, argv[i+1], 16);
            v->remote_addr[16]=0;
            printf("remote addr: %sn", v->remote_addr);
        }

        if (!strcmp(argv[i], "--port"))
        {
            v->remote_port=atoi(argv[i+1]);
            printf("remote port: %in", v->remote_port);
        }

        if (!strcmp(argv[i], "--lport"))
        {
            v->local_port=atoi(argv[i+1]);
            printf("local port : %in", v->local_port);
        }

        if (!strcmp(argv[i], "--gen"))
        {
            v -> dtmf_cfg.frequencies[0] = atoi(argv[i+1]);
                printf("gen freq : %in", v -> dtmf_cfg.frequencies[0]);
        }
    }
}

/*----------------------------------------------------------*/
int main(int argc, char *argv[])
{
    /* ะฃัั‚ะฐะฝะฐะฒะปะธะฒะฐะตะผ ะฝะฐัั‚ั€ะพะนะบะธ ะฟะพ ัƒะผะพะปั‡ะฐะฝะธัŽ. */
    app_vars vars={5004, 7010, "127.0.0.1", {0}};

    /* ะฃัั‚ะฐะฝะฐะฒะปะธะฒะฐะตะผ ะฝะฐัั‚ั€ะพะนะบะธ ะฝะฐัั‚ั€ะพะนะบะธ ะฟั€ะพะณั€ะฐะผะผั‹ ะฒ
     * ัะพะพั‚ะฒะตั‚ัั‚ะฒะธะธ ั ะฐั€ะณัƒะผะตะฝั‚ะฐะผะธ ะบะพะผะฐะฝะดะฝะพะน ัั‚ั€ะพะบะธ. */
    scan_args(argc, argv, &vars);

    ms_init();

    /* ะกะพะทะดะฐะตะผ ัะบะทะตะผะฟะปัั€ั‹ ั„ะธะปัŒั‚ั€ะพะฒ ะฟะตั€ะตะดะฐัŽั‰ะตะณะพ ั‚ั€ะฐะบั‚ะฐ. */
    MSSndCard *snd_card =
        ms_snd_card_manager_get_default_card(ms_snd_card_manager_get());
    MSFilter *snd_card_read = ms_snd_card_create_reader(snd_card);
    MSFilter *dtmfgen = ms_filter_new(MS_DTMF_GEN_ID);
    MSFilter *rtpsend = ms_filter_new(MS_RTP_SEND_ID);

    /* ะกะพะทะดะฐะตะผ ั„ะธะปัŒั‚ั€ ะบะพะดะตั€ะฐ. */
    MSFilter *encoder = ms_filter_create_encoder("PCMU");

    /* ะ ะตะณะธัั‚ั€ะธั€ัƒะตะผ ั‚ะธะฟั‹ ะฝะฐะณั€ัƒะทะบะธ. */
    register_payloads();

    /* ะกะพะทะดะฐะตะผ ะดัƒะฟะปะตะบัะฝัƒัŽ RTP-ัะตััะธัŽ. */
    RtpSession* rtp_session= create_duplex_rtp_session(vars);
    ms_filter_call_method(rtpsend, MS_RTP_SEND_SET_SESSION, rtp_session);

    /* ะกะพะตะดะธะฝัะตะผ ั„ะธะปัŒั‚ั€ั‹ ะฟะตั€ะตะดะฐั‚ั‡ะธะบะฐ. */
    ms_filter_link(snd_card_read, 0, dtmfgen, 0);
    ms_filter_link(dtmfgen, 0, encoder, 0);
    ms_filter_link(encoder, 0, rtpsend, 0);

    /* ะกะพะทะดะฐะตะผ ั„ะธะปัŒั‚ั€ั‹ ะฟั€ะธะตะผะฝะพะณะพ ั‚ั€ะฐะบั‚ะฐ. */
    MSFilter *rtprecv = ms_filter_new(MS_RTP_RECV_ID);
    ms_filter_call_method(rtprecv, MS_RTP_RECV_SET_SESSION, rtp_session);

    /* ะกะพะทะดะฐะตะผ ั„ะธะปัŒั‚ั€ ะดะตะบะพะดะตั€ะฐ, */
    MSFilter *decoder=ms_filter_create_decoder("PCMU");

    /* ะกะพะทะดะฐะตะผ ั„ะธะปัŒั‚ั€ ะทะฒัƒะบะพะฒะพะน ะบะฐั€ั‚ั‹. */
    MSFilter *snd_card_write = ms_snd_card_create_writer(snd_card);

    /* ะกะพะตะดะธะฝัะตะผ ั„ะธะปัŒั‚ั€ั‹ ะฟั€ะธั‘ะผะฝะพะณะพ ั‚ั€ะฐะบั‚ะฐ. */
    ms_filter_link(rtprecv, 0, decoder, 0);
    ms_filter_link(decoder, 0,  snd_card_write, 0);

    /* ะกะพะทะดะฐะตะผ ะธัั‚ะพั‡ะฝะธะบ ั‚ะฐะบั‚ะพะฒ - ั‚ะธะบะตั€. */
    MSTicker *ticker = ms_ticker_new();

    /* ะŸะพะดะบะปัŽั‡ะฐะตะผ ะธัั‚ะพั‡ะฝะธะบ ั‚ะฐะบั‚ะพะฒ. */
    ms_ticker_attach(ticker, snd_card_read);
    ms_ticker_attach(ticker, rtprecv);

    /* ะ•ัะปะธ ะฝะฐัั‚ั€ะพะนะบะฐ ั‡ะฐัั‚ะพั‚ั‹ ะณะตะฝะตั€ะฐั‚ะพั€ะฐ ะพั‚ะปะธั‡ะฝะฐ ะพั‚ ะฝัƒะปั, ั‚ะพ ะทะฐะฟัƒัะบะฐะตะผ ะณะตะฝะตั€ะฐั‚ะพั€. */   
    if (vars.dtmf_cfg.frequencies[0])
    {
        /* ะะฐัั‚ั€ะฐะธะฒะฐะตะผ ัั‚ั€ัƒะบั‚ัƒั€ัƒ, ัƒะฟั€ะฐะฒะปััŽั‰ัƒัŽ ะฒั‹ั…ะพะดะฝั‹ะผ ัะธะณะฝะฐะปะพะผ ะณะตะฝะตั€ะฐั‚ะพั€ะฐ. */
        vars.dtmf_cfg.duration = 10000;
        vars.dtmf_cfg.amplitude = 1.0;
    }

    /* ะžั€ะณะฐะฝะธะทัƒะตะผ ั†ะธะบะป ะฟะตั€ะตะทะฐะฟัƒัะบะฐ ะณะตะฝะตั€ะฐั‚ะพั€ะฐ. */
    while(TRUE)
    {
        if(vars.dtmf_cfg.frequencies[0])
        {
            /* ะ’ะบะปัŽั‡ะฐะตะผ ะทะฒัƒะบะพะฒะพะน ะณะตะฝะตั€ะฐั‚ะพั€. */
            ms_filter_call_method(dtmfgen, MS_DTMF_GEN_PLAY_CUSTOM,
                    (void*)&vars.dtmf_cfg);
        }
        /* ะฃะบะปะฐะดั‹ะฒะฐะตะผ ั‚ั€ะตะด ะฒ ัะฟัั‡ะบัƒ ะฝะฐ 20ะผั, ั‡ั‚ะพะฑั‹ ะดั€ัƒะณะธะต ั‚ั€ะตะดั‹
         * ะฟั€ะธะปะพะถะตะฝะธั ะฟะพะปัƒั‡ะธะปะธ ะฒั€ะตะผั ะฝะฐ ั€ะฐะฑะพั‚ัƒ. */
        ms_usleep(20000);
    }
}

เจ†เจ“ เจ•เฉฐเจชเจพเจ‡เจฒ เจ•เจฐเฉ€เจเฅค เจ…เฉฑเจ—เฉ‡, เจคเฉเจธเฉ€เจ‚ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจจเฉ‚เฉฐ เจฆเฉ‹ เจ•เฉฐเจชเจฟเจŠเจŸเจฐเจพเจ‚ 'เจคเฉ‡ เจšเจฒเจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค เจœเจพเจ‚ เจ‡เฉฑเจ• 'เจคเฉ‡, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจฎเฉˆเจ‚ เจนเฉเจฃ เจ•เจฐเจพเจ‚เจ—เจพเฅค เจนเฉ‡เจ  เจฆเจฟเฉฑเจคเฉ‡ เจ†เจฐเจ—เฉ‚เจฎเฉˆเจ‚เจŸเจพเจ‚ เจจเจพเจฒ TShark เจฒเจพเจ‚เจš เจ•เจฐเฉ‹:

$ sudo tshark -i lo -f "udp dst port 7010" -P -V -O RTP -o rtp.heuristic_rtp:TRUE -x

เจœเฉ‡เจ•เจฐ เจ•เฉฐเจธเฉ‹เจฒ เจฆเจพ เจธเจŸเจพเจฐเจŸเจ…เฉฑเจช เจซเฉ€เจฒเจก เจธเจฟเจฐเจซเจผ เจ•เฉˆเจชเจšเจฐ เจฆเฉ€ เจธเจผเฉเจฐเฉ‚เจ†เจค เจฌเจพเจฐเฉ‡ เจ‡เฉฑเจ• เจธเฉเจจเฉ‡เจนเจพ เจชเฉเจฐเจฆเจฐเจธเจผเจฟเจค เจ•เจฐเจฆเจพ เจนเฉˆ, เจคเจพเจ‚ เจ‡เจน เจ‡เฉฑเจ• เจšเฉฐเจ—เจพ เจธเฉฐเจ•เฉ‡เจค เจนเฉˆ - เจ‡เจธเจฆเจพ เจฎเจคเจฒเจฌ เจนเฉˆ เจ•เจฟ เจธเจพเจกเจพ เจชเฉ‹เจฐเจŸ เจธเฉฐเจญเจพเจตเจค เจคเฉŒเจฐ 'เจคเฉ‡ เจฆเฉ‚เจœเฉ‡ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎเจพเจ‚ เจฆเฉเจ†เจฐเจพ เจ–เจพเจฒเฉ€ เจนเฉˆเฅค เจ•เจฟเจธเฉ‡ เจนเฉ‹เจฐ เจŸเจฐเจฎเฉ€เจจเจฒ เจตเจฟเฉฑเจš, เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจฆเจพ เจ‡เฉฑเจ• เจ‰เจฆเจพเจนเจฐเจฃ เจฒเจพเจ‚เจš เจ•เจฐเฉ‹ เจœเฉ‹ เจ‡เจธ เจชเฉ‹เจฐเจŸ เจจเฉฐเจฌเจฐ เจจเฉ‚เฉฐ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจ•เฉ‡ เจ‡เฉฑเจ• "เจฐเจฟเจฎเฉ‹เจŸ" เจ‡เฉฐเจŸเจฐเจ•เจพเจฎ เจกเจฟเจตเจพเจˆเจธ เจฆเฉ€ เจจเจ•เจฒ เจ•เจฐเฉ‡เจ—เจพ:

$ ./mstest8 --port 9010 --lport 7010

เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจŸเฉˆเจ•เจธเจŸ เจคเฉ‹เจ‚ เจฆเฉ‡เจ–เจฟเจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ, เจตเจฐเจคเจฟเจ† เจœเจพเจฃ เจตเจพเจฒเจพ เจกเจฟเจซเจพเจฒเจŸ IP เจชเจคเจพ 127.0.0.1 (เจธเจฅเจพเจจเจ• เจฒเฉ‚เจชเจฌเฉˆเจ•) เจนเฉˆเฅค

เจ‡เฉฑเจ• เจนเฉ‹เจฐ เจŸเจฐเจฎเฉ€เจจเจฒ เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจฆเจพ เจฆเฉ‚เจœเจพ เจ‰เจฆเจพเจนเจฐเจฃ เจฒเจพเจ‚เจš เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจœเฉ‹ เจ‡เฉฑเจ• เจธเจฅเจพเจจเจ• เจกเจฟเจตเจพเจˆเจธ เจฆเฉ€ เจจเจ•เจฒ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจตเจพเจงเฉ‚ เจ†เจฐเจ—เฉ‚เจฎเฉˆเจ‚เจŸ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจœเฉ‹ เจฌเจฟเจฒเจŸ-เจ‡เจจ เจŸเฉˆเจธเจŸ เจœเจจเจฐเฉ‡เจŸเจฐ เจจเฉ‚เฉฐ เจธเจฎเจฐเฉฑเจฅ เจฌเจฃเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ:

$ ./mstest8  --port 7010 --lport 9010 --gen 440

เจ‡เจธ เจฌเจฟเฉฐเจฆเฉ‚ 'เจคเฉ‡, "เจฐเจฟเจฎเฉ‹เจŸ" เจกเจฟเจตเจพเจˆเจธ เจตเฉฑเจฒ เจญเฉ‡เจœเฉ‡ เจ—เจ เจชเฉˆเจ•เฉ‡เจŸ TShark เจ•เฉฐเจธเฉ‹เจฒ เจตเจฟเฉฑเจš เจซเจฒเฉˆเจธเจผ เจนเฉ‹เจฃเฉ‡ เจšเจพเจนเฉ€เจฆเฉ‡ เจนเจจ, เจ…เจคเฉ‡ เจ•เฉฐเจชเจฟเจŠเจŸเจฐ เจธเจชเฉ€เจ•เจฐ เจคเฉ‹เจ‚ เจ‡เฉฑเจ• เจจเจฟเจฐเฉฐเจคเจฐ เจŸเฉ‹เจจ เจธเจฟเจ—เจจเจฒ เจธเฉเจฃเจพเจˆ เจฆเฉ‡เจตเฉ‡เจ—เจพเฅค

เจœเฉ‡เจ•เจฐ เจธเจญ เจ•เฉเจ เจฏเฉ‹เจœเจจเจพ เจ…เจจเฉเจธเจพเจฐ เจนเฉ‹เจ‡เจ†, เจคเจพเจ‚ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจฆเฉ‡ เจฆเฉ‚เจœเฉ‡ เจ‡เฉฐเจธเจŸเฉˆเจ‚เจธ เจจเฉ‚เฉฐ เจฎเฉเฉœ เจšเจพเจฒเฉ‚ เจ•เจฐเฉ‹, เจชเจฐ "--gen 440" เจ•เฉเฉฐเจœเฉ€ เจ…เจคเฉ‡ เจ†เจฐเจ—เฉ‚เจฎเฉˆเจ‚เจŸ เจคเฉ‹เจ‚ เจฌเจฟเจจเจพเจ‚เฅค เจนเฉเจฃ เจคเฉเจธเฉ€เจ‚ เจœเจจเจฐเฉ‡เจŸเจฐ เจตเจœเฉ‹เจ‚ เจ•เฉฐเจฎ เจ•เจฐเฉ‹เจ—เฉ‡เฅค เจ‡เจธ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจคเฉเจธเฉ€เจ‚ เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจซเจผเฉ‹เจจ เจตเจฟเฉฑเจš เจ•เฉเจ เจธเจผเฉ‹เจฐ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹; เจคเฉเจนเจพเจจเฉ‚เฉฐ เจธเจชเฉ€เจ•เจฐ เจœเจพเจ‚ เจนเฉˆเฉฑเจกเจซเจผเฉ‹เจจ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจ…เจจเฉเจธเจพเจฐเฉ€ เจ†เจตเจพเจœเจผ เจธเฉเจฃเจจเฉ€ เจšเจพเจนเฉ€เจฆเฉ€ เจนเฉˆเฅค เจคเฉเจธเฉ€เจ‚ เจงเฉเจจเฉ€ เจธเจตเฉˆ-เจ‰เจคเฉ‡เจœเจจเจพ เจฆเจพ เจ…เจจเฉเจญเจต เจตเฉ€ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹; เจธเจชเฉ€เจ•เจฐ เจฆเฉ€ เจ†เจตเจพเจœเจผ เจจเฉ‚เฉฐ เจ˜เฉฑเจŸ เจ•เจฐเจจ เจจเจพเจฒ เจชเฉเจฐเจญเจพเจต เจ–เจคเจฎ เจนเฉ‹ เจœเจพเจตเฉ‡เจ—เจพเฅค

เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจฆเฉ‹ เจ•เฉฐเจชเจฟเจŠเจŸเจฐเจพเจ‚ 'เจคเฉ‡ เจšเจฒเจพเจ‡เจ† เจนเฉˆ เจ…เจคเฉ‡ IP เจชเจคเจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจ–เจฐเจพเจฌ เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเจพ เจนเฉˆ, เจคเจพเจ‚ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‰เจนเฉ€ เจจเจคเฉ€เจœเจพ เจฎเจฟเจฒเฉ‡เจ—เจพ - เจฆเฉ‹-เจชเฉฑเจ–เฉ€, เจกเจฟเจœเฉ€เจŸเจฒ-เจ—เฉเจฃเจตเฉฑเจคเจพ เจตเจพเจฒเฉ€ เจตเฉŒเจ‡เจธ เจธเฉฐเจšเจพเจฐเฅค

เจ…เจ—เจฒเฉ‡ เจฒเฉ‡เจ– เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจธเจฟเฉฑเจ–เจพเจ‚เจ—เฉ‡ เจ•เจฟ เจ†เจชเจฃเฉ‡ เจซเจฟเจฒเจŸเจฐ - เจชเจฒเฉฑเจ—เจ‡เจจ เจ•เจฟเจตเฉ‡เจ‚ เจฒเจฟเจ–เจฃเฉ‡ เจนเจจเฅค เจ‡เจน เจนเฉเจจเจฐ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฎเฉ€เจกเฉ€เจ† เจธเจŸเฉเจฐเฉ€เจฎเจฐ เจจเฉ‚เฉฐ เจธเจฟเจฐเจซเจผ เจ†เจกเฉ€เจ“ เจ…เจคเฉ‡ เจตเฉ€เจกเฉ€เจ“ เจฒเจˆ เจนเฉ€ เจจเจนเฉ€เจ‚, เจธเจ—เฉ‹เจ‚ เจ•เจฟเจธเฉ‡ เจนเฉ‹เจฐ เจ–เจพเจธ เจ–เฉ‡เจคเจฐ เจตเจฟเฉฑเจš เจตเฉ€ เจตเจฐเจคเจฃ เจฆเฉ€ เจ†เจ—เจฟเจ† เจฆเฉ‡เจตเฉ‡เจ—เจพเฅค

เจธเจฐเฉ‹เจค: www.habr.com

DDoS เจธเฉเจฐเฉฑเจ–เจฟเจ†, VPS VDS เจธเจฐเจตเจฐเจพเจ‚ เจตเจพเจฒเฉ€เจ†เจ‚ เจธเจพเจˆเจŸเจพเจ‚ เจฒเจˆ เจญเจฐเฉ‹เจธเฉ‡เจฏเฉ‹เจ— เจนเฉ‹เจธเจŸเจฟเฉฐเจ— เจ–เจฐเฉ€เจฆเฉ‹ ๐Ÿ”ฅ DDoS เจธเฉเจฐเฉฑเจ–เจฟเจ†, VPS VDS เจธเจฐเจตเจฐเจพเจ‚ เจจเจพเจฒ เจญเจฐเฉ‹เจธเฉ‡เจฏเฉ‹เจ— เจตเฉˆเฉฑเจฌเจธเจพเจˆเจŸ เจนเฉ‹เจธเจŸเจฟเฉฐเจ— เจ–เจฐเฉ€เจฆเฉ‹ | ProHoster