เดฒเตเดเดจเดคเตเดคเดฟเดจเตเดฑเต เดฎเตเดฑเตเดฑเตเดฐเดฟเดฏเตฝ เดเดจเตเดฑเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดเตเดคเตเดคเดคเดพเดฃเต
เดกเตเดฏเตเดชเตเดฒเตเดเตเดธเต เดเดจเตเดฑเตผเดเตเด
เด
เดตเดธเดพเดจเดคเตเดคเดฟเตฝ
เดกเดฏเดเตเดฐเด เดเตเดฑเตเดฑเดฟเตฝ เดเดฟเดคเตเดฐเดคเตเดคเดฟเตฝ เดเดพเดฃเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต. เดซเดฟเตฝเดเตเดเดฑเตเดเดณเตเดเต เดคเดพเดดเดคเตเดคเต เดถเตเดเดเดฒ เดถเดฌเตเดฆ เดเดพเตผเดกเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดฐเดเดญเดฟเดเตเดเตเดจเตเดจ เดเตเดฐเดพเตปเดธเตเดฎเดฟเดทเตป เดชเดพเดค เดฐเตเดชเดชเตเดชเตเดเตเดคเตเดคเตเดจเตเดจเต. เดเดคเต เดฎเตเดเตเดฐเตเดซเตเดฃเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดธเดฟเดเตเดจเตฝ เดธเดพเดฎเตเดชเดฟเดณเตเดเตพ เดจเตฝเดเตเดจเตเดจเต. เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟเดฏเดพเดฏเดฟ, เดเดคเต เดธเตเดเตเดเตปเดกเดฟเตฝ 8000 เดธเดพเดฎเตเดชเดฟเดณเตเดเตพ เดเดจเตเดจ เดจเดฟเดฐเดเตเดเดฟเตฝ เดธเดเดญเดตเดฟเดเตเดเตเดจเตเดจเต. เดฎเตเดกเดฟเดฏ เดธเตเดเตเดฐเตเดฎเตผ เดเดกเดฟเดฏเต เดซเดฟเตฝเดเตเดเดฑเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจ เดกเดพเดฑเตเดฑ เดฌเดฟเดฑเตเดฑเต เดกเตเดชเตเดคเต 16 เดฌเดฟเดฑเตเดฑเตเดเดณเดพเดฃเต (เดเดคเต เดชเตเดฐเดงเดพเดจเดฎเดฒเตเดฒ; เดจเดฟเดเตเดเตพเดเตเดเต เดตเตเดฃเดฎเตเดเตเดเดฟเตฝ, เดเดฏเตผเดจเตเดจ เดฌเดฟเดฑเตเดฑเต เดกเตเดชเตเดคเต เดเดชเดฏเตเดเดฟเดเตเดเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจ เดซเดฟเตฝเดเตเดเดฑเตเดเตพ เดจเดฟเดเตเดเตพเดเตเดเต เดเดดเตเดคเดพเด). เดกเดพเดฑเตเดฑ 160 เดธเดพเดฎเตเดชเดฟเดณเตเดเดณเตเดเต เดฌเตเดฒเตเดเตเดเตเดเดณเดพเดฏเดฟ เดคเดฟเดฐเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต. เด เดเตเดเดจเต, เดเดฐเต เดฌเตเดฒเตเดเตเดเดฟเดจเตเด 320 เดฌเตเดฑเตเดฑเตเดเตพ เดตเดฒเดฟเดชเตเดชเดฎเตเดฃเตเดเต. เด เดเตเดคเตเดคเดคเดพเดฏเดฟ, เดเดจเดฑเตเดฑเตเดฑเดฑเดฟเดจเตเดฑเต เดเตปเดชเตเดเตเดเดฟเดฒเตเดเตเดเต เดเดเตเดเตพ เดกเดพเดฑเตเดฑ เดจเตฝเดเตเดจเตเดจเต, เด เดคเต เดเดซเต เดเตเดฏเตเดฏเตเดฎเตเดชเตเตพ, เดกเดพเดฑเตเดฑเดฏเตเดเตเดเต "เดธเตเดคเดพเดฐเตเดฏเดฎเดพเดฃเต". เดกเตเดฌเดเตเดเดฟเดเดเต เดธเดฎเดฏเดคเตเดคเต เดฎเตเดเตเดฐเตเดซเตเดฃเดฟเตฝ เดธเดเดธเดพเดฐเดฟเดเตเดเดพเตป เดจเดฟเดเตเดเตพเดเตเดเต เดฎเดเตเดคเตเดคเตเดตเตเดเตเดเดฟเตฝ เดเดพเตป เดเดคเต เดเตเตผเดคเตเดคเต - เดเตเตบ เดธเดฟเดเตเดจเตฝ เดเดชเดฏเตเดเดฟเดเตเดเต เดชเดพเดค "เดทเตเดเตเดเต" เดเตเดฏเตเดฏเดพเตป เดจเดฟเดเตเดเตพเดเตเดเต เดเดจเดฑเตเดฑเตเดฑเตผ เดเดชเดฏเตเดเดฟเดเตเดเดพเด.
เดเดจเดฑเตเดฑเตเดฑเดฑเดฟเดจเต เดถเตเดทเด, เดธเดฟเดเตเดจเตฝ เดเตปเดเตเดกเดฑเดฟเดฒเตเดเตเดเต เดชเตเดเตเดจเตเดจเต, เด เดคเต ยต-เดจเดฟเดฏเดฎเด (G.16 เดธเตเดฑเตเดฑเดพเตปเดกเตเตผเดกเต) เด เดจเตเดธเดฐเดฟเดเตเดเต เดเดเตเดเดณเตเดเต 711-เดฌเดฟเดฑเตเดฑเต เดธเดพเดฎเตเดชเดฟเดณเตเดเดณเต เดเดเตเดเต-เดฌเดฟเดฑเตเดฑเตเดเดณเดพเดเตเดเดฟ เดฎเดพเดฑเตเดฑเตเดจเตเดจเต. เดเตปเดเตเดกเดฑเดฟเดจเตเดฑเต เดเดเตเดเตเดชเตเดเตเดเดฟเตฝ, เดเดเตเดเตพเดเตเดเต เดเดคเดฟเดจเดเด เดชเดเตเดคเดฟ เดตเดฒเดฟเดชเตเดชเดฎเตเดณเตเดณ เดกเดพเดฑเตเดฑ เดฌเตเดฒเตเดเตเดเต เดเดฃเตเดเต. เดชเตเดคเตเดตเต, เดเตเดฐเดพเดซเดฟเดเต เดธเดเดฐเดเตเดทเดฟเดเตเดเตเดฃเตเด เดเดตเดถเตเดฏเดฎเดฟเดฒเตเดฒเตเดเตเดเดฟเตฝ เดเดเดชเตเดฐเดทเตป เดเตเดเดพเดคเต เดกเดพเดฑเตเดฑ เดเตเดฎเดพเดฑเดพเตป เดเดดเดฟเดฏเตเด. เดเดจเตเดจเดพเตฝ เดเดตเดฟเดเต เดเดฐเต เดเตปเดเตเดกเตผ เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเดคเต เดเดชเดฏเตเดเดชเตเดฐเดฆเดฎเดพเดฃเต, เดเดพเดฐเดฃเด Wireshark-เดจเต ยต-law เด เดฒเตเดฒเตเดเตเดเดฟเตฝ a-law เด เดจเตเดธเดฐเดฟเดเตเดเต เดเดเดชเตเดฐเดธเต เดเตเดฏเตเดฏเตเดฎเตเดชเตเตพ เดฎเดพเดคเตเดฐเดฎเต RTP เดธเตเดเตเดฐเตเดฎเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดกเดฟเดฏเต เดชเตเดจเตผเดจเดฟเตผเดฎเตเดฎเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเต.
เดเตปเดเตเดกเดฑเดฟเดจเต เดถเตเดทเด, เดกเดพเดฑเตเดฑเดฏเตเดเต เดญเดพเดฐเด เดเตเดฑเดเตเด เดฌเตเดฒเตเดเตเดเตเดเตพ 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]);
}
}
}
เดชเดพเดดเตเดธเดฟเดเดเดฟเดจเตเดฑเต เดซเดฒเดฎเดพเดฏเดฟ, เดเดฎเดพเตปเดกเต เดฒเตเตป เดเตผเดเตเดฏเตเดฎเตเดจเตเดฑเตเดเตพ vars เดเดเดจเดฏเตเดเต เดซเตเตฝเดกเตเดเดณเดฟเตฝ เดธเตเดฅเดพเดชเดฟเดเตเดเตเด. เดซเดฟเตฝเดเตเดเดฑเตเดเดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดธเดเดชเตเดฐเตเดทเดฃเด เดเตเดฏเตเดฏเตเดจเตเดจเดคเตเด เดธเตเดตเตเดเดฐเดฟเดเตเดเตเดจเตเดจเดคเตเดฎเดพเดฏ เดชเดพเดคเดเตพ เดถเตเดเดฐเดฟเดเตเดเตเด เดเดจเตเดจเดคเดพเดฃเต เดเดชเตเดฒเดฟเดเตเดเตเดทเดจเตเดฑเต เดชเตเดฐเดงเดพเดจ เดชเตเดฐเดตเตผเดคเตเดคเดจเด; เดเดฟเดเตเดเตผ เดเดฃเดเตเดฑเตเดฑเตเดเตเดฏเตโเดค เดถเตเดทเด, เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเด เด เดจเดจเตเดคเดฎเดพเดฏ เดฒเตเดชเตเดชเดฟเดฒเตเดเตเดเต เดฎเดพเดฑเตเดฑเตเด, เด เดคเต เดเดจเดฑเตเดฑเตเดฑเตผ เดเดตเตเดคเตเดคเดฟ เดชเตเดเตเดฏเดฎเดฒเตเดฒเดพเดคเตเดคเดคเดพเดฏเดฟ เดธเดเตเดเตเดเดฐเดฟเดเตเดเดฟเดเตเดเตเดฃเตเดเตเดเตเดเดฟเตฝ, เดเตเดธเตเดฑเตเดฑเต เดเดจเดฑเตเดฑเตเดฑเตผ เดชเตเดจเดฐเดพเดฐเดเดญเดฟเดเตเดเตเด. เด เดคเต เดจเดฟเตผเดคเตเดคเดพเดคเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเต.
เดเดจเดฑเตเดฑเตเดฑเดฑเดฟเดจเต เด เดคเดฟเดจเตเดฑเต เดฐเตเดชเดเตฝเดชเตเดชเดจ เดเดพเดฐเดฃเด เด เดชเตเดจเดฐเดพเดฐเดเดญเดเตเดเตพ เดเดตเดถเตเดฏเดฎเดพเดฏเดฟ เดตเดฐเตเด; เดเดฟเดฒ เดเดพเดฐเดฃเดเตเดเดณเดพเตฝ เดเดคเดฟเดจเต 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โ. เดจเดฟเดเตเดเตพ เดเดชเตเดชเตเตพ เดเดจเดฑเตเดฑเตเดฑเดฑเดฟเดจเตเดฑเต เดชเดเตเดเต เดตเดนเดฟเดเตเดเตเด. เดเดคเดฟเดจเตเดถเตเดทเด, เดจเดฟเดเตเดเตพเดเตเดเต เดฎเตเดเตเดฐเตเดซเตเดฃเดฟเดฒเตเดเตเดเต เดถเดฌเตเดฆเดฎเตเดฃเตเดเดพเดเตเดเดพเด; เดธเตเดชเตเดเตเดเดฑเดฟเดฒเต เดนเตเดกเตโเดซเตเดฃเดฟเดฒเต เดจเดฟเดเตเดเตพ เด เดจเตเดฌเดจเตเดง เดถเดฌเตเดฆเด เดเตเตพเดเตเดเดฃเด. เด เดเตเดเตเดธเตเดฑเตเดฑเดฟเดเต เดธเตเดตเดฏเด-เดเดตเตเดถเด เดชเตเดฒเตเด เดธเดเดญเดตเดฟเดเตเดเดพเด; เดธเตเดชเตเดเตเดเตผ เดตเตเดณเดฟเดฏเด เดเตเดฑเดฏเตเดเตเดเตเด, เดชเตเดฐเดญเดพเดตเด เด เดชเตเดฐเดคเตเดฏเดเตเดทเดฎเดพเดเตเด.
เดจเดฟเดเตเดเตพ เดเดคเต เดฐเดฃเตเดเต เดเดฎเตเดชเตเดฏเตเดเตเดเดฑเตเดเดณเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดเตเดเตเดเดฏเตเด เดเดชเดฟ เดตเดฟเดฒเดพเดธเดเตเดเดณเตเดเตเดเตเดฑเดฟเดเตเดเต เดเดถเดฏเดเตเดเตเดดเดชเตเดชเดคเตเดคเดฟเดฒเดพเดเดพเดคเดฟเดฐเดฟเดเตเดเตเดเดฏเตเด เดเตเดฏเตเดคเดพเตฝ, เด เดคเต เดซเดฒเด เดจเดฟเดเตเดเดณเต เดเดพเดคเตเดคเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต - เดเต-เดตเต เดกเดฟเดเดฟเดฑเตเดฑเตฝ เดจเดฟเดฒเดตเดพเดฐเดฎเตเดณเตเดณ เดตเตเดฏเตโเดธเต เดเดถเดฏเดตเดฟเดจเดฟเดฎเดฏเด.
เด เดเตเดคเตเดค เดฒเตเดเดจเดคเตเดคเดฟเตฝ, เดเดเตเดเดณเตเดเต เดธเตเดตเดจเตเดคเด เดซเดฟเตฝเดเตเดเดฑเตเดเตพ เดเดเตเดเดจเต เดเดดเตเดคเดพเดฎเตเดจเตเดจเต เดเดเตเดเตพ เดชเด เดฟเดเตเดเตเด - เดชเตเดฒเดเดฟเดจเตเดเตพ, เด เดตเตเดฆเดเตเดงเตเดฏเดคเตเดคเดฟเดจเต เดจเดจเตเดฆเดฟ, เดจเดฟเดเตเดเตพเดเตเดเต เดเดกเดฟเดฏเตเดฏเตเดเตเดเตเด เดตเตเดกเดฟเดฏเตเดฏเตเดเตเดเตเด เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เดฎเดฑเตเดฑเต เดเดฟเดฒ เดชเตเดฐเดคเตเดฏเตเด เดฎเตเดเดฒเดเดณเดฟเดฒเตเด เดฎเตเดกเดฟเดฏ เดธเตเดเตเดฐเตเดฎเตผ เดเดชเดฏเตเดเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเตเด.
เด เดตเดฒเดเดฌเด: www.habr.com