Вверх ↑
Этот топик читают: Гость
Ответов: 209
Рейтинг: 1
#16: 2015-01-30 18:06:47 ЛС | профиль | цитата
flint2, какие мысли от увиденного ?
карма: 0

0
Гость
Ответов: 17029
Рейтинг: 0
#17: 2015-01-30 18:54:03 правка | ЛС | профиль | цитата


Редактировалось 10 раз(а), последний 2021-06-21 04:31:29
карма: 0

0
Ответов: 2059
Рейтинг: 131
#18: 2015-01-30 19:03:44 ЛС | профиль | цитата
Смущает обилие таймеров, а это не есть хорошо.
карма: 6

0
Ответов: 209
Рейтинг: 1
#19: 2015-01-30 19:15:42 ЛС | профиль | цитата
кстати не все камеры кушает стандартный webcam
те что строго нуждаются в установки дров он пропускает
по ним не срабатывает диалог настроек
------------ Дoбавленo в 19.11:
flint2, попробуй как есть отловить крэш и уже методом удаления лишнего может чего найдешь...

я все на tcp уповаю как менее стабильную и предсказуемую вещь..

карма: 0

0
Ответов: 2059
Рейтинг: 131
#20: 2015-01-30 21:47:33 ЛС | профиль | цитата
попробуй как есть отловить крэш

Пытаюсь. Только-только разобрался. + домашние дела.
карма: 6

0
Ответов: 209
Рейтинг: 1
#21: 2015-01-30 22:47:35 ЛС | профиль | цитата
на практике вторая машина где валится программа после увеличения размера буфера работает. но это не серьезно получается для работы программы. т.е косвенно связка - буфер после tcp

прикидываю,как бы решением не вышел датааккумулятор от NetSpirit
http://forum.hiasm.com/forum.html?q=3&p=274817
карма: 0

0
Ответов: 2059
Рейтинг: 131
#22: 2015-01-30 23:54:23 ЛС | профиль | цитата
прикидываю,как бы решением не вышел датааккумулятор от NetSpirit
http://forum.hiasm.com/forum.html?q=3&p=274817

Ну, не знаю... Вообще-то..., сейчас еще раз посмотрю.
P.S.
Нет!
Не привязываясь к этому, все игры с аудио и видио потоками надо делать в одном модуле.
Т.е. IC, или спецовый компонент.
Сейчас с MPEGом вожусь,чтобы налету жал, почти такая-же задача. Так пришлось делать отдельный компонент.
P.S.
Я смоделировал падение.
Вся беда в том, что ты горный поток через onEvent точки пытаешься засунуть.
Игольное ушко onEvent * плохой канал связи = немереного объёма буфер.
И всё равно - кирдык.
Посмотри как сделаны мультимедиа компоненты.
Там разве где нибудь поток наружу выходит?
Тебе нужны сетевые компоненты, такие, чтобы поток в них по имени передавался.
И вообще, нигде не должен поток передаваться через точки.
С картинкой ясно - грубо говоря кадр в пять минут, а звук жать на маленьком битрейте. Паузы можно не передавать, хотя не обязательно.
Каждый следующий кадр формируется только поле того, как прошел предыдущий! И никаких таймеров для этих целей.
Вернее таймер работает на обновление кадров в буфере.
При хорошем канале, картинка будет быстро сменятся, при плохом - реже, с пропуском фаз движения. Классика жанра.
Тогда и через точки можно потоки пускать. Буфер нужен будет равный размеру кадра * 2. Вернее 2 буфера.
Из одного передаётся, а другой обновляется по таймеру новыми кадрами пока идёт долгая передача предыдущего.
По окончании передачи кадра, они меняются местами. Тут скорее 2 массива нужно.
Всё само будет регулироваться.
Я бы MPEGом жал, а не ZIP, меняя качество от изменеий ширины канала. Тоже - Классика жанра.

карма: 6

