Straipsnio medžiaga paimta iš mano
įvedimas
Šis straipsnis yra straipsnių serijos apie medijos apdorojimą realiuoju laiku naudojant Mediastreamer2 variklį pradžia. Pristatymas apims minimalius darbo Linux terminalu ir programavimo C kalba įgūdžius.
Mediastreamer2 yra VoIP variklis už populiarų atvirojo kodo programinės įrangos VoIP telefono projektą.
Toliau tekste, kad būtų patogiau, vietoj žodžio Mediastreamer2 naudosime jo rusišką užrašą: „media streamer“.
Jo sukūrimo istorija nėra visiškai aiški, tačiau, sprendžiant iš šaltinio kodo, ji anksčiau naudojo biblioteką
Žiniasklaidos transliuotojo esmė yra architektūra, vadinama „duomenų srautu“ (duomenų srautu). Tokios architektūros pavyzdys parodytas paveikslėlyje žemiau.
Šioje architektūroje duomenų apdorojimo algoritmas nurodomas ne programos kodu, o funkcijų sujungimo schema (grafu), kurios gali būti išdėstytos bet kokia tvarka. Šios funkcijos vadinamos filtrais.
Ši architektūra leidžia įgyvendinti medijos apdorojimo funkcionalumą filtrų, prijungtų prie VoIP telefono RTP srauto apdorojimo ir perdavimo schemos, pavidalu.
Galimybė sujungti filtrus į savavališkas schemas, paprastas naujų filtrų kūrimas, daugialypės terpės transliuotojo kaip nepriklausomos atskiros bibliotekos įgyvendinimas leidžia jį naudoti kituose projektuose. Be to, projektas gali būti VoIP srityje, nes galima pridėti pačių sukurtų filtrų.
Pagal numatytuosius nustatymus pateikiama filtrų biblioteka yra gana turtinga ir, kaip jau minėta, gali būti papildyta mūsų pačių sukurtais filtrais. Tačiau pirmiausia apibūdinkime paruoštus filtrus, kurie pateikiami kartu su medijos srautu. Štai jų sąrašas:
Garso filtrai
Garso įrašymas ir atkūrimas
- Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
- „Android“ vietinis garsas (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
- Garso eilės paslauga („Mac OS X“): MS_AQ_WRITE, MS_AQ_READ
- Garso įrenginio paslauga („Mac OS X“)
- Menai (Linux): MS_ARTS_WRITE, MS_ARTS_READ
- „DirectSound“ („Windows“): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
- Failų grotuvas (raw/wav/pcap failai) (Linux): MS_FILE_PLAYER
- Failų grotuvas (raw/wav failai) („Windows“): MS_WINSND_READ
- Rašykite į failą (wav failus) (Linux): MS_FILE_REC
- Rašykite į failą (wav failus) („Windows“): MS_WINSND_WRITE
- „Mac“ garso įrenginys („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“ garsas („Windows“)
Garso kodavimas/dekodavimas
- G.711 a-law: MS_ALAW_DEC, MS_ALAW_ENC
- G.711 µ-dėsnis: 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
- Linijinis PCM: MS_L16_ENC, MS_L16_DEC
- Greitis: MS_SPEEX_ENC, MS_SPEEX_DEC
Garso apdorojimas
- Kanalo konvertavimas (mono->stereo, stereo->mono): MS_CHANNEL_ADAPTER
- Konferencija: MS_CONF
- DTMF generatorius: MS_DTMF_GEN
- Aido panaikinimas (speex): MS_SPEEX_EC
- Ekvalaizeris: MS_EQUALIZER
- Maišytuvas: MS_MIXER
- Paketų praradimo kompensatorius (PLC): MS_GENERIC_PLC
- Resampler: MS_RESAMPLE
- Tonų detektorius: MS_TONE_DETECTOR
- Garso valdymas ir signalo lygio matavimas: MS_VOLUME
Vaizdo filtrai
Vaizdo įrašų fiksavimas ir atkūrimas
- Android fiksavimas
- Android atkūrimas
- AV fondo fiksavimas (iOS)
- „AV Foundation“ atkūrimas („iOS“)
- „DirectShow Capture“ („Windows“)
- „DrawDib“ atkūrimas („Windows“)
- Išorinis atkūrimas – vaizdo įrašo siuntimas į viršutinį sluoksnį
- GLX atkūrimas (Linux): MS_GLXVIDEO
- Mire – Sintetinis judantis paveikslėlis: MS_MIRE
- OpenGL atkūrimas („Mac OS X“)
- OpenGL ES2 atkūrimas („Android“)
- „Quicktime Capture“ („Mac OS X“)
- SDL atkūrimas: MS_SDL_OUT
- Statinio vaizdo išvestis: MS_STATIC_IMAGE
- Vaizdo įrašas, skirtas Linux (V4L) fiksavimui (Linux): MS_V4L
- Vaizdo įrašas, skirtas Linux 2 (V4L2) fiksavimui (Linux): MS_V4L2_CAPTURE
- „Video4windows“ („DirectShow“) fiksavimas („Windows“)
- „Video4windows“ („DirectShow“) fiksavimas („Windows CE“)
- Vaizdo įrašas, skirtas „Windows“ (vfw) fiksavimas („Windows“)
- XV atkūrimas („Linux“)
Vaizdo įrašų kodavimas/dekodavimas
- H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, sniegas: MS_MJPEG_DEC, MS_H263_ENC, MS_H263_DEC
- H.264 (tik dekoderis): MS_H264_DEC
- Teora: ms_theora_enc, ms_theora_dec
- VP8: ms_vp8_enc, ms_vp8_dec
Vaizdo įrašų apdorojimas
- jpeg momentinė nuotrauka
- Pikselių formato keitiklis: MS_PIX_CONV
- Dydžio keitiklis
- Kiti filtrai
- Keitimasis duomenų blokais tarp gijų: MS_ITC_SOURCE, MS_ITC_SINK
- Duomenų blokų rinkimas iš kelių įėjimų į vieną išvestį: MS_JOIN
- RTP priėmimas / siuntimas: MS_RTP_SEND, MS_RTP_RECV
- Įvesties duomenų kopijavimas į kelis išėjimus: MS_TEE
- Nutrauktas įkėlimas: MS_VOID_SINK
- Tylos šaltinis: MS_VOID_SOURCE
Papildiniai
Garso filtrai
- AMR-NB koduotuvas/dekoderis
- G.729 koduotuvas/dekoderis
- iLBC koduotuvas / dekoderis
- SILK kodavimo/dekodavimo aparatas
Vaizdo filtrai
- H.264 programinė įranga
- H.264 V4L2 aparatinės įrangos pagreitintas koduotuvas / dekoderis
Po trumpo filtro aprašymo rodomas tipo pavadinimas, kuris naudojamas kuriant naują šio filtro egzempliorių. Toliau mes remsimės šiuo sąrašu.
Diegimas naudojant Linux Ubuntu
Dabar kompiuteryje įdiegsime medijos transliuotoją ir su juo sukursime pirmąją programą.
„Mediastremer2“ įdiegimas kompiuteryje ar virtualioje mašinoje, kurioje veikia „Ubuntu“, nereikalauja jokių specialių įgūdžių. Čia ir žemiau simbolis „$“ žymės apvalkalo eilutę komandoms įvesti. Tie. jei sąraše matote šį simbolį eilutės pradžioje, tai yra eilutė, kurioje rodomos komandos vykdomos terminale.
Daroma prielaida, kad atliekant šiame straipsnyje nurodytus veiksmus jūsų kompiuteris turi prieigą prie interneto.
Paketo libmediastremer-dev diegimas
Paleiskite terminalą ir įveskite komandą:
$ sudo apt-get update
Norėdami atlikti pakeitimus, būsite paprašyti slaptažodžio, įveskite jį ir paketų tvarkyklė atnaujins savo duomenų bazes. Po to turite paleisti:
$ sudo apt-get install libmediastreamer-dev
Būtini priklausomybės paketai ir pati medijos srauto biblioteka bus automatiškai atsisiunčiama ir įdiegta.
Bendras atsisiųstų priklausomybės deb paketų dydis bus maždaug 35 MB. Išsamią informaciją apie įdiegtą paketą galite rasti komanda:
$ dpkg -s libmediastreamer-dev
Atsakymo pavyzdys:
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/
Kūrimo įrankių diegimas
Įdiekite C kompiliatorių ir su juo susijusius įrankius:
$ sudo apt-get install gcc
Mes patikriname rezultatą, paprašydami kompiliatoriaus versijos:
$ gcc --version
Atsakymas turėtų būti maždaug toks:
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.
Bandomosios programos kūrimas ir vykdymas
Mes kuriame home mūsų mokymo projektų aplankas, pavadinkime jį MSTURAL:
$ mkdir ~/mstutorial
Naudokite savo mėgstamą teksto rengyklę ir sukurkite C programos failą mstest.c su tokiu turiniu:
#include "stdio.h"
#include <mediastreamer2/mscommon.h>
int main()
{
ms_init();
printf ("Mediastreamer is ready.n");
}
Jis inicijuoja medijos transliuotoją, išspausdina sveikinimą ir išeina.
Išsaugokite failą ir sukomponuokite bandomąją programą naudodami komandą:
$ gcc mstest.c -o mstest `pkg-config mediastreamer --libs --cflags`
Atkreipkite dėmesį, kad linija
`pkg-config mediastreamer --libs --cflags`
kabutėse, kurios yra klaviatūroje toje pačioje vietoje kaip raidė "Ё".
Jei faile nėra klaidų, po kompiliavimo failas pasirodys kataloge Mstest. Pradedame programą:
$ ./mstest
Rezultatas bus toks:
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.
Šiame sąraše matome klaidų pranešimus, kuriuos rodo ALSA biblioteka, ji naudojama garso plokštei valdyti. Patys žiniasklaidos transliuotojo kūrėjai mano, kad tai yra normalu. Šiuo atveju nenoriai su jais sutinkame.
Dabar mes visi pasiruošę dirbti su medijos srautu. Įdiegėme medijos transliuotojo biblioteką, kompiliavimo įrankį ir naudodami bandomąją programą patikrinome, ar įrankiai sukonfigūruoti ir medijos transliuotojas sėkmingai inicijuojamas.
Kitas
Šaltinis: www.habr.com