ΠŸΡ€ΠΎΡƒΡ‡Π²Π°Π½Π΅ Π½Π° VoIP двигатСля Π½Π° Mediastreamer2. част 1

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΡŠΡ‚ Π½Π° статията Π΅ Π²Π·Π΅Ρ‚ ΠΎΡ‚ моя Π΄Π·Π΅Π½ ΠΊΠ°Π½Π°Π».

въвСдСниС

Π’Π°Π·ΠΈ статия Π΅ Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° ΠΏΠΎΡ€Π΅Π΄ΠΈΡ†Π° ΠΎΡ‚ статии Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° мултимСдия Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° двигатСля Mediastreamer2. ΠŸΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ†ΠΈΡΡ‚Π° Π²ΠΊΠ»ΡŽΡ‡Π²Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈ умСния Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Linux Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π½Π° Π΅Π·ΠΈΠΊΠ° C.

Mediastreamer2 Π΅ VoIP ΠΌΠ°ΡˆΠΈΠ½Π°Ρ‚Π° Π·Π°Π΄ популярния ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π·Π° VoIP Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄. Π›ΠΈΠ½Ρ„ΠΎΠ½. Π’ Linphone Mediastreamer2 изпълнява всички Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ със Π·Π²ΡƒΠΊ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π΅Π½ списък с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° двигатСля ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π²ΠΈΠ΄ΠΈ Π½Π° Ρ‚Π°Π·ΠΈ страница Π½Π° Mediastreamer. Π˜Π·Ρ…ΠΎΠ΄Π½ΠΈΡΡ‚ ΠΊΠΎΠ΄ Π΅ Ρ‚ΡƒΠΊ: GitLab.

По-Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ Π² тСкста, Π·Π° удобство, вмСсто Π΄ΡƒΠΌΠ°Ρ‚Π° Mediastreamer2 Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ руската ΠΉ нотация: β€žmedia streamerβ€œ.

Π˜ΡΡ‚ΠΎΡ€ΠΈΡΡ‚Π° Π½Π° ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ ΠΌΡƒ Π½Π΅ Π΅ напълно ясна, Π½ΠΎ съдСйки ΠΏΠΎ изходния ΠΊΠΎΠ΄, ΠΏΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π° Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π»Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π“Π»ΠΈΠ±, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΊΠ°Ρ‚ΠΎ Ρ‡Π΅ Π»ΠΈ Π½Π°ΠΌΠ΅ΠΊΠ²Π° Π·Π° възмоТна Π΄Π°Π»Π΅Ρ‡Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ° с GStreamer. Π’ сравнСниС с ΠΊΠΎΠ΅Ρ‚ΠΎ мСдийният стримСр ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΠΎ-Π»Π΅ΠΊ. ΠŸΡŠΡ€Π²Π°Ρ‚Π° вСрсия Π½Π° Linphone сС появи ΠΏΡ€Π΅Π· 2001 Π³., Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° мСдийният стримСр ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π° ΠΈ сС Ρ€Π°Π·Π²ΠΈΠ²Π° ΠΏΠΎΡ‡Ρ‚ΠΈ 20 Π³ΠΎΠ΄ΠΈΠ½ΠΈ.

Π’ основата Π½Π° мСдийния стримСр Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°, Π½Π°Ρ€Π΅Ρ‡Π΅Π½Π° "ΠŸΠΎΡ‚ΠΎΠΊ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ" (ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ). ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° Ρ‚Π°ΠΊΠ°Π²Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½Π° Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ‚Π° ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ.

ΠŸΡ€ΠΎΡƒΡ‡Π²Π°Π½Π΅ Π½Π° VoIP двигатСля Π½Π° Mediastreamer2. част 1

Π’ Ρ‚Π°Π·ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΡŠΡ‚ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ сС опрСдСля Π½Π΅ ΠΎΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Π½ ΠΊΠΎΠ΄, Π° ΠΎΡ‚ схСма (Π³Ρ€Π°Ρ„ΠΈΠΊΠ°) Π·Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΏΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ΠΈ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ Ρ€Π΅Π΄. Π’Π΅Π·ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сС Π½Π°Ρ€ΠΈΡ‡Π°Ρ‚ ​​филтри.

