ΠΠ°ΡΠ΅ΡΠΈΡΠ°Π»ΠΎΡ Π½Π° ΡΡΠ°ΡΠΈΡΠ°ΡΠ° Π΅ ΠΏΡΠ΅Π·Π΅ΠΌΠ΅Π½ ΠΎΠ΄ ΠΌΠΎΠ΅ΡΠΎ
ΠΡΠ΅Π½Π΅ΡΡΠ²Π°ΡΠ΅ Π°ΡΠ΄ΠΈΠΎ ΡΠΈΠ³Π½Π°Π» ΠΏΡΠ΅ΠΊΡ 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 ΠΏΠΎΡΠΎΠΊ.
ΠΠΎ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΡΡΠ°ΡΠΈΡΠ° ΡΠ΅ ΡΠ° ΠΏΠΎΠ΄Π΅Π»ΠΈΠΌΠ΅ ΠΎΠ²Π°Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° Π½Π° Π΄Π²Π΅ Π½Π΅Π·Π°Π²ΠΈΡΠ½ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ - ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊ ΠΈ ΠΏΡΠ΅Π΄Π°Π²Π°ΡΠ΅Π» ΠΈ ΡΠ΅ Π³ΠΈ ΡΡΠ°ΡΡΡΠ²Π°ΠΌΠ΅ Π²ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΠΈ. ΠΠΎ ΠΈΡΡΠΎ Π²ΡΠ΅ΠΌΠ΅, ΡΠ΅ Π½Π°ΡΡΠΈΠΌΠ΅ ΠΊΠ°ΠΊΠΎ Π΄Π° Π³ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ RTP ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° TShark.
ΠΠ·Π²ΠΎΡ: www.habr.com