1
ТЕЛЕФОНИЯ
II
как в роли клиента, так и шлюза (gateway). Для равномерной
отправки голосовых пакетов достаточно соединения на ско-
рости не менее 19,2 кбит/сек, а Ethernet-соединения хватит с
лихвой.
Для компиляции проекта вам понадобится пакет от
Borland Delphi 5-7. Ввиду ограниченности места в журна-
ле приведены только основные моменты реализации (см.
ЛИСТИНГ).
Заключение
В основном все функции работы с аудиопотоком и моде-
мом вынесены в отдельный модуль IPTel, реализованной в
виде подключаемой библиотеки, что позволяет разработчи-
ку с легкостью интегрировать его в свои приложения. Реали-
зация готового решения шлюза и все ресурсы проекта пред-
ставлены на [3, 4].
Полные исходные тексты и ресурсы проекта (файл
IPTel_res.zip)
вы можете загрузить с сайта нашего жур-
нала:
h ttp ://w w w .rad io lig a.co m
(раздел “Программы")
,
а также с сайта автора:
W
h ttp://raxp .rad io lig a.co m
Ресурсы
1. Рекомендации ITU-T Н.323 - http://h323.com.ru
2. Клиент Skype -
3. Полные исходные тексты и ресурсы проекта -
4. Компиляция - http://raxp.radioliga.com/zip/iptel.zip
П рим еры л и сти н га п р о гр ам м
1| инициализация и работа с буфером звуковых данных
procedure Tipt.start;
v a r
format: pointer;
maxaizeformat: loxtgint;
P: Taemwaveformat ;
g: tacmconvertor;
origformat: pWaveFormatEX;
x: integer;
b: boolean;
a; array[1■■256] of byte;
begin
if fzelf then begin
g;» Tacmoonvertor.Create(self);
b:= g.chooseformat(f, False);
end else begin
GetMera(OrigFormat, Sizeof(TACMWaveFormat));
x:= Ord(fverbinding) +
• 1;
b;* True;
ease x of
1: with origformatA
do begin
wformattag : = 4353;
nchannels :* 1;
nsamplespersec := 8000;
navgbytaapersec := 600;
nblockalign := 12;
wbitspersaxnple := 16;
cbaize :« 0;
f.format := origformatA
end;
2: with QrigFormatA
do begin
wPormatTag :* 1;
// pan 8kb
nChannela := 1;
// Mono
nSampleaPerSec := 8000; // Low
to strean .
nAvgBytesPerSec :® 8000;
nBlockAlign :» 1;
wbitapersample : = 8;
cbSize :* 46593;
f.Format :* origf onnatA
end;
3: with origformatA
do begin
wformattag :*= 49; // gsm
6.10 2kb
nchannels :» 1;
naamplespersec :* 8000;
navgbytespersec : = 1625;
nblockalign
65;
wbitepersample :* 0;
cbsize := 2;
,v
move(origformatA, a, Sizeof (TAGMfaveForxnat)) ;
s [18] :* 0;
. л.
a[19] :■ 64;
a[20] :* 1;
move(s, f. format, sizeof (Taonwaveformat));
end;
4: with origformatA
do begin
wformattag ;» 1;
//pan 22
fradiokwaliteit)
nchannels :» 1;
naamplespersec
22050;
navgbytespersec ;= 22050;
'
nblockalign :® 1;
wbitapersample :* 8;
cbsize := 0;
4
>^i!
f . format : = origf ormatA
end;
5: with origformatA
do begin
wformattag := 1; //pm 11
nchannels := 1;
naamplespersec
11025;
navgbytespersec :* 11025;
nblockalign
1;
wbitspersanple :« 8;
cbsize :« 0;
f.format:« origformatA
end;
6; with origformatA
do begin
wformattag :» 4354; //lernout8
nchannels :* 1;
nsamplespersec :» 8000;
navgbyteapereec :» 1850;
nblockalign := 37;
wbitapersample :« 16;
cbsize :« 0;
f.format :* origformatA
end;
end;
f reemem
(origf ormat)
end;
if b then
begin
acminl.BuffsrSize :B trunc(f.Format.nAvgByteaPerSec / bufferdelen);
if acminl.buffsrsiza <= f.format.nblockalign then
acminl.BufferSize :« f .format.nblockalign * 2;
if acminl.buffersize > 1900 then acminl.bufferaize := 1900;
if aoninl.buffersize = messagesize then acminl,BufferSize := roeaaagesize
+ 65;
try
ACMOutl.Open(f);
ACMInl.Open(f);
if assigned (fsoundstart) then f sounds tart (self, "sounds tart"*) ;
except
on e: Exception do
begin
factive := Falae;
ACMInl.Close;
ACMOutl. Close ;
if assigned(fsoundclose) then fsoundclose(self);
if assigned(fcodecerror) then fcodecerror(self, e.Message)
else
aencbnesaage("Ae.Message");
end;
end;
end
else factiva:« False
end;
2| деинициализация буфера авуковых данных:
procedure Tipt.stop;
begin
ACMInl.Close;
ACMOutl. Close;
if assigned(fsoundolose) then fsoundclose(self)
end;
3) проверка, прием и пинг клиента:
procedure Tipt.pingReceived(Sender: TCcanponent; NumberBytes: integer;
FromlP: string; Port: integer);
var
s, naam
: string;
a; array[1.
.60] of char;
Радиолюбитель - 0 7 /2 0 0 8 U
предыдущая страница 55 Радиолюбитель 2008-07 читать онлайн следующая страница 57 Радиолюбитель 2008-07 читать онлайн Домой Выключить/включить текст