Ang materyal sa artikulo gikuha gikan sa akong
Pasiuna
Kini nga artikulo mao ang sinugdanan sa serye sa mga artikulo bahin sa real-time nga pagproseso sa media gamit ang Mediastreamer2 engine. Ang presentasyon maglakip sa minimum nga kahanas sa pagtrabaho sa Linux terminal ug programming sa C nga pinulongan.
Ang Mediastreamer2 mao ang VoIP engine luyo sa sikat nga open-source software nga voip phone project.
Dugang pa sa teksto, alang sa kasayon, imbes sa pulong Mediastreamer2 atong gamiton ang Russian nga notasyon: "media streamer".
Ang kasaysayan sa paglalang niini dili hingpit nga tin-aw, apan sa paghukom sa source code niini, kaniadto gigamit ang librarya
Sa kasingkasing sa media streamer usa ka arkitektura nga gitawag og "Data flow" (data flow). Ang usa ka pananglitan sa ingon nga arkitektura gipakita sa hulagway sa ubos.
Niini nga arkitektura, ang algorithm sa pagproseso sa datos gipiho dili sa usa ka code sa programa, apan pinaagi sa usa ka laraw (graph) alang sa pagkonektar sa mga gimbuhaton nga mahimong gihan-ay sa bisan unsang pagkahan-ay. Kini nga mga gimbuhaton gitawag nga mga filter.
Kini nga arkitektura nagpaposible sa pagpatuman sa media processing functionality sa porma sa usa ka set sa mga filter nga konektado sa VoIP phone RTP traffic processing ug transmission scheme.
Ang abilidad sa paghiusa sa mga pagsala ngadto sa arbitraryong mga laraw, ang yano nga pag-uswag sa bag-ong mga pagsala, ang pagpatuman sa media streamer isip usa ka independenteng bulag nga librarya, nagtugot niini nga gamiton sa ubang mga proyekto. Dugang pa, ang proyekto mahimong naa sa natad sa VoIP, tungod kay posible nga idugang ang mga pagsala nga gihimo sa kaugalingon.
Ang filter nga librarya nga gihatag pinaagi sa default kay dato kaayo ug, sama sa nahisgotan na, mahimong madugangan gamit ang mga filter sa atong kaugalingong disenyo. Apan una, atong ihulagway ang andam na nga mga pagsala nga kauban sa media streamer. Ania ang ilang listahan:
Mga filter sa tunog
Pagkuha ug pag-playback sa audio
- Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
- Lumad nga tingog sa Android (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
- Serbisyo sa Audio Queue (Mac OS X): MS_AQ_WRITE, MS_AQ_READ
- Serbisyo sa Unit sa Audio (Mac OS X)
- Mga Sining (Linux): MS_ARTS_WRITE, MS_ARTS_READ
- DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
- File player (raw/wav/pcap files) (Linux): MS_FILE_PLAYER
- File player (raw/wav files) (Windows): MS_WINSND_READ
- Pagsulat sa file (wav files) (Linux): MS_FILE_REC
- Pagsulat sa file (wav files) (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)
Audio encoding/decoding
- G.711 usa ka balaod: MS_ALAW_DEC, MS_ALAW_ENC
- G.711 Β΅-law: 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
- Linear nga PCM: MS_L16_ENC, MS_L16_DEC
- Speex: MS_SPEEX_ENC, MS_SPEEX_DEC
Pagproseso sa tingog
- Pagkabig sa channel (mono->stereo, stereo->mono): MS_CHANNEL_ADAPTER
- Komperensya: MS_CONF
- DTMF Generator: MS_DTMF_GEN
- Pagkansela sa echo (speex): MS_SPEEX_EC
- Equalizer: MS_EQUALIZER
- Mixer: MS_MIXER
- Packet Loss Compensator (PLC): MS_GENERIC_PLC
- Resampler: MS_RESAMPLE
- Detektor sa tono: MS_TONE_DETECTOR
- Pagkontrol sa volume ug pagsukod sa lebel sa signal: MS_VOLUME
Mga filter sa video
Pagkuha ug pag-playback sa video
- pagkuha sa android
- android playback
- Pagkuha sa AV Foundation (iOS)
- AV Foundation playback (iOS)
- Pagkuha sa DirectShow (Windows)
- DrawDib playback (Windows)
- External playback - Pagpadala og video sa ibabaw nga layer
- GLX playback (Linux): MS_GLXVIDEO
- Mire - Sintetikong naglihok nga hulagway: MS_MIRE
- OpenGL playback (Mac OS X)
- OpenGL ES2 playback (Android)
- Quicktime Capture (Mac OS X)
- SDL playback: MS_SDL_OUT
- Static nga hulagway nga output: MS_STATIC_IMAGE
- Video Para sa Linux (V4L) pagkuha (Linux): MS_V4L
- Video Para sa Linux 2 (V4L2) pagkuha (Linux): MS_V4L2_CAPTURE
- Video4windows (DirectShow) pagkuha (Windows)
- Video4windows (DirectShow) pagkuha (Windows CE)
- Video Para sa Windows (vfw) pagkuha (Windows)
- XV playback (Linux)
Video encoding/decoding
- H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, Snow: MS_MJPEG_DEC, MS_H263_ENC, MS_H263_DEC
- H.264 (decoder lang): MS_H264_DEC
- Teora: MS_THEORA_ENC, MS_THEORA_DEC
- VP8: MS_VP8_ENC, MS_VP8_DEC
Pagproseso sa video
- jpeg snapshot
- Pixel format converter: MS_PIX_CONV
- Resizer
- Uban pang mga filter
- Pagbayloay sa mga bloke sa datos tali sa mga hilo: MS_ITC_SOURCE, MS_ITC_SINK
- Pagkolekta sa mga bloke sa datos gikan sa daghang mga input ngadto sa usa ka output: MS_JOIN
- RTP nakadawat/nagpadala: MS_RTP_SEND, MS_RTP_RECV
- Pagkopya sa input data ngadto sa daghang mga output: MS_TEE
- Gihunong nga load: MS_VOID_SINK
- Hilum nga Tinubdan: MS_VOID_SOURCE
Mga plugin
Mga filter sa tunog
- AMR-NB encoder/decoder
- G.729 encoder/decoder
- iLBC encoder/decoder
- SILK encoder/decoder
Mga filter sa video
- H.264 software encoder
- H.264 V4L2 hardware accelerated encoder/decoder
Pagkahuman sa usa ka mubo nga paghulagway sa filter, ang ngalan sa tipo gipakita, nga gigamit kung maghimo usa ka bag-ong pananglitan sa kini nga filter. Sa mosunod, atong hisgotan kini nga listahan.
Pag-instalar ubos sa Linux Ubuntu
Karon among i-install ang media streamer sa kompyuter ug tukuron ang among una nga aplikasyon niini.
Ang pag-instalar sa Mediastremer2 sa usa ka kompyuter o virtual machine nga nagpadagan sa Ubuntu wala magkinahanglan og bisan unsang espesyal nga kahanas. Dinhi ug sa ubos, ang simbolo nga "$" magpaila sa shell prompt alang sa pagsulod sa mga sugo. Mga. kung sa lista makita nimo kini nga simbolo sa sinugdanan sa linya, nan kini ang linya diin ang mga mando gipakita nga gipatuman sa terminal.
Gituohan nga sa mga lakang niini nga artikulo, ang imong kompyuter adunay access sa Internet.
Pag-instalar sa libmediastremer-dev nga pakete
Ilunsad ang terminal ug i-type ang command:
$ sudo apt-get update
Pangutan-on ka alang sa usa ka password aron makahimo mga pagbag-o, isulod kini ug ang tagdumala sa pakete mag-update sa mga database niini. Pagkahuman niana, kinahanglan nimo nga modagan:
$ sudo apt-get install libmediastreamer-dev
Ang gikinahanglan nga dependency packages ug ang media streamer library mismo awtomatikong ma-download ug ma-install.
Ang kinatibuk-ang gidak-on sa na-download nga dependency deb packages mahimong gibana-bana nga 35 MB. Ang mga detalye bahin sa na-install nga pakete makit-an sa mando:
$ dpkg -s libmediastreamer-dev
Pananglitan sa tubag:
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/
Pag-instalar sa mga himan sa pagpalambo
I-install ang C compiler ug ang kauban nga mga himan niini:
$ sudo apt-get install gcc
Atong susihon ang resulta pinaagi sa pagpangutana sa bersyon sa compiler:
$ gcc --version
Ang tubag kinahanglan nga ingon niini:
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.
Pagtukod ug Pagpadagan sa Trial Application
Naghimo kami sa home folder para sa atong mga proyekto sa pagtudlo, tawgon nato kini mstutorial:
$ mkdir ~/mstutorial
Gamita ang imong paborito nga text editor ug paghimo ug C program file nga gitawag mstest.c uban sa mosunod nga sulod:
#include "stdio.h"
#include <mediastreamer2/mscommon.h>
int main()
{
ms_init();
printf ("Mediastreamer is ready.n");
}
Nagsugod kini sa media streamer, nag-imprinta og usa ka pagtimbaya, ug paggawas.
I-save ang file ug i-compile ang test application gamit ang command:
$ gcc mstest.c -o mstest `pkg-config mediastreamer --libs --cflags`
Timan-i nga ang linya
`pkg-config mediastreamer --libs --cflags`
gilakip sa mga marka sa kinutlo, nga nahimutang sa keyboard sa parehas nga lugar sa letra nga "Π".
Kung ang file walaβy mga sayup, unya pagkahuman sa pag-compile usa ka file ang makita sa direktoryo mstest. Atong sugdan ang programa:
$ ./mstest
Ang resulta mahimong sama niini:
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.
Sa kini nga lista, nakita namon ang mga mensahe sa sayup nga gipakita sa librarya sa ALSA, gigamit kini aron makontrol ang sound card. Ang mga nag-develop sa media streamer mismo nagtuo nga kini normal. Sa kini nga kaso, kami nagpanuko nga mouyon kanila.
Karon andam na kaming tanan nga magtrabaho kauban ang streamer sa media. Among gi-install ang media streamer library, ang compilation tool, ug gamit ang trial application, gipamatud-an nga ang mga himan na-configure ug ang media streamer malampusong nagsugod.
Sunod
Source: www.habr.com