1
Голосовали:Net2Com
Ответов: 209
Рейтинг: 1
#23: 2015-01-31 13:27:24 ЛС | профиль | цитата
заметил еще одну особенность после которой проги валятся. на падающую прогу (второй комп) приходит звуковой щелчок от нормально работающей стороны, потом это щелчок слышно на первой (стабильной) машине , и сразу после этого второй комп валится...
такие дела...

flint2 писал(а):
Вся беда в том, что ты горный поток через onEvent точки пытаешься засунуть.

flint2 писал(а):
Посмотри как сделаны мультимедиа компоненты.

flint2 писал(а):
Там разве где нибудь поток наружу выходит?


за основу были и взяты стандартные примеры
хм-хм-хм...

code_35014.txt

flint2 писал(а):
Тебе нужны сетевые компоненты, такие, чтобы поток в них по имени передавался.


это как?
такой вариант?
code_35019.txt

flint2 писал(а):
Каждый следующий кадр формируется только поле того, как прошел предыдущий! И никаких таймеров для этих целей.


да. это сперва я делал. вроде такая же песня выходит
реализация была такая - картинка уходила, приходя к клиенту обрабатывалась и клиент слал свою..и такая схема обеспечивала цикличность...
вариант как на одной только стороне отследить полную отправку второму я увы не нашел...
вариант пихания потока без его слежения прокатывает с картинкой без ошибок...а вот звук тут ты прав на 100% ... но как отследить ХЗ... если только не ставить второй сервер через который сообщать об успешном приходе звука (на существующий сервер звука обратную отсылку не поставить ибо он в stream это не делает, только в стринг). Хотя если конвертером попробовать и слать звук в стринге то обратное информирование о доставке через сервер теоретический можно сделать.... Но тут вырисовывается огромный минус...Как показала практика с картинкой - интервал увеличивается в двое... т.е звук может стать в отставание на секунды 2 запросто... а это уже не по феншую

flint2 писал(а):
Я бы MPEGом жал, а не ZIP, меняя качество от изменеий ширины канала. Тоже - Классика жанра.


мысль.
но важнее со звуком разобраться сейчас чтобы потом уже к картинке придти...

но подкинул подумать ты мне прилично

попробую пока звуковой с информированием о доставке сделать...
------------ Дoбавленo в 12.20:
блин. вспомнил почему в стринге звук не слал. обратное информирование делать смысла то нет. bass стрим постоянно в порт долбит данные после старта...
от как быть хз...

смоделировал ты падения... на каком падало на звуке или картинке у тебя?
------------ Дoбавленo в 13.27:
у тебя эта схема работает нормально на машинах?

