Աստղի նյութերը վերցված են իմ .
Ներածություն
Այս հոդվածը սկսում է հոդվածների շարք, որը վերաբերում է իրական ժամանակի մեդիա տվյալների մշակմանը Mediastreamer2 շարժիչի միջոցով: Ներկայացման ընթացքում անհրաժեշտ կլինի նվազագույն գիտելիքներ Linux տերմինալում աշխատելու և C լեզվում ծրագրավորման առումով:
Mediastreamer2-ը VoIP շարժիչ է, որը հիմք է ծառայում հայտնի բաց աղբյուրի VoIP հեռախոս ծրագրին: . Linphone-ում Mediastreamer2-ն իրականացնում է ձայնի և տեսանյութի հետ կապված բոլոր գործառույթները: Շարժիչի հնարավորությունների մանրամասն ցանկը կարելի է տեսնել այս Mediastreamer էջում: Որպեսզի ավելի հեշտ լինի, ծածկագիրն այստեղ է: .
Այնուհետև փաստաթղթում Mediastreamer2-ի փոխարեն օգտագործելու ենք նրա ռուսական անվանումը՝ «մեդիաստիմեր»:
Հիմնավորումը նրա ստեղծման մասին միանշանակ չէ, սակայն, նրա ծածկագրից դատելով, այն նախկինում օգտագործում էր , ինչը մի քանի հավատում է նրա հնարավոր երկար ծագմանը -ի նկատմամբ: Համեմատաբար, մեդիաստիմերը ավելի թեթև է նայում: Linphone-ի առաջին տարբերակը հրապարակվել է 2001 թվականին, այնպես որ այս պահին մեդիաստիմերը գրեթե 20 տարի գոյություն ունի և զարգանում է:
Մեդիաստիմերի հիմքում նկարված է «Data flow» (արդյունքների հոսք) ճարտարապետությունը: Նաև ներքո նկարում ներկայացված է նման ճարտարապետության օրինակը:

Այս ճարտարապետությունում տվյալների մշակման ալգորիթմը սահմանափակվում է ոչ թե ծրագրային կոդով, այլ գործառույթների կցումների սխեմայով (կաչ ժամանակավոր ժամանակին). Այս գործառույթները կոչվում են ֆիլտրեր:
Ահավասիկ, նման ճարտարապետությունը հնարավորություն է տալիս մեդիա մշակման ֆունկցիոնալը իրականացնել ֆիլտրերի հավաքածուով, որոնք կապվում են մշակման և VoIP հեռախոսի RTP-ճանապարհի փոխանցման սխեմայի մեջ:
Ֆիլտրերը մասնավոր սխեմաներում միացնելու հնարավորությունը, նոր ֆիլտրերի հեշտ մշակումը, մեդիաստիմերի իրականացման հնարավորությունը որպես ինքնուրույն, առանձին գրադարան, թույլ է տալիս նրան օգտագործել նաև այլ նախագծերում: Խնդիրն այն է, որ նախագիծը կարող է լինել 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 — Սինթետիկ շարժական պատկեր: 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 նկար
- Բիրտ պատկերների ձևափոխիչ: 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Որպես պատասխան:
Պակեթի անունը: libmediastreamer-dev
Կարգավիճակը: հաստատված է
优先ությունը: ցանկային
Հատված: libdevel
Հաստատված չափը: 244
Իրիրողը: Ubuntu Developers
Արհեստ markup: amd64
Աղբյուր: linphone
Վարկած: 3.6.1-2.5
Կախվածություններ: libmediastreamer-base3 (= 3.6.1-2.5), libortp-dev
Նկարագրություն: Linphone-ի վեբ հեռախոսի միջավայրի գրադարան - զարգացման ֆայլեր
Linphone-ը աուդիոյի և վիդեոյի ինտերնետ հեռախոս է, որը օգտագործում է SIP արձանագիրը։
Այն ունի GTK+ և կոնսոլի միջերես, ներառում է տարբեր աուդիո և վիդեո
կոդիկներ, և ապահովում է IM հատկություններ։
.
Այս պակեթը պարունակում է մեդիա գործողություններ իրականացնելու զարգացման գրադարանը։
Առաջին փորձառուի ընտրվող նվիրատուն: Debian VoIP Team
Տեղեկատվական էջ: 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.
Այս ծրագիրը ազատ է; տես աղբյուրը՝ պատճենահանման պայմանների համար։ Առկա չէ
արտոնություն; նույնիսկ ոչ առևտրային նպատակների համար:Մոդելի կառուցում և փորձնական ծրագիրը գործարկել
Ստեղծում ենք տանը մեր ուսումների նախագծերի համար папка, անվանենք այն 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) Անհայտ պարամետրեր 0
ALSA lib control.c:954:(snd_ctl_open_noupdate) Անվավեր CTL default:0
ortp-warning-Չնայած հնարավոր չէր միացնել խառնիչը քարտին: Անվավեր փաստարկ
ALSA lib conf.c:4738:(snd_config_expand) Անհայտ պարամետրեր 0
ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Անհայտ PCM default:0
ALSA lib conf.c:4738:(snd_config_expand) Անհայտ պարամետրեր 0
ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Անվավեր PCM default:0
ortp-warning-Վատ, HDA Intel PCH ձայնային քարտը միանալուն անհայտ է թվում, կրկնապատկվում է plughw-ով...
Mediastreamer-ը պատրաստ է:Այս ցուցակում մենք տեսնում ենք ALSA գրադարանի կողմից դուրս բերված սխալների հաղորդագրությունները, որը օգտագործվում է ձայնային քարտի կառավարման համար։ Մեդիաստրակառաների разработчики считают, что это нормально. Мы в данном случае по неволе согласимся с ними.
Այժմ մենք լիարժեք պատրաստ ենք աշխատելու медиastreamer-ի հետ։ Մենք տեղադրել ենք медиastreamer գրադարանը, կոմպիլյացիայի գործիքը, և փորձնական ծրագրի միջոցով ստուգել ենք, որ գործիքները կարգավորված են, և медиastreamer-ը հաջողությամբ սկզբնավորված է։
Երեկո խոսքերը. Մենք կստեղծենք ծրագիր, որը կկառուցի և գործարկի ձայների ազդանշանը մի քանի ֆիլտրերի շղթայում։
Ընտանիք: habr.com
