Հոդվածի նյութը վերցված է իմ
Ներածություն
Այս հոդվածը Mediastreamer2 շարժիչի միջոցով իրական ժամանակում մեդիա մշակման մասին հոդվածների շարքի սկիզբն է: Շնորհանդեսը կներառի Linux տերմինալում աշխատելու նվազագույն հմտություններ և C լեզվով ծրագրավորում։
Mediastreamer2-ը VoIP շարժիչն է հանրահայտ բաց կոդով ծրագրային ապահովման Voip հեռախոսի նախագծի հետևում:
Հետագայում տեքստում, հարմարության համար, Mediastreamer2 բառի փոխարեն կօգտագործենք նրա ռուսերեն նշումը՝ «media streamer»:
Նրա ստեղծման պատմությունն ամբողջությամբ պարզ չէ, սակայն, դատելով դրա սկզբնական կոդից, այն նախկինում օգտվել է գրադարանից
Մեդիա հոսքի հիմքում ճարտարապետությունն է, որը կոչվում է «Տվյալների հոսք» (տվյալների հոսք): Նման ճարտարապետության օրինակ ներկայացված է ստորև բերված նկարում:
Այս ճարտարապետության մեջ տվյալների մշակման ալգորիթմը նշված է ոչ թե ծրագրային կոդով, այլ գործառույթների միացման սխեմայով (գրաֆիկ), որը կարող է դասավորվել ցանկացած կարգով։ Այս գործառույթները կոչվում են զտիչներ:
Այս ճարտարապետությունը հնարավորություն է տալիս իրականացնել մեդիա մշակման գործառույթը մի շարք զտիչների տեսքով, որոնք միացված են 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 աուդիո միավոր (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
- Վերանմուշարկիչ՝ MS_RESAMPLE
- Տոնային դետեկտոր՝ MS_TONE_DETECTOR
- Ձայնի վերահսկում և ազդանշանի մակարդակի չափում. MS_VOLUME
Տեսանյութերի զտիչներ
Տեսանյութի նկարահանում և նվագարկում
- android գրավում
- 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
- Թեորա՝ MS_THEORA_ENC, MS_THEORA_DEC
- VP8՝ MS_VP8_ENC, MS_VP8_DEC
Տեսանյութերի մշակում
- jpeg ակնթարթ
- Pixel ձևաչափի փոխարկիչ՝ 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
Plug-ins
Ձայնային զտիչներ
- 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
Կախվածության անհրաժեշտ փաթեթները և մեդիա հոսքի գրադարանն ինքնին ավտոմատ կներբեռնվեն և կտեղադրվեն:
Ներբեռնված կախվածության դեբ փաթեթների ընդհանուր չափը կկազմի մոտավորապես 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/
Զարգացման գործիքների տեղադրում
Տեղադրեք 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 գրադարանը, այն օգտագործվում է ձայնային քարտը կառավարելու համար: Մեդիա հոսքի մշակողները իրենք են կարծում, որ դա նորմալ է։ Այս դեպքում մենք ակամա համաձայնում ենք նրանց հետ։
Այժմ մենք բոլորս պատրաստ ենք աշխատել մեդիա հեռարձակողի հետ: Մենք տեղադրել ենք մեդիա հոսքի գրադարանը, կոմպիլյացիայի գործիքը, և փորձնական հավելվածի միջոցով ստուգել ենք, որ գործիքները կազմաձևված են, և մեդիա հոսքագիծը հաջողությամբ սկզբնավորվում է:
Հաջորդը
Source: www.habr.com