Add(MainForm,2953706,21,105)
{
Width=554
Point(Handle)
link(onCreate,15104814:doEvent1,[])
}
Add(BASS_RecordStart,5066922,329,357)
{
Freq=8000
Mode=1
Name="mainrec"
link(onData,8120054:doValue,[(439,370)(439,426)])
}
Add(Hub,4590045,273,364)
{
link(onEvent1,5066922:doStop,[])
link(onEvent2,13389086:doClose,[(302,377)(325,552)(908,552)(908,363)])
}
Add(Message,14454558,1071,378)
{
Message="ошибка подключения клиентского сервиса отправляющего аудиопоток"
}
Add(TCP_Client,13389086,924,350)
{
Port=123
Point(onError)
link(onRead,4896432:doCase,[(996,356)(996,335)])
link(onConnect,5066922:doStart,[(1014,363)(1014,223)(317,223)(317,363)])
link(IP,3335711:Text,[])
link(onError,14454558:doMessage,[(1014,377)(1014,384)])
}
Add(Convertor,7396678,798,364)
{
Mode=11
link(onResult,13389086:doSend,[])
}
Add(Case,4896432,1036,329)
{
Value=String(ok)
link(onTrue,2273537:doValue,[(1084,342)(1084,170)(506,170)(506,384)])
}
Add(IndexToChanel,9028749,623,420)
{
Count=1
Point(Index)
link(onEvent1,5971741:doEvent1,[(727,426)(727,363)])
link(Index,11768097:Value,[])
}
Add(ChanelToIndex,8405258,581,378)
{
link(onIndex,11768097:doValue,[])
}
Add(Memory,11768097,623,378)
{
Default=Integer(0)
}
Add(GlobalVar,2273537,518,378)
{
Name="on"
link(onValue,8405258:doWork1,[])
}
Add(GlobalVar,2357852,518,399)
{
Name="off"
link(onValue,8405258:doWork2,[(566,405)(566,391)])
}
Add(GlobalVar,8120054,518,420)
{
Name="thread"
link(onValue,9028749:doEvent,[])
}
Add(Hub,5971741,749,357)
{
link(onEvent1,2357852:doValue,[(774,363)(774,486)(506,486)(506,405)])
link(onEvent2,7396678:doConvert,[])
}
Add(BASS_StreamCreate,14476773,1008,980)
{
Freq=8000
DataType=1
Name="MainSound"
link(onCreate,3047460:doPlay,[])
link(Data,8732119:Stream,[])
}
Add(BASS_ChannelPlay,3047460,1078,980)
{
Channel="MainSound"
}
Add(SoundBuffer,8732119,1008,882)
{
Size=1000
}
Add(Message,8738553,322,1113)
{
Message="ошибка старта принимающего аудипоток сервиса"
}
Add(Timer,1155634,798,1015)
{
Enable=1
AutoStop=1
link(onTimer,14476773:doDestroy,[(919,1021)(919,993)])
}
Add(TCP_Server,12999720,259,875)
{
Port=123
Point(onError)
Point(doSendByIp)
link(onRead,5490384:doEvent1,[])
link(onConnect,6444517:doEvent1,[(336,888)(336,958)])
link(onDisconnect,1155634:doTimer,[(332,895)(332,1021)])
link(onError,8738553:doMessage,[(307,902)(307,1119)])
}
Add(Convertor,15998262,728,882)
{
Mode=12
link(onResult,8732119:doAdd,[])
}
Add(MT_AddData,3877925,511,749)
{
PColor(onAdd,16711680)
link(onAdd,12999720:doSendByIp,[(606,755)(606,648)(247,648)(247,902)])
link(Data1,5813228:Value,[(517,744)(482,744)])
link(Data2,12434169:Var,[])
}
Add(Memory,5813228,476,707)
{
Default=String(ok)
}
Add(LineBreak,6693103,504,938)
{
Caption="ip next"
Type=1
link(Data,7976985:Value,[])
Primary=[12434169,14,-217]
}
Add(Hub,5490384,392,875)
{
link(onEvent1,15998262:doConvert,[(567,881)(567,888)])
link(onEvent2,11680975:doData,[(438,888)(438,755)])
}
Add(Memory,7976985,504,896)
{
}
Add(Hub,6444517,441,952)
{
link(onEvent1,7976985:doValue,[(479,958)(479,902)])
link(onEvent2,14476773:doCreate,[(731,965)(731,986)])
}
Add(DoData,11680975,469,749)
{
link(onEventData,3877925:doAdd,[])
}
Add(Button,6600423,252,56)
{
Left=130
Top=100
link(onClick,13389086:doOpen,[(577,62)])
}
Add(Edit,3335711,924,273)
{
Left=125
Top=165
Width=260
Text=""
}
Add(Debug,3909931,126,126)
{
link(onEvent,12999720:doOpen,[(156,132)(156,881)])
}
Add(BASS_Init,4252681,21,168)
{
Freq=8000
Flags=2
link(onInit,13190754:doInit,[])
link(Handle,2953706:Handle,[(41,152)(27,152)])
}
Add(BASS_RecordCenter,13190754,77,168)
{
}
Add(Hub,15104814,63,119)
{
link(onEvent1,4252681:doInit,[(100,125)(100,80)(9,80)(9,174)])
link(onEvent2,3909931:doEvent,[])
}


карма: 0

0
файлы: 2code_35014.txt [2.3KB] [549], code_35019.txt [404B] [394]
Ответов: 2059
Рейтинг: 131
#24: 2015-01-31 15:12:58 ЛС | профиль | цитата
за основу были и взяты стандартные примеры

