Π˜Π·ΡƒΡ‡Π°Π΅ΠΌ VoIP-Π΄Π²ΠΈΠΆΠΎΠΊ Mediastreamer2. Π§Π°ΡΡ‚ΡŒ 1

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΡΡ‚Π°Ρ‚ΡŒΠΈ взят с ΠΌΠΎΠ΅Π³ΠΎ Π΄Π·Π΅Π½-ΠΊΠ°Π½Π°Π»Π°.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ являСтся Π½Π°Ρ‡Π°Π»ΠΎΠΌ сСрии статСй ΠΎ Ρ€Π΅Π°Π»Ρ‚Π°ΠΉΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΌΠ΅Π΄ΠΈΠ°Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π²ΠΈΠΆΠΊΠ° Mediastreamer2. Π’ Ρ…ΠΎΠ΄Π΅ излоТСния Π±ΡƒΠ΄ΡƒΡ‚ задСйствованы ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ Π½Π°Π²Ρ‹ΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅ Linux ΠΈ программирования Π½Π° языкС Π‘ΠΈ.

Mediastreamer2 это VoIP-Π΄Π²ΠΈΠΆΠΎΠΊ, Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΉ Π² основС популярного open-source ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ voip-Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π° Linphone. Π’ Linphone Mediastreamer2 Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ связанныС со Π·Π²ΡƒΠΊΠΎΠΌ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ список возмоТностСй Π΄Π²ΠΈΠΆΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π½Π° этой страницС Mediastreamer. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ находится здСсь: GitLab.

Π”Π°Π»Π΅Π΅ Π² тСкстС, для удобства, вмСсто слова Mediastreamer2 Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ€ΡƒΡΡΠΊΡƒΡŽ Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ: «ΠΌΠ΅Π΄ΠΈΠ°ΡΡ‚Ρ€ΠΈΠΌΠ΅Ρ€».

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ Π΅Π³ΠΎ создания Π½Π΅ совсСм ясна, Π½ΠΎ судя ΠΏΠΎ Π΅Π³ΠΎ исходному ΠΊΠΎΠ΄Ρƒ, ΠΎΠ½ Ρ€Π°Π½Π΅Π΅ использовал Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Glib, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΊ Π±Ρ‹ Π½Π°ΠΌΠ΅ΠΊΠ°Π΅Ρ‚ Π½Π°ΠΌ, Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ дальнСС родство с GStreamer. Π’ сравнСнии с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ мСдиастримСр выглядит Π±ΠΎΠ»Π΅Π΅ лСгковСсным. ΠŸΠ΅Ρ€Π²Π°Ρ вСрсия Linphone появилась Π² 2001 Π³ΠΎΠ΄Ρƒ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π² настоящий ΠΌΠΎΠΌΠ΅Π½Ρ‚ мСдиастримСр сущСствуСт ΠΈ развиваСтся Π±Π΅Π· ΠΌΠ°Π»ΠΎΠ³ΠΎ 20 Π»Π΅Ρ‚.

Π’ основС мСдиастримСра Π»Π΅ΠΆΠΈΡ‚ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° называСмая «Data flow» (ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ…). ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ Π½Π° рисункС Π½ΠΈΠΆΠ΅.

Π˜Π·ΡƒΡ‡Π°Π΅ΠΌ VoIP-Π΄Π²ΠΈΠΆΠΎΠΊ Mediastreamer2. Π§Π°ΡΡ‚ΡŒ 1

Π’ этой Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… задаСтся Π½Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, Π° схСмой (Π³Ρ€Π°Ρ„ΠΎΠΌ) соСдинСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ Π² любом порядкС. Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°ΠΌΠΈ.

Вакая Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° позволяСт Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΌΠ΅Π΄ΠΈΠ° Π² Π²ΠΈΠ΄Π΅ Π½Π°Π±ΠΎΡ€Π° Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ², соСдинСнных Π² схСму ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ RTP-Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° VoIP-Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ схСмы, простая Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ², рСализация мСдиастримСра Π² Π²ΠΈΠ΄Π΅ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…. ΠŸΡ€ΠΈΡ‡Ρ‘ΠΌ, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π² области VoIP, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ имССтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ сдСланныС своими Ρ€ΡƒΠΊΠ°ΠΌΠΈ.

ΠŸΠΎΡΡ‚Π°Π²Π»ΡΠ΅ΠΌΠ°Ρ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² достаточно Π±ΠΎΠ³Π°Ρ‚Π° ΠΈ ΠΊΠ°ΠΊ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ сказано, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π° Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°ΠΌΠΈ собствСнной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Но сначала опишСм Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ вмСстС с мСдиастримСром. Π’ΠΎΡ‚ ΠΈΡ… список:

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