Π’Π°Π·ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° ΠΏΡ€Π°Π²ΠΈ възмоТно Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° функционалността Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° мултимСдия ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈ, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ към схСмата Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅ Π½Π° Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° Π½Π° VoIP Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ RTP.

Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ схСми, простото Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½Π΅ Π½Π° Π½ΠΎΠ²ΠΈ Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈ, внСдряванСто Π½Π° мСдийния стримСр ΠΊΠ°Ρ‚ΠΎ нСзависима ΠΎΡ‚Π΄Π΅Π»Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, позволяват ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ ΠΌΡƒ Π² Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ. ОсвСн Ρ‚ΠΎΠ²Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π² областта Π½Π° VoIP, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΈΠΌΠ° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° добавянС Π½Π° ΡΠΎΠ±ΡΡ‚Π²Π΅Π½ΠΎΡ€ΡŠΡ‡Π½ΠΎ Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΈ Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈ.

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° с Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈ, прСдоставСна ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, Π΅ доста Π±ΠΎΠ³Π°Ρ‚Π° ΠΈ, ΠΊΠ°ΠΊΡ‚ΠΎ Π²Π΅Ρ‡Π΅ спомСнахмС, ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½Π° с Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈ ΠΏΠΎ наш собствСн Π΄ΠΈΠ·Π°ΠΉΠ½. Но ΠΏΡŠΡ€Π²ΠΎ, Π½Π΅ΠΊΠ° опишСм Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚Π΅ Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ΄Π²Π°Ρ‚ с мСдийния стримСр. Π•Ρ‚ΠΎ тСхния списък:

Π—Π²ΡƒΠΊΠΎΠ²ΠΈ Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈ

