Mediastreamer2 VoIP хөдөлгүүртэй танилцаж байна. 1-р хэсэг

Нийтлэлийн материалыг миний нийтлэлээс авсан болно zen суваг.

Танилцуулга

Энэ нийтлэл нь Mediastreamer2 хөдөлгүүрийг ашиглан бодит цагийн медиа боловсруулах тухай цуврал нийтлэлийн эхлэл юм. Танилцуулга нь Линукс терминал дээр ажиллах, Си хэл дээр програмчлах хамгийн бага ур чадварыг багтаана.

Mediastreamer2 бол алдартай нээлттэй эхийн програм хангамжийн voip утасны төслийн ард байгаа VoIP хөдөлгүүр юм. Линфон. Linphone Mediastreamer2 нь дуу, видеотой холбоотой бүх функцийг хэрэгжүүлдэг. Хөдөлгүүрийн онцлогуудын дэлгэрэнгүй жагсаалтыг энэ Mediastreamer хуудаснаас харж болно. Эх код энд байна: GitLab.

Цаашид текстэнд тав тухтай байлгах үүднээс Mediastreamer2 гэсэн үгийн оронд бид түүний орос тэмдэглэгээг ашиглана: "media streamer".

Бүтээсэн түүх нь бүрэн тодорхой бус боловч эх кодоос нь харахад өмнө нь номын санг ашиглаж байжээ Глиб, энэ нь холын харилцаатай байж болзошгүйг сануулж байгаа юм шиг GStreamer. Үүнтэй харьцуулахад медиа дамжуулагч илүү хөнгөн харагдаж байна. Linphone-ийн анхны хувилбар 2001 онд гарсан тул одоогоор медиа дамжуулагч бараг 20 жилийн турш оршин тогтнож, хөгжиж байна.

Медиа дамжуулагчийн гол цөм нь "Өгөгдлийн урсгал" (өгөгдлийн урсгал) гэж нэрлэгддэг архитектур юм. Ийм архитектурын жишээг доорх зурагт үзүүлэв.

Mediastreamer2 VoIP хөдөлгүүртэй танилцаж байна. 1-р хэсэг

Энэхүү архитектурт өгөгдөл боловсруулах алгоритмыг програмын кодоор бус, харин дурын дарааллаар байрлуулж болох функцүүдийг холбох схем (график) -аар тодорхойлогддог. Эдгээр функцийг шүүлтүүр гэж нэрлэдэг.

Энэхүү архитектур нь VoIP утасны RTP траффик боловсруулах, дамжуулах схемд холбогдсон шүүлтүүрийн багц хэлбэрээр медиа боловсруулах функцийг хэрэгжүүлэх боломжийг олгодог.

Шүүлтүүрийг дурын схемд нэгтгэх чадвар, шинэ шүүлтүүрийг хялбархан хөгжүүлэх, медиа дамжуулагчийг бие даасан тусдаа номын сан болгон хэрэгжүүлэх нь бусад төслүүдэд ашиглах боломжийг олгодог. Нэмж дурдахад төсөл нь VoIP талбарт байж болно, учир нь өөрөө хийсэн шүүлтүүрийг нэмж оруулах боломжтой.

Анхдагчаар нийлүүлсэн шүүлтүүрийн номын сан нь нэлээд баялаг бөгөөд аль хэдийн дурьдсанчлан бидний дизайны шүүлтүүрээр өргөтгөх боломжтой. Гэхдээ эхлээд медиа дамжуулагчтай хамт ирдэг бэлэн шүүлтүүрүүдийг тайлбарлая. Энд тэдний жагсаалт байна:

Дууны шүүлтүүрүүд

Аудио бичлэг хийх, тоглуулах

  • Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
  • Андройдын эх дуу (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 аудио нэгж (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 дуу (Windows)

Аудио кодчилол/код тайлах

  • G.711 хууль: 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
  • Дахин жишээлэгч: MS_RESAMPLE
  • Дуу мэдрэгч: MS_TONE_DETECTOR
  • Дууны хяналт ба дохионы түвшний хэмжилт: MS_VOLUME

Видео шүүлтүүрүүд

Видео бичлэг хийх, тоглуулах

  • Android зураг авалт
  • Android тоглуулах
  • AV Foundation capture (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
  • Линукс (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
  • Теора: 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 дээр суулгасан

Одоо бид медиа дамжуулагчийг компьютер дээр суулгаж, түүгээр анхны програмаа бүтээх болно.

Ubuntu үйлдлийн системтэй компьютер эсвэл виртуал машин дээр Mediastremer2-г суулгах нь тусгай ур чадвар шаарддаггүй. Энд болон доор "$" тэмдэг нь тушаал оруулах бүрхүүлийн хүлээх мөрийг илэрхийлнэ. Тэдгээр. Хэрэв жагсаалтад та мөрийн эхэнд энэ тэмдгийг харж байгаа бол энэ нь терминал дээр гүйцэтгэх тушаалуудыг харуулсан мөр юм.

Энэ нийтлэлд дурдсан алхмуудыг хийх явцад таны компьютер интернетэд холбогдох боломжтой гэж үзэж байна.

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.

Туршилтын програмыг бий болгох, ажиллуулах

Бид бүтээдэг Нүүр хуудас Манай сургалтын төслүүдэд зориулсан хавтас, үүнийг нэрлэе хичээлийн:

$ 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