Ты привёл пример для звука.
Тут всё правильно, за исключенем того, что сжатия нет, например lame3.99.5.
lame_enc.dll, или lame.exe через WinExec и передаёшь параметры в командной строке.
(наверно стоит сделать компонент для lame - пригодтся.)
Без игр с битрейтом и часотой дискретизации не стоит и заниматься этим.
Со звуком закончили.
Мы говорим о видиопотоке.
да. это сперва я делал. вроде такая же песня выходит

Нет, не делал.
Ты потоком гнал.
А я предлагаю передавать кадры. Это две бльшие разницы.
А вот отдельный кадр можно и потоком гнать.
вариант как на одной только стороне отследить полную отправку

По onError, или onProgress нельзя?.
Как только ушел последний байт из массива с кадром, переключаешься на другой массив, а первый заполняешь.
Тут надо посмотреть, что лучше, мониторить отсылку сокетов, или всего кадра. (onError, onProgress)
P.S.
это как?

Я имел ввиду такую конструкцию:
Связка - Name=InetStream, Channel=InetStream
карма: 6

0
Ответов: 209
Рейтинг: 1
#25: 2015-02-01 14:03:35 ЛС | профиль | цитата
flint2 писал(а):
По onError, или onProgress нельзя?.


не выходит по этим точкам.тишина
------------ Дoбавленo в 14.03:
flint2, ну что, похоже я решил вопрос с переполнением.

при 100 мегабитке на 8000 дискретизации клиент дует 2000байт эти же 2000 приходят на сервер.
но стоит смоделировать плохую связь как клиенту приходит в одном потоке накопленные 4000 байт и они уже выносят буфер которые ограничен в 1000
конечно огород с лишним элементом сравнения размера потока не лучший вариант и здорово бы иметь в tcp компоненте поле ограничения больше которого не выдавать.

удивительно при 2000 вдуваемых и 1000 на буфере работа идет без глюк.

собственно на посылке картинке аналогичная история будет, но до картинок не добрался.

на счет сжатия я думаю пока неплохой вариант pack unpack

карма: 0

0
Ответов: 2059
Рейтинг: 131
#26: 2015-02-01 14:59:09 ЛС | профиль | цитата
Net2Com
Попробую сделать компонент для MPEG сжатия.
Будет гораздо лучше работать твоя схемка.
Только вот из меня программист, как из ...
Короче говоря сегодня ожидать не стоит.
карма: 6

0
Ответов: 209
Рейтинг: 1
#27: 2015-02-01 15:56:29 ЛС | профиль | цитата
flint2 писал(а):
Попробую сделать компонент для MPEG сжатия.


интересно будет глянуть

flint2 писал(а):
Только вот из меня программист, как из ...
Короче говоря сегодня ожидать не стоит.


да я ради интереса в хиасме это делаю... не к спеху все собрать...когда по кайфу так и делай

вообщем стабильно вроде работающий кусок voip с учетом плохой связи под freq 8000 (если кому нужно будет):
code_35026.txt

flint2, перевел байты в килобайты 2000б= 1,95кб думаю даже на модемах прокатит
карма: 0

0
файлы: 1code_35026.txt [1.3KB] [513]
Ответов: 2059
Рейтинг: 131
#28: 2015-02-01 16:40:16 ЛС | профиль | цитата
перевел байты в килобайты 2000б= 1,95кб

Для начала не плохо.
Потом подрихтуем.
карма: 6

0
Ответов: 62
Рейтинг: 1
#29: 2019-12-11 01:34:41 ЛС | профиль | цитата
Извиняюсь, что подымаю ушедшее вновь, но есть ли у кого-нибудь эта "bass без bass"? Охота посмотреть, а ссылка уже нежива.
карма: -1

0
Ответов: 20
Рейтинг: 5
#30: 2019-12-11 18:58:09 ЛС | профиль | цитата
Vaeltaja, тут https://forum.hiasm.com/topic/66392
карма: 0

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)