Конференция "Сети" » Прием большого потока данных по UDP
 
  • Сергей М. © (31.01.08 15:16) [20]

    > один заполняется, предыдущий отрисовывается


    А если отрисовка медленней заполнения ?
    Подумай ...
  • Anatoly Podgoretsky © (31.01.08 15:41) [21]
    > MBo  (31.01.2008 14:32:19)  [19]

    Для испытания временно отключи отрисовку.
  • MBo © (31.01.08 15:47) [22]
    >А если отрисовка медленней заполнения ?
    тогда бы я ставил в очередь и отрисовывал бы только часть кадров.

    В данном случае хватает двух буферов.
    14400 пакетов в секунду, 0.07 мс один пакет
    Отрисовка сначала у меня происходила более сложно, и занимала 3-4 мс, это по времени порядка 60 пакетов, около 40 КБ данных.
    Визуально - если критерий отрисовки - приход нулевой строки, то в районе 20-50 строк было много выпавших.
    Сейчас отрисовка быстрее, и артефактов на моей машине (Athlon 3500) практически нет, но на машинах вдвое медленнее - все-таки появляются.

    Собственно, интересно - так и должна машина нагружаться при приеме из сети потока такой интенсивности, или руки нужно выпрямлять?

    (С цифрового видеограббера без проблем принимаю, достаточно сложным образом обрабатываю и отрисовываю втрое-вчетверо больший поток)
  • Anatoly Podgoretsky © (31.01.08 16:28) [23]
    > MBo  (31.01.2008 15:47:22)  [22]

    100 мегабит это ничто для процессора, проблема не в количестве, а в другом месте.
  • MBo © (31.01.08 18:31) [24]
    >а в другом месте.
    Вот и хочется понять, что это за место ;)
  • Anatoly Podgoretsky © (31.01.08 20:05) [25]
    > MBo  (31.01.2008 18:31:24)  [24]

    Э, ну ты даешь, программа то у тебя, задача сложная, явно не для форума, да и сеть у тебя работает за пределами возможностей. 11 мб не любая сеть обеспечит, а еще твоя обработка.
    Так что придется тебе самому грызть.
  • DVM © (31.01.08 23:58) [26]

    > MBo ©

    А что за девайс такой? IP камера? Просто знакомая мне тематика.
  • DVM © (01.02.08 00:01) [27]

    > Собственно, интересно - так и должна машина нагружаться
    > при приеме из сети потока такой интенсивности, или руки
    > нужно выпрямлять?

    Нет, не должна. Вся нагрузка возникает, если в принимаемом потоке надо. что то искать, выцеплять, декодировать. Отрисовка это тоже мелочи.
  • Slym © (01.02.08 04:51) [28]
    procedure x;
    type
     TLineRec=packed record
       Info:word;
       Data:array[0..192*4-1] of char;
     end;
    var
     Bitmap:TBitmap;
     Line:TLineRec;
     FromLen,LineNum,CadrNum,Wrd:integer;
     WSResult:integer;
     UD:TSocket;
     Addr:TSockAddr;
    begin
     Bitmap:=TBitmap.Create;
     try
       Bitmap.PixelFormat:=pf32bit;
       Bitmap.Width:=192;
       Bitmap.Height:=192;
       while not Terminated do begin
         FromLen := SizeOf(TSockAddr);
         WSResult := RecvFrom(UD, Line, SizeOf(Line), 0, Addr, FromLen);
         if WSResult<>SizeOf(Line) then continue;
         Wrd := Swap(Line.Info);
         LineNum:= Wrd and $3FF;
         if (LineNum>-1) and (LineNum<Bitmap.Height) then
           Move(Line.Data,Bitmap.ScanLine[LineNum]^,SizeOf(Line.Data));

         if LineNum = Bitmap.Height-1 then
         begin
           Inc(FrameCount);
           FCanvas.Lock;
           try
             FCanvas.Draw(0,0,Bitmap);
           finally
             FCanvas.Unlock;
           end;
         end;
       end;
     finally
       Bitmap.Free;
     end;
    end;

  • ага (03.02.08 11:46) [29]
    2 MBo ©

    WSARecv c кучей буферов сразу под весь кадр не пробовал? Те буфер один, но разбит на несколько, по числу строк.

    Синхронизацию сообщениями я бы выкинул. Как и многопоточность, скоре всего, использовал бы асинхронный режим. В любом случае, синхронизация здесь - лишние потери, имхо. Два буфера, один рисуется, второй принимается. Буферы переключает "приемник", а по WM_PAINT выводится "рисуемый", независимо от того, было ли обновление.

    Как гипотеза - может вывод через DirectX побыстрее будет. Не знаю, не спец.
  • Slym © (04.02.08 05:13) [30]
    если картинка боле менее статичная, то потеря небольшого колва, каждый раз разных, строк не должна вызывать видимых артефактов...
    если конечно старый кадр не затирать "чернухой", а оставлять отображая новый "поверх" старого
 
Конференция "Сети" » Прием большого потока данных по UDP
Есть новые Нет новых   [134431   +14][b:0][p:0.002]