เปเบญเบเบฐเบชเบฒเบเบเบญเบเบเบปเบเบเบงเบฒเบกเปเบกเปเบเปเบญเบปเบฒเบกเบฒเบเบฒเบเบเบญเบเบเปเบญเบ
เบเบฒเบเบชเบปเปเบเบชเบฑเบเบเบฒเบเบชเบฝเบเบเปเบฒเบเบเบฐเปเบช 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