Π—Π°Ρ…Π²Π°Ρ‚ ΠΈ воспроизвСдСниС Π·Π²ΡƒΠΊΠ°

  • Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
  • Android native sound (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
  • Audio Queue Service (Mac OS X): MS_AQ_WRITE, MS_AQ_READ
  • Audio Unit Service (Mac OS X)
  • Arts (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
  • ЛинСйная ИКМ: MS_L16_ENC, MS_L16_DEC
  • Speex: 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
  • РСсСмплСр: MS_RESAMPLE
  • Π”Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€ Ρ‚ΠΎΠ½ΠΎΠ²: MS_TONE_DETECTOR
  • Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π³Ρ€ΠΎΠΌΠΊΠΎΡΡ‚ΡŒΡŽ ΠΈ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ уровня сигнала: MS_VOLUME

Π€ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ Π²ΠΈΠ΄Π΅ΠΎ

Π—Π°Ρ…Π²Π°Ρ‚ ΠΈ воспроизвСдСниС Π²ΠΈΠ΄Π΅ΠΎ

  • Android Π·Π°Ρ…Π²Π°Ρ‚
  • Android воспроизвСдСниС
  • AV Foundation Π·Π°Ρ…Π²Π°Ρ‚ (iOS)
  • AV Foundation воспроизвСдСниС (iOS)
  • DirectShow Π·Π°Ρ…Π²Π°Ρ‚ (Windows)
  • DrawDib воспроизвСдСниС (Windows)
  • External воспроизвСдСниС β€” ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° Π²ΠΈΠ΄Π΅ΠΎ Π½Π° Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ
  • GLX воспроизвСдСниС (Linux): MS_GLXVIDEO
  • Mire β€” Synthetic moving picture: MS_MIRE
  • OpenGL воспроизвСдСниС (Mac OS X)
  • OpenGL ES2 воспроизвСдСниС (Android)
  • Quicktime Π·Π°Ρ…Π²Π°Ρ‚ (Mac OS X)
  • SDL воспроизвСдСниС: MS_SDL_OUT
  • Π’Ρ‹Π²ΠΎΠ΄ статичСских ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ: MS_STATIC_IMAGE
  • Video For Linux (V4L) Π·Π°Ρ…Π²Π°Ρ‚ (Linux): MS_V4L
  • Video For Linux 2 (V4L2) Π·Π°Ρ…Π²Π°Ρ‚ (Linux): MS_V4L2_CAPTURE
  • Video4windows (DirectShow) Π·Π°Ρ…Π²Π°Ρ‚ (Windows)
  • Video4windows (DirectShow) Π·Π°Ρ…Π²Π°Ρ‚ (Windows CE)
  • Video For Windows (vfw) Π·Π°Ρ…Π²Π°Ρ‚ (Windows)
  • XV воспроизвСдСниС (Linux)

ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅/Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΠΈΠ΄Π΅ΠΎ

  • H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, Snow: 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 snapshot
  • Pixel format converter: 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 Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ особых Π½Π°Π²Ρ‹ΠΊΠΎΠ². Π—Π΄Π΅ΡΡŒ ΠΈ Π΄Π°Π»Π΅Π΅ символом «$» Π±ΡƒΠ΄Π΅ΠΌ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ shell для Π²Π²ΠΎΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄. Π’.Π΅. Ссли Π² листингС Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ этот символ Π² Π½Π°Ρ‡Π°Π»Π΅ строки, Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚ это строка Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ для выполнСния Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Π²ΠΎ врСмя выполнСния дСйствий описанных Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅, ваш ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ΠΈΠΌΠ΅Π΅Ρ‚ доступ ΠΊ сСти Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚.

Установка ΠΏΠ°ΠΊΠ΅Ρ‚Π° libmediastremer-dev

ЗапускаСм Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» ΠΈ Π½Π°Π±ΠΈΡ€Π°Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

$ sudo apt-get update

Π‘ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ Π½Π° внСсСниС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Π΅Π³ΠΎ ΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ свои Π±Π°Π·Ρ‹. ПослС этого Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ:

$ sudo apt-get install libmediastreamer-dev

Π‘ΡƒΠ΄ΡƒΡ‚ автоматичСски скачаны ΠΈ установлСны Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ зависимостСй ΠΈ сама Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° мСдиастримСра.

ΠžΠ±Ρ‰ΠΈΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ скачанных deb-ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² зависимостСй составит ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ 35 ΠœΠ‘Π°ΠΉΡ‚. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ ΠΎΠ± установлСнном ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

$ 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/

Установка инструмСнтов Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

УстанавливаСм компилятор Π‘ΠΈ ΠΈ ΡΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π΅ΠΌΡƒ инструмСнты:

$ 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.

Π‘Π±ΠΎΡ€ΠΊΠ° ΠΈ запуск ΠΏΡ€ΠΎΠ±Π½ΠΎΠ³ΠΎ прилоТСния

Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π² home ΠΏΠ°ΠΏΠΊΡƒ для Π½Π°ΡˆΠΈΡ… ΡƒΡ‡Π΅Π±Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Ρ‘ mstutorial:

$ mkdir ~/mstutorial

Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ вашим Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΌ тСкстовым Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ ΠΈ создайтС Ρ„Π°ΠΉΠ» Π‘ΠΈ-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с ΠΈΠΌΠ΅Π½Π΅ΠΌ 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, ΠΎΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для управлСния Π·Π²ΡƒΠΊΠΎΠ²ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚ΠΎΠΉ. Π‘Π°ΠΌΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ мСдиастримСра ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ это Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ. ΠœΡ‹ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΏΠΎ Π½Π΅Π²ΠΎΠ»Π΅ согласимся с Π½ΠΈΠΌΠΈ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас всС Π³ΠΎΡ‚ΠΎΠ²ΠΎ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с мСдиастримСром. ΠœΡ‹ установили Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ мСдиастримСра, инструмСнт компиляции ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΎΠ±Π½ΠΎΠ³ΠΎ прилоТСния ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ инструмСнты настроСны, Π° мСдиастримСр ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ инициализируСтся.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ создадим ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ собСрСт ΠΈ запустит ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π·Π²ΡƒΠΊΠΎΠ²ΠΎΠ³ΠΎ сигнала Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ².

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