เปเบญเบเบฐเบชเบฒเบเบเบญเบเบเบปเบเบเบงเบฒเบกเปเบกเปเบเปเบญเบปเบฒเบกเบฒเบเบฒเบเบเบญเบเบเปเบญเบ
Duplex intercom
เปเบเบเบตเปเบชเบธเบ
เปเบเบเบงเบฒเบเปเบกเปเบเบชเบฐเปเบเบเบขเบนเปเปเบเบฎเบนเบเบซเบปเบงเบเปเป. เบฅเบฐเบเบปเบเบเปเบญเบเปเบชเปเบเปเปเบฒเบเบญเบเบเบฒเบเบเบฑเปเบเบเบญเบเบเบฐเบเบญเบเปเบเบฑเบเปเบชเบฑเปเบเบเบฒเบเบชเบฒเบเบชเบปเปเบ, เปเบเบดเปเบเปเบฅเบตเปเบกเบเบปเปเบเบเบฒเบเบเบฑเบเบชเบฝเบ. เบกเบฑเบเบชเบฐเบซเบเบญเบเบเบปเบงเบขเปเบฒเบเบชเบฑเบเบเบฒเบเบเบฒเบเปเบกเปเบเปเบเบ. เปเบเบเบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบ, เบเบตเปเปเบเบตเบเบเบทเปเบเปเบเบญเบฑเบเบเบฒ 8000 เบเบปเบงเบขเปเบฒเบเบเปเปเบงเบดเบเบฒเบเบต. เบเบงเบฒเบกเปเบฅเบดเบเบเบญเบเบเบดเบเบเปเปเบกเบนเบเบเบตเปเบเบปเบงเบเบญเบเบชเบฝเบเบเบญเบ media streamer เปเบเปเปเบกเปเบ 16 bits (เบญเบฑเบเบเบตเปเบเปเปเบชเปเบฒเบเบฑเบ; เบเปเบฒเบเปเบฒเบเบเปเบญเบเบเบฒเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเบเบฝเบเบเบปเบงเบเบญเบเบเบตเปเบเบฐเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบเบงเบฒเบกเปเบฅเบดเบเบเบดเบเบเบตเปเบชเบนเบเบเบงเปเบฒ). เบเปเปเบกเบนเบเบเบทเบเบเบฑเบเปเบเบฑเบเบเบธเปเบกเบเบญเบ 160 เบเบปเบงเบขเปเบฒเบ. เบเบฑเปเบเบเบฑเปเบ, เปเบเปเบฅเบฐเบเบฑเบเปเบกเปเบ 320 bytes เปเบเบเบฐเบซเบเบฒเบ. เบเปเปเปเบ, เบเบงเบเปเบฎเบปเบฒเปเบซเปเบเปเปเบกเบนเบเปเบเบปเปเบฒเปเบเบเบฒเบเบเปเบญเบเบเปเปเบกเบนเบเบเบญเบเปเบเบทเปเบญเบเบเปเบฒเปเบเบตเบ, เปเบเบดเปเบ, เปเบกเบทเปเบญเบเบดเบ, เปเบกเปเบ "เปเบเปเบเปเบช" เบเบฑเบเบเปเปเบกเบนเบ. เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเปเบเบตเปเบกเบกเบฑเบเปเบเบเปเบฅเบฐเบเบตเบเบตเปเปเบเบปเปเบฒเปเบเบทเปเบญเบเบตเปเบเบฐเปเบงเบปเปเบฒเปเบเบปเปเบฒเปเบเปเบเปเบกเปเบเปเบเบเปเบเบฅเบฐเบซเบงเปเบฒเบเบเบฒเบเบเบตเบเบฑเบ - เบเปเบฒเบเบชเบฒเบกเบฒเบเบเปเบฒเปเบเปเปเบเบทเปเบญเบเบเปเบฒเปเบเบตเบเปเบเบทเปเบญ "เบเบดเบ" เปเบชเบฑเปเบเบเบฒเบเบเบตเปเบกเบตเบชเบฑเบเบเบฒเบเบชเบฝเบ.
เบซเบผเบฑเบเบเบฒเบเปเบเบทเปเบญเบเบเปเบฒเปเบเบตเบ, เบชเบฑเบเบเบฒเบเปเบเบซเบฒเบเบปเบงเปเบเบปเปเบฒเบฅเบฐเบซเบฑเบ, เปเบเบดเปเบเบเปเบฝเบเบเบปเบงเบขเปเบฒเบ 16-bit เบเบญเบเบเบงเบเปเบฎเบปเบฒเบเบฒเบกเบกเบฒเบเบเบฐเบเบฒเบ ยต-law (G.711) เปเบเบฑเบเปเบเบเบเบดเบ. เบขเบนเปเบเบตเปเบเบปเบเบเบฐเบฅเบดเบเบเบญเบเบเบปเบงเปเบเบปเปเบฒเบฅเบฐเบซเบฑเบ, เบเบงเบเปเบฎเบปเบฒเบกเบตเบเบปเบงเบชเบฐเบเบฑเบเบเปเปเบกเบนเบเปเบเบดเปเบเบซเบเบถเปเบเบเบญเบเบเบฐเบซเบเบฒเบ. เปเบเบเบเบปเปเบงเปเบ, เบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเบชเบปเปเบเบเปเปเบกเบนเบเปเบเบเบเปเปเบกเบตเบเบฒเบเบเบตเบเบญเบฑเบเบเปเบฒเบเบงเบเปเบฎเบปเบฒเบเปเปเบเปเบฒเปเบเบฑเบเบเปเบญเบเบเบฐเบซเบเบฑเบเบเบฒเบเบเบฐเบฅเบฒเบเบญเบ. เปเบเปเปเบเบเบตเปเบเบตเปเบกเบฑเบเปเบเบฑเบเบเบฐเปเบซเบเบเบเบตเปเบเบฐเปเบเปเบเบปเบงเปเบเบปเปเบฒเบฅเบฐเบซเบฑเบ, เปเบเบฒเบฐเบงเปเบฒ Wireshark เบชเบฒเบกเบฒเบเบเบฐเบฅเบดเบเบชเบฝเบเบเบฒเบเบเบฐเปเบช RTP เปเบเปเบเบฝเบเปเบเปเปเบกเบทเปเบญเบกเบฑเบเบเบทเบเบเบตเบเบญเบฑเบเบเบฒเบก ยต-law เบซเบผเบท a-law.
เบซเบผเบฑเบเบเบฒเบเบเบปเบงเปเบเบปเปเบฒเบฅเบฐเบซเบฑเบ, เบเปเปเบกเบนเบเบชเบฐเบเบฑเบเปเบเบปเบฒเบเบงเปเบฒเบเบทเบเบชเบปเปเบเปเบเบซเบฒเบเบปเบงเบเบญเบ rtpsend, เปเบเบดเปเบเบเบฐเปเบฎเบฑเบเปเบซเปเบเบงเบเปเบเบปเบฒเบขเบนเปเปเบเบเบธเบ RTP, เบเปเบฒเบเบปเบเบเบธเบเบเบตเปเบเปเบฒเปเบเบฑเบเปเบฅเบฐเปเบซเปเบเบงเบเปเบเบปเบฒเบเบฑเบ media streamer เบชเปเบฒเบฅเบฑเบเบเบฒเบเบชเบปเปเบเบเปเบฒเบเปเบเบทเบญเบเปเบฒเบเปเบเบฎเบนเบเปเบเบเบเบญเบเปเบเบฑเบเปเบเบฑเบ UDP.
เบฅเบฐเบเบปเบเบเปเบญเบเปเบชเปเปเบเบดเบเบเบญเบเบเบปเบงเบเบญเบเบเบฐเบเบญเบเปเบเบฑเบเปเบชเบฑเปเบเบเบฒเบเบเบฒเบเบฎเบฑเบ; เบเบธเบ RTP เบเบตเปเปเบเปเบฎเบฑเบเปเบเบ media streamer เบเบฒเบเปเบเบทเบญเบเปเบฒเบเปเบเบปเปเบฒเปเบเปเบเบเบปเบงเบเบญเบ rtprecv, เบขเบนเปเบเบตเปเบเบปเบเบเบฐเบฅเบดเบเบเบตเปเบเบงเบเบกเบฑเบเบเบฒเบเบปเบเบขเบนเปเปเบเบฎเบนเบเปเบเบเบเบญเบเบเปเปเบกเบนเบ, เปเบเปเบฅเบฐเบญเบฑเบเบเบปเบเบเบฑเบเบเบธเบเบเบตเปเปเบเปเบฎเบฑเบ. เบเบฅเบฑเบญเบเบเบฐเบเบญเบเบกเบตเบเปเปเบกเบนเบ payload เปเบเบปเปเบฒเบเบฑเปเบ; เปเบเบเบปเบเบเบงเบฒเบกเบเบตเปเบเปเบฒเบเบกเบฒเบเบงเบเปเบเบปเบฒเบเบทเบเบชเบฐเปเบเบเปเบเบฑเบเบชเบตเบเบฝเบงเปเบเบเบปเบงเบขเปเบฒเบ.
เบเปเปเปเบ, เบเบฑเบเบเบทเบเบชเบปเปเบเปเบเบซเบฒเบเบปเบงเบเบญเบเบเบปเบงเบเบญเบเบฅเบฐเบซเบฑเบ, เปเบเบดเปเบเบเปเบฝเบเบเบปเบงเบขเปเบฒเบเบเบฝเบงเปเบเบเปเบเบตเปเบกเบตเบขเบนเปเปเบเบเบงเบเบกเบฑเบเปเบซเปเปเบเบฑเบเปเบชเบฑเปเบ, 16-เบเบดเบ. เปเบเบดเปเบเบชเบฒเบกเบฒเบเบเบฐเบกเบงเบเบเบปเบเปเบเปเปเบฅเปเบงเปเบเบเบเบปเบงเบเบญเบเบเบฐเปเบชเบชเบทเป. เปเบเบเปเบฅเบฐเบเบตเบเบญเบเบเบงเบเปเบฎเบปเบฒ, เบเบงเบเปเบฎเบปเบฒเบเบฝเบเปเบเปเบชเบปเปเบเบเบงเบเบกเบฑเบเปเบเบซเบฒเปเบเปเบเบชเบฝเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบซเบผเบดเปเบเบขเบนเปเปเบเบฅเปเบฒเปเบเบเบเบญเบเบซเบนเบเบฑเบเบเบญเบเบเปเบฒเบ.
เบเบญเบเบเบตเปเปเบซเปเปเบฎเบปเบฒเบเปเบฒเบงเปเบเบชเบนเปเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบญเบเปเบง. เปเบเบทเปเบญเปเบฎเบฑเบเบชเบดเปเบเบเบตเป, เบเบงเบเปเบฎเบปเบฒเบเบฐเบชเบปเบกเบเบปเบเปเบเบฅเปเบฎเบฑเบเปเบฅเบฐเปเบเบทเปเบญเบเบชเบปเปเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเปเบเบเบญเบญเบเบเปเบญเบ. เบเปเบญเบเบซเบเปเบฒเบเบตเป, เบเบงเบเปเบฎเบปเบฒเปเบเปเปเบเปเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบปเบเบเบตเปเบชเปเบฒเบฅเบฑเบเบเบญเบเปเบฅเบฐเบเบตเปเบขเบนเป, เปเบเปเบเบญเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบเปเบเบผเปเบเบผเบกเปเบเบทเปเบญเบชเบฒเบกเบฒเบเบเปเบฒเปเบเปเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเบฒเบเบปเบเปเบเบเบญเบเปเบฅเบตเปเบกเบเบปเปเบ. เปเบเบทเปเบญเปเบฎเบฑเบเบชเบดเปเบเบเบตเป, เบเบงเบเปเบฎเบปเบฒเบเบฐเปเบเบตเปเบกเบซเบเปเบฒเบเบตเปเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฐเบกเบงเบเบเบปเบเบเบฒเบเปเบเปเบเบฝเบเปเบชเบฑเปเบเบเปเบฒเบชเบฑเปเบ. เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบงเบเปเบฎเบปเบฒเบเบฐเบชเบฒเบกเบฒเบเบเปเบฒเบเบปเบเบเบตเปเบขเบนเป IP เปเบฅเบฐเบเบญเบเบเบญเบ intercom เบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบเบชเปเบฒเบเบเบฒเบเปเบเบทเปเบญเบกเบเปเป.
เบเปเบญเบเบญเบทเปเบ เปเบปเบ, เปเบซเปเปเบเบตเปเบกเปเบเบเบชเปเบฒเบเปเบซเปเบเบฑเบเปเบเปเบเบผเบกเบเบตเปเบเบฐเปเบเบฑเบเบฎเบฑเบเบชเบฒเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบญเบเบกเบฑเบ:
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]);
}
}
}
เปเบเบฑเบเบเบปเบเบกเบฒเบเบฒเบเบเบฒเบเปเบเบเบงเบดเปเบเบฒเบฐ, arguments เปเบเบงเบเปเบฒเบชเบฑเปเบเบเบฐเบเบทเบเบงเบฒเบเปเบงเปเปเบเบเปเบญเบเบเปเปเบกเบนเบเบเบญเบเปเบเบเบชเปเบฒเบ vars. เบซเบเปเบฒเบเบตเปเบเบปเปเบเบเปเบเบญเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเปเบกเปเบเปเบเบทเปเบญเปเบเบฑเบเบเปเบฒเบเบฒเบเบชเบปเปเบเปเบฅเบฐเบเบฒเบเบฎเบฑเบเปเบชเบฑเปเบเบเบฒเบเบเบฒเบเบเบฒเบเบเบฑเปเบเบเบญเบ; เบซเบผเบฑเบเบเบฒเบเบเบฒเบเปเบเบทเปเบญเบกเบเปเป ticker, เบเบฒเบเบเบงเบเบเบธเบกเบเบฐเบเบทเบเปเบญเบเปเบเปเบเบฑเบ loop infinite เปเบเบดเปเบ, เบเปเบฒเบเบงเบฒเบกเบเบตเปเบเบญเบเปเบเบทเปเบญเบเบเปเบฒเปเบเบตเบเปเบเบเปเบฒเบเบทเบเบเบฑเปเบเปเบเบฑเบเบเปเปเปเบกเปเบเบชเบนเบ, เบเบฐ restart เปเบเบทเปเบญเบเบเปเบฒเปเบเบตเบเบเบฒเบเบเบปเบเบชเบญเบเปเบเบทเปเบญเบงเปเบฒ. เบกเบฑเบเปเบฎเบฑเบเบงเบฝเบเปเบเบเบเปเปเบกเบตเบเบฒเบเบขเบธเบ.
เปเบเบทเปเบญเบเบเปเบฒเปเบเบตเบเปเบเบเปเบฒเบเบฐเบเปเบญเบเบเบฒเบเบเบฒเบเปเบฅเบตเปเบกเบเบปเปเบเปเบซเบกเปเปเบซเบผเบปเปเบฒเบเบตเปเปเบเบทเปเบญเบเบเบฒเบเบเบฒเบเบญเบญเบเปเบเบเบเบญเบเบกเบฑเบ; เบชเปเบฒเบฅเบฑเบเปเบซเบเบเบปเบเบเบฒเบเบขเปเบฒเบเบกเบฑเบเบเปเปเบชเบฒเบกเบฒเบเบชเปเบฒเบเบชเบฑเบเบเบฒเบเบเบตเปเบเบฒเบงเบเบงเปเบฒ 16 เบงเบดเบเบฒเบเบต. เบกเบฑเบเบเบงเบเบเบฐเบชเบฑเบเปเบเบเบงเปเบฒเปเบฅเบเบฐเปเบงเบฅเบฒเบเบญเบเบกเบฑเบเบเบทเบเบฅเบฐเบเบธเปเบงเปเปเบเบเบเบปเบงเปเบฅเบ 32-bit.
เปเบเบโเบเบฒเบโเบเบฑเบโเบซเบกเบปเบโเบเบฐโเปเบเบฑเบโเบเบฑเปเบโเบเบตเปโ:
/* ะคะฐะนะป 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
เบเปเบฒเบเบฒเบเบชเบฐเบซเบเบฒเบกเปเบเบตเบเบเบปเบงเปเบ console เบเบฝเบเปเบเปเบชเบฐเปเบเบเบเปเปเบเบงเบฒเบกเบเปเบฝเบงเบเบฑเบเบเบฒเบเปเบฅเบตเปเบกเบเบปเปเบเบเบญเบเบเบฒเบเบเบฑเบเบเบฒเบ, เบเบตเปเปเบกเปเบเบชเบฑเบเบเบฒเบเบเบตเปเบเบต - เบกเบฑเบเบซเบกเบฒเบเบเบงเบฒเบกเบงเปเบฒเบเบญเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเบชเปเบงเบเบซเบผเบฒเบเบเบฐเบเปเปเบเบทเบเบเบญเบเบเบญเบเปเบเบเปเบเบเบเบฒเบเบญเบทเปเบเป. เบขเบนเปเปเบเบชเบฐเบเบฒเบเบตเบญเบทเปเบ, เบเบงเบเปเบฎเบปเบฒเปเบเบตเบเบเบปเบงเบขเปเบฒเบเปเบเบเบเบฒเบเบเบตเปเบเบฐเบเปเบฒเบฅเบญเบ "เปเบฅเบเบฐเปเบ" intercom เปเบเบเบเบฒเบเบฅเบฐเบเบธเบซเบกเบฒเบเปเบฅเบเบเบญเบเบเบตเป:
$ ./mstest8 --port 9010 --lport 7010
เบเบฑเปเบเบเบตเปเปเบซเบฑเบเปเบเปเบเบฒเบเบเปเปเบเบงเบฒเบกเบเบญเบเปเบเบฃเปเบเบฃเบก, เบเบตเปเบขเบนเป IP เปเบฅเบตเปเบกเบเบปเปเบเปเบกเปเบ 127.0.0.1 (local loopback).
เบขเบนเปเปเบเบชเบฐเบเบฒเบเบตเบญเบทเปเบ, เบเบงเบเปเบฎเบปเบฒเปเบเบตเบเบเบปเบงเบเบปเบงเบขเปเบฒเบเบเบตเบชเบญเบเบเบญเบเปเบเบเบเบฒเบ, เปเบเบดเปเบเบเปเบฒเบฅเบญเบเบญเบธเบเบฐเบเบญเบเบเปเบญเบเบเบดเปเบ. เบเบงเบเปเบฎเบปเบฒเปเบเปเบเบฒเบเปเบเปเบเบฝเบเปเบเบตเปเบกเปเบเบตเบกเบเบตเปเบญเบฐเบเบธเบเบฒเบเปเบซเปเปเบเบทเปเบญเบเบเปเบฒเปเบเบตเบเบเบฒเบเบเบปเบเบชเบญเบเปเบเบเบปเบงเบชเบฒเบกเบฒเบเปเบฎเบฑเบเบงเบฝเบเปเบเป:
$ ./mstest8 --port 7010 --lport 9010 --gen 440
เปเบเปเบงเบฅเบฒเบเบตเป, เปเบเบฑเบเปเบเบฑเบเบเบตเปเบเบทเบเบชเบปเปเบเปเบเบซเบฒเบญเบธเบเบฐเบเบญเบ "เปเบฅเบเบฐเปเบ" เบเบงเบเปเบฅเบตเปเบกเบเบฐเบเบดเบเปเบเบเบญเบเปเบเบเบเปเบงเบ TShark, เปเบฅเบฐเบชเบฝเบเบขเปเบฒเบเบเปเปเปเบเบทเปเบญเบเบเบฐเปเบเปเบเบดเบเบเบฒเบเบฅเปเบฒเปเบเบเบเบญเบกเบเบดเบงเปเบเบต.
เบเปเบฒเบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเปเบเบตเบเบเบถเปเบเบเบฒเบกเบเบตเปเบเบฝเบ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบงเบเปเบฎเบปเบฒเปเบฅเบตเปเบกเบเบปเปเบเบชเปเบฒเปเบเบปเบฒเบเบตเบชเบญเบเบเบญเบเปเบเบเบเบฒเบ, เปเบเปเบเปเปเบกเบตเบฅเบฐเบซเบฑเบเปเบฅเบฐเบเบฒเบเปเบเปเบเบฝเบ "โgen 440". เปเบเบเบฑเบเบเบธเบเบฑเบเบเปเบฒเบเบเบฐเบซเบฅเบดเปเบเบเบปเบเบเบฒเบเบเบญเบเปเบเบทเปเบญเบเบเปเบฒเปเบเบตเบเปเบเบเปเบฒ. เบซเบผเบฑเบเบเบฒเบเบเบตเป, เบเปเบฒเบเบชเบฒเบกเบฒเบเบชเปเบฒเบเบชเบดเปเบเบฅเบปเบเบเบงเบเปเบเบปเปเบฒเปเบเปเบเปเบกเปเบเบฃเปเบเบเปเบเป; เบเปเบฒเบเบเบงเบเปเบเปเบเบดเบเบชเบฝเบเบเบตเปเบชเบญเบเบเปเบญเบเบเบฑเบเบขเบนเปเปเบเบฅเปเบฒเปเบเบเบซเบผเบทเบซเบนเบเบฑเบ. เบเบงเบฒเบกเบเบทเปเบเปเบเบฑเปเบเบเบญเบเบเบปเบเปเบญเบเบญเบฒเบเปเบเบตเบเบเบถเปเบเปเบเป; เบเบดเบเบชเบฝเบเบฅเบณเปเบเบเบฅเบปเบ เปเบฅเปเบงเปเบญเบฑเบเปเบเบฑเบเบเบฐเบซเบฒเบเปเบ.
เบเปเบฒเบเปเบฒเบเปเบฅเปเบเบกเบฑเบเบขเบนเปเปเบเบชเบญเบเบเบญเบกเบเบดเบงเปเบเบตเปเบฅเบฐเบเปเปเบชเบฑเบเบชเบปเบเบเปเบฝเบงเบเบฑเบเบเบตเปเบขเบนเป IP, เบเบปเบเปเบเปเบฎเบฑเบเบเบฝเบงเบเบฑเบเบฅเปเบเปเบฒเบเปเบฒเบ - เบเบฒเบเบชเบทเปเบชเบฒเบเบชเบฝเบเบเบตเปเบกเบตเบเบธเบเบเบฐเบเบฒเบเบเบตเบเบตเบเบญเบเบชเบญเบเบเบฒเบ.
เปเบเบเบปเบเบเบงเบฒเบกเบเปเปเปเบเบเบงเบเปเบฎเบปเบฒเบเบฐเบฎเบฝเบเบฎเบนเปเบงเบดเบเบตเบเบฒเบเบเบฝเบเบเบปเบงเบเบญเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบญเบ - plugins, เบเปเบเบญเบเปเบเบเบฑเบเบเบฑเบเบชเบฐเบเบตเป, เบเปเบฒเบเบเบฐเบชเบฒเบกเบฒเบเบเปเบฒเปเบเป media streamer เบเปเปเบเบฝเบเปเบเปเบชเปเบฒเบฅเบฑเบเบชเบฝเบเปเบฅเบฐเบงเบดเบเบตเปเบญ, เปเบเปเบเบฑเบเบขเบนเปเปเบเบเบฒเบเบเบทเปเบเบเบตเปเบชเบฐเปเบเบฒเบฐเบญเบทเปเบเป.
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com