ЗаснСманС ΠΈ Π²ΡŠΠ·ΠΏΡ€ΠΎΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Π·Π²ΡƒΠΊ

  • Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
  • Android СстСствСн Π·Π²ΡƒΠΊ (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
  • Услуга Π·Π° Π°ΡƒΠ΄ΠΈΠΎ опашка (Mac OS X): MS_AQ_WRITE, MS_AQ_READ
  • Услуга Π·Π° Π°ΡƒΠ΄ΠΈΠΎ ΠΌΠΎΠ΄ΡƒΠ» (Mac OS X)
  • Π˜Π·ΠΊΡƒΡΡ‚Π²Π° (Linux): MS_ARTS_WRITE, MS_ARTS_READ
  • DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
  • Π€Π°ΠΉΠ»ΠΎΠ² ΠΏΠ»Π΅ΠΉΡŠΡ€ (raw/wav/pcap Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅) (Linux): MS_FILE_PLAYER
  • Π€Π°ΠΉΠ»ΠΎΠ² ΠΏΠ»Π΅ΠΉΡŠΡ€ (raw/wav Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅) (Windows): MS_WINSND_READ
  • Запис във Ρ„Π°ΠΉΠ» (wav Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅) (Linux): MS_FILE_REC
  • Запис във Ρ„Π°ΠΉΠ» (wav Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅) (Windows): MS_WINSND_WRITE
  • Mac Audio Unit (Mac OS X)
  • MME (Windows)
  • OSS (Linux): MS_OSS_WRITE, MS_OSS_READ
  • PortAudio (Mac OS X)
  • PulseAudio (Linux): MS_PULSE_WRITE, MS_PULSE_READ
  • Windows Sound (Windows)

Аудио ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅/Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅

  • G.711 a-Π·Π°ΠΊΠΎΠ½: MS_ALAW_DEC, MS_ALAW_ENC
  • G.711 Β΅-Π·Π°ΠΊΠΎΠ½: MS_ULAW_DEC, MS_ULAW_ENC
  • G.722: MS_G722_DEC, MS_G722_ENC
  • G.726: MS_G726_32_ENC, MS_G726_24_ENC, MS_G726_16_ENC
  • GSM: MS_GSM_DEC, MS_GSM_ENC
  • Π›ΠΈΠ½Π΅Π΅Π½ PCM: MS_L16_ENC, MS_L16_DEC
  • Π“ΠΎΠ²ΠΎΡ€: MS_SPEEX_ENC, MS_SPEEX_DEC

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π·Π²ΡƒΠΊΠ°

  • ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ Π½Π° ΠΊΠ°Π½Π°Π» (ΠΌΠΎΠ½ΠΎ->стСрСо, стСрСо->ΠΌΠΎΠ½ΠΎ): MS_CHANNEL_ADAPTER
  • ΠšΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΡ: MS_CONF
  • DTMF Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€: MS_DTMF_GEN
  • ΠžΡ‚ΠΌΡΠ½Π° Π½Π° Π΅Ρ…ΠΎΡ‚ΠΎ (speex): MS_SPEEX_EC
  • Π•ΠΊΠ²Π°Π»Π°ΠΉΠ·Π΅Ρ€: MS_EQUALIZER
  • ΠœΠΈΠΊΡΠ΅Ρ€: MS_MIXER
  • ΠšΠΎΠΌΠΏΠ΅Π½ΡΠ°Ρ‚ΠΎΡ€ Π·Π° Π·Π°Π³ΡƒΠ±Π° Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ (PLC): MS_GENERIC_PLC
  • Resampler: MS_RESAMPLE
  • Π’ΠΎΠ½ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€: MS_TONE_DETECTOR
  • ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ» Π½Π° силата Π½Π° Π·Π²ΡƒΠΊΠ° ΠΈ ΠΈΠ·ΠΌΠ΅Ρ€Π²Π°Π½Π΅ Π½Π° Π½ΠΈΠ²ΠΎΡ‚ΠΎ Π½Π° сигнала: MS_VOLUME

Π’ΠΈΠ΄Π΅ΠΎ Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈ

ЗаснСманС ΠΈ Π²ΡŠΠ·ΠΏΡ€ΠΎΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Π²ΠΈΠ΄Π΅ΠΎ

  • Π°Π½Π΄Ρ€ΠΎΠΈΠ΄ заснСманС
  • Π²ΡŠΠ·ΠΏΡ€ΠΎΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° android
  • ЗаснСманС Π½Π° AV Foundation (iOS)
  • Π’ΡŠΠ·ΠΏΡ€ΠΎΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° AV Foundation (iOS)
  • DirectShow Capture (Windows)
  • Π’ΡŠΠ·ΠΏΡ€ΠΎΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° DrawDib (Windows)
  • Π’ΡŠΠ½ΡˆΠ½ΠΎ Π²ΡŠΠ·ΠΏΡ€ΠΎΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ - Π˜Π·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° Π²ΠΈΠ΄Π΅ΠΎ към горния слой
  • GLX Π²ΡŠΠ·ΠΏΡ€ΠΎΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ (Linux): MS_GLXVIDEO
  • Mire - Π‘ΠΈΠ½Ρ‚Π΅Ρ‚ΠΈΡ‡Π½Π° Π΄Π²ΠΈΠΆΠ΅Ρ‰Π° сС ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π°: MS_MIRE
  • OpenGL Π²ΡŠΠ·ΠΏΡ€ΠΎΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ (Mac OS X)
  • Π’ΡŠΠ·ΠΏΡ€ΠΎΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° OpenGL ES2 (Android)
  • Quicktime Capture (Mac OS X)
  • SDL Π²ΡŠΠ·ΠΏΡ€ΠΎΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅: MS_SDL_OUT
  • ИзвСТданС Π½Π° статично ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅: MS_STATIC_IMAGE
  • Π’ΠΈΠ΄Π΅ΠΎ Π·Π° заснСманС Π½Π° Linux (V4L) (Linux): MS_V4L
  • Π’ΠΈΠ΄Π΅ΠΎ Π·Π° заснСманС Π½Π° Linux 2 (V4L2) (Linux): MS_V4L2_CAPTURE
  • Video4windows (DirectShow) заснСманС (Windows)
  • Video4windows (DirectShow) заснСманС (Windows CE)
  • ЗаснСманС Π½Π° Π²ΠΈΠ΄Π΅ΠΎ Π·Π° Windows (vfw) (Windows)
  • XV Π²ΡŠΠ·ΠΏΡ€ΠΎΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ (Linux)

Π’ΠΈΠ΄Π΅ΠΎ ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅/Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅

  • H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, сняг: MS_MJPEG_DEC, MS_H263_ENC, MS_H263_DEC
  • H.264 (само Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€): MS_H264_DEC
  • Theora: MS_THEORA_ENC, MS_THEORA_DEC
  • VP8: MS_VP8_ENC, MS_VP8_DEC

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π²ΠΈΠ΄Π΅ΠΎ

  • jpeg ΠΌΠΎΠΌΠ΅Π½Ρ‚Π½Π° снимка
  • ΠšΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΎΡ€ Π½Π° пиксСлСн Ρ„ΠΎΡ€ΠΌΠ°Ρ‚: MS_PIX_CONV
  • ΠŸΡ€Π΅ΠΎΡ€Π°Π·ΠΌΠ΅Ρ€ΠΈΡ‚Π΅Π»
  • Π”Ρ€ΡƒΠ³ΠΈ Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈ
  • ОбмСн Π½Π° Π±Π»ΠΎΠΊΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ нишки: MS_ITC_SOURCE, MS_ITC_SINK
  • Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π±Π»ΠΎΠΊΠΎΠ²Π΅ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ мноТСство Π²Ρ…ΠΎΠ΄ΠΎΠ²Π΅ към Π΅Π΄ΠΈΠ½ ΠΈΠ·Ρ…ΠΎΠ΄: MS_JOIN
  • RTP ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅/ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅: MS_RTP_SEND, MS_RTP_RECV
  • ΠšΠΎΠΏΠΈΡ€Π°Π½Π΅ Π½Π° Π²Ρ…ΠΎΠ΄Π½ΠΈ Π΄Π°Π½Π½ΠΈ към мноТСство ΠΈΠ·Ρ…ΠΎΠ΄ΠΈ: MS_TEE
  • ΠŸΡ€Π΅ΠΊΡ€Π°Ρ‚Π΅Π½ΠΎ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅: MS_VOID_SINK
  • ΠœΡŠΠ»Ρ‡Π°Π½ΠΈΠ΅ Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: MS_VOID_SOURCE

плъгини

Π—Π²ΡƒΠΊΠΎΠ²ΠΈ Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈ

  • AMR-NB Π΅Π½ΠΊΠΎΠ΄Π΅Ρ€/Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€
  • G.729 Π΅Π½ΠΊΠΎΠ΄Π΅Ρ€/Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€
  • iLBC Π΅Π½ΠΊΠΎΠ΄Π΅Ρ€/Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€
  • SILK Π΅Π½ΠΊΠΎΠ΄Π΅Ρ€/Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€

    Π’ΠΈΠ΄Π΅ΠΎ Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈ

  • H.264 софтуСрСн Π΅Π½ΠΊΠΎΠ΄Π΅Ρ€
  • H.264 V4L2 Ρ…Π°Ρ€Π΄ΡƒΠ΅Ρ€Π½ΠΎ ускорСн Π΅Π½ΠΊΠΎΠ΄Π΅Ρ€/Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€

Π‘Π»Π΅Π΄ ΠΊΡ€Π°Ρ‚ΠΊΠΎ описаниС Π½Π° Ρ„ΠΈΠ»Ρ‚ΡŠΡ€Π° сС ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΈΠΏΠ°, ΠΊΠΎΠΉΡ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΡ€ΠΈ създаванС Π½Π° Π½ΠΎΠ² СкзСмпляр Π½Π° Ρ‚ΠΎΠ·ΠΈ Ρ„ΠΈΠ»Ρ‚ΡŠΡ€. По-Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ Ρ‰Π΅ сС ΠΏΠΎΠ·ΠΎΠ²Π°Π²Π°ΠΌΠ΅ Π½Π° Ρ‚ΠΎΠ·ΠΈ списък.

Π˜Π½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ ΠΏΠΎΠ΄ Linux Ubuntu

Π‘Π΅Π³Π° Ρ‰Π΅ инсталирамС мСдийния стримСр Π½Π° ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€Π° ΠΈ Ρ‰Π΅ създадСм ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ си ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с Π½Π΅Π³ΠΎ.

Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Mediastremer2 Π½Π° ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€ ΠΈΠ»ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰Π° с Ubuntu, Π½Π΅ изисква Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ спСциални умСния. Π’ΡƒΠΊ ΠΈ ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ ΡΠΈΠΌΠ²ΠΎΠ»ΡŠΡ‚ "$" Ρ‰Π΅ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° ΠΏΠΎΠ΄ΠΊΠ°Π½Π°Ρ‚Π° Π·Π° въвСТданС Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ. Π’Π΅Π·ΠΈ. Π°ΠΊΠΎ Π² списъка Π²ΠΈΠ΄ΠΈΡ‚Π΅ Ρ‚ΠΎΠ·ΠΈ символ Π² Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° Ρ€Π΅Π΄Π°, Ρ‚ΠΎΠ²Π° Π΅ Ρ€Π΅Π΄ΡŠΡ‚, Π² ΠΊΠΎΠΉΡ‚ΠΎ са ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ изпълнСни Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π° сС, Ρ‡Π΅ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΡΡ‚ΡŠΠΏΠΊΠΈΡ‚Π΅ Π² Ρ‚Π°Π·ΠΈ статия Π²Π°ΡˆΠΈΡΡ‚ ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€ ΠΈΠΌΠ° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚.

Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° libmediastremer-dev

Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΉΡ‚Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° ΠΈ Π²ΡŠΠ²Π΅Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°:

$ sudo apt-get update

Π©Π΅ Π±ΡŠΠ΄Π΅Ρ‚Π΅ ΠΏΠΎΠΌΠΎΠ»Π΅Π½ΠΈ Π·Π° ΠΏΠ°Ρ€ΠΎΠ»Π°, Π·Π° Π΄Π° ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, Π²ΡŠΠ²Π΅Π΄Π΅Ρ‚Π΅ я ΠΈ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€ΡŠΡ‚ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Ρ‰Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π° своитС Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° трябва Π΄Π° стартиратС:

$ sudo apt-get install libmediastreamer-dev

НСобходимитС ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π·Π° зависимости ΠΈ самата Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π° ΠΌΠ΅Π΄ΠΈΠ΅Π½ ΡΡ‚Ρ€ΠΈΠΉΠΌΡŠΡ€ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·Ρ‚Π΅Π³Π»Π΅Π½ΠΈ ΠΈ инсталирани Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ.

ΠžΠ±Ρ‰ΠΈΡΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° ΠΈΠ·Ρ‚Π΅Π³Π»Π΅Π½ΠΈΡ‚Π΅ dependency deb ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Ρ‰Π΅ бъдС ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ 35 MB. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ Π·Π° инсталирания ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈ с ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°:

$ dpkg -s libmediastreamer-dev

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π΅Π½ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€:

Package: libmediastreamer-dev
Status: install ok installed
Priority: optional
Section: libdevel
Installed-Size: 244
Maintainer: Ubuntu Developers <[email protected]>
Architecture: amd64
Source: linphone
Version: 3.6.1-2.5
Depends: libmediastreamer-base3 (= 3.6.1-2.5), libortp-dev
Description: Linphone web phone's media library - development files
Linphone is an audio and video internet phone using the SIP protocol. It
has a GTK+ and console interface, includes a large variety of audio and video
codecs, and provides IM features.
.
This package contains the development libraries for handling media operations.
Original-Maintainer: Debian VoIP Team <[email protected]>
Homepage: http://www.linphone.org/

Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½Π΅ Π½Π° инструмСнти Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°

Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°ΠΉΡ‚Π΅ C ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π° ΠΈ ΠΏΡ€ΠΈΠ΄Ρ€ΡƒΠΆΠ°Π²Π°Ρ‰ΠΈΡ‚Π΅ Π³ΠΎ инструмСнти:

$ sudo apt-get install gcc

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ²Π°ΠΌΠ΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π° Ρ‡Ρ€Π΅Π· Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅ Π΄ΠΎ вСрсията Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π°:

$ gcc --version

ΠžΡ‚Π³ΠΎΠ²ΠΎΡ€ΡŠΡ‚ трябва Π΄Π° бъдС Π½Π΅Ρ‰ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ:

gcc (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Π˜Π·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ ΠΈ стартиранС Π½Π° ΠΏΡ€ΠΎΠ±Π½ΠΎΡ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

НиС създавамС Π² Π£ Π΄ΠΎΠΌΠ° ΠΏΠ°ΠΏΠΊΠ° Π·Π° Π½Π°ΡˆΠΈΡ‚Π΅ ΡƒΡ‡Π΅Π±Π½ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, Π½Π΅ΠΊΠ° я Π½Π°Ρ€Π΅Ρ‡Π΅ΠΌ mstutorial:

$ mkdir ~/mstutorial

Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ любимия си тСкстов Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΈ ΡΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ C ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Π½ Ρ„Π°ΠΉΠ», Π½Π°Ρ€Π΅Ρ‡Π΅Π½ mstest.c със слСдното ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅:

#include "stdio.h"
#include <mediastreamer2/mscommon.h>
int main()
{
  ms_init();
  printf ("Mediastreamer is ready.n");
}

Π’ΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π° мСдийния стримСр, ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚Π²Π° ΠΏΠΎΠ·Π΄Ρ€Π°Π² ΠΈ ΠΈΠ·Π»ΠΈΠ·Π°.

Π—Π°ΠΏΠ°Π·Π΅Ρ‚Π΅ Ρ„Π°ΠΉΠ»Π° ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°ΠΉΡ‚Π΅ тСстовото ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°:

$ gcc mstest.c -o mstest `pkg-config mediastreamer --libs --cflags`

Π˜ΠΌΠ°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ линията

`pkg-config mediastreamer --libs --cflags`

ΠΎΠ³Ρ€Π°Π΄Π΅Π½ΠΈ Π² ΠΊΠ°Π²ΠΈΡ‡ΠΊΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ сС Π½Π°ΠΌΠΈΡ€Π°Ρ‚ Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π°Ρ‚Π° Π½Π° ΡΡŠΡ‰ΠΎΡ‚ΠΎ място ΠΊΠ°Ρ‚ΠΎ Π±ΡƒΠΊΠ²Π°Ρ‚Π° "Ё".

Ако Ρ„Π°ΠΉΠ»ΡŠΡ‚ Π½Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Π³Ρ€Π΅ΡˆΠΊΠΈ, Ρ‚ΠΎΠ³Π°Π²Π° слСд компилация Π² дирСкторията Ρ‰Π΅ сС появи Ρ„Π°ΠΉΠ» mstest. Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΌΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π°:

$ ./mstest

Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚ Ρ‰Π΅ бъдС Ρ‚Π°ΠΊΠ°:

ALSA lib conf.c:4738:(snd_config_expand) Unknown parameters 0
ALSA lib control.c:954:(snd_ctl_open_noupdate) Invalid CTL default:0
ortp-warning-Could not attach mixer to card: Invalid argument
ALSA lib conf.c:4738:(snd_config_expand) Unknown parameters 0
ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM default:0
ALSA lib conf.c:4738:(snd_config_expand) Unknown parameters 0
ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM default:0
ortp-warning-Strange, sound card HDA Intel PCH does not seems to be capable of anything, retrying with plughw...
Mediastreamer is ready.

Π’ Ρ‚ΠΎΠ·ΠΈ списък Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π° Π·Π° Π³Ρ€Π΅ΡˆΠΊΠ°, ΠΊΠΎΠΈΡ‚ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° ALSA ΠΏΠΎΠΊΠ°Π·Π²Π°, тя сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π·Π²ΡƒΠΊΠΎΠ²Π°Ρ‚Π° ΠΊΠ°Ρ€Ρ‚Π°. Π‘Π°ΠΌΠΈΡ‚Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ Π½Π° мСдийния стримСр смятат, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π΅ Π½ΠΎΡ€ΠΌΠ°Π»Π½ΠΎ. Π’ Ρ‚ΠΎΠ·ΠΈ случай Π½ΠΈΠ΅ Π½Π΅ΠΎΡ…ΠΎΡ‚Π½ΠΎ сС съгласявамС с тях.

Π‘Π΅Π³Π° всички смС Π³ΠΎΡ‚ΠΎΠ²ΠΈ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ с мСдийния стримСр. Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Ρ…ΠΌΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π·Π° ΠΌΠ΅Π΄ΠΈΠΉΠ½ΠΈ ΡΡ‚Ρ€ΠΈΠΉΠΌΡŠΡ€ΠΈ, инструмСнта Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ ΠΈ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΏΡ€ΠΎΠ±Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ…ΠΌΠ΅, Ρ‡Π΅ инструмСнтитС са ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ΠΈ ΠΈ мСдийният ΡΡ‚Ρ€ΠΈΠΉΠΌΡŠΡ€ сС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ.

БлСдващия Бтатия Ρ‰Π΅ създадСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ сглоби ΠΈ стартира ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° Π°ΡƒΠ΄ΠΈΠΎ сигнал във Π²Π΅Ρ€ΠΈΠ³Π° ΠΎΡ‚ няколко Ρ„ΠΈΠ»Ρ‚ΡŠΡ€Π°.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com