Работам на апликација за видеохет и имам проблеми со преносот на UDP наспроти TCP.
Кога ги користам цевководи подолу, видеото се емитува прифатливо. ( Самата апликација е во питон, но цевководи се во суштина подолу)
sender:
gst-launch-0.10 v4l2src ! video/x-raw-yuv,width=320,height=240 !
theoraenc ! oggmux ! tcpclientsink host=nnn.nnn.nnn.nnn port = 5000
receiver:
gst-launch-0.10 tcpserversrc host=nnn.nnn.nnn.nnn port=5000
! decodebin ! xvimagesink
Сепак, бидејќи оваа апликација треба да се изведува преку / преку NAT, ми треба UDP стриминг. Кога ќе го вклучам tcpserversrc на „udpsrc порта = 5000“ и tcpclientsink на „udpsink host = nnn.nnn.nnn.nnnn порта = 5000“, перформансите паѓаат до точката каде што компјутерот што прима добива една рамка на секои 5 секунди или така. (Ова се случува дури и кога двата потока се извршуваат на иста машина)
Гасоводот што испраќа го генерира следното (еднаш):
WARNING: from element /GstPipeline:pipeline0/GstUDPSink:udpsink0:
Internal data flow problem.
Additional debug info:
gstbasesink.c(3492): gst_base_sink_chain_unlocked (): /GstPipeline:pipeline0
/GstUDPSink:udpsink0:
Received buffer without a new-segment. Assuming timestamps start from 0.
... и гасоводот примател генерира (на секои 20 секунди или така):
WARNING: from element /GstPipeline:pipeline0/GstXvImageSink:xvimagesink0:
A lot of buffers are being dropped.
Additional debug info:
gstbasesink.c(2739): gst_base_sink_is_too_late (): /GstPipeline:pipeline0
/GstXvImageSink:xvimagesink0:
There may be a timestamping problem, or this computer is too slow.
I прочитав документи и управувања, завиткани со различни параметри до удирање, сето тоа без добар ефект. Може ли некој да ме насочи кон (без сомнение очигледно) нешто што целосно не го добивам? Однапред благодарам :) знам: зошто да се тркалаш свој? Но, трпи се со мене). Следниве три датотеки содржат минимален пример: ...
Наидов на изненадувачко откритие при спроведување на идиомот за pimpl со домашен час за покажувач (знам: зошто да се тркалаш свој? Но, трпи се со мене). Следните три датотеки содржат минимален пример:
Покажувач.h:
#pragma once
template <typename T>
class Pointer
{
public:
Pointer(T*p=0)
: _p(p)
{
}
virtual ~Pointer()
{
delete _p;
}
private:
void operator=(const Pointer&);
Pointer(const Pointer&);
private:
T*_p;
};
Foo.h:
#pragma once
#include "Pointer.h"
struct Foo
{
Foo();
~Foo();
private:
void operator=(const Foo&);
Foo(const Foo&);
private:
Pointer<struct FooPrivate> p;
};
main.cpp:
#include "Foo.h"
int main(int argc, char* argv[])
{
Foo foo;
return 0;
}
Не ми пречи како изгледаат внатрешноста на Foo.cpp
. Кога составувам main.cpp
со MSVC 2008, ќе го добијам предупредувањето:
pointer.h(13) : warning C4150: deletion of pointer to incomplete type 'FooPrivate'; no destructor called
Предупредувањето може да се избегне со отстранување на клучниот збор виртуелен од уништувачот Поинтер.
Ова за мене нема смисла. Дали е ова предупредување легитимно, или е грешка во компајлерот MSVC? Ако е така, дали можам безбедно да го игнорирам предупредувањето?
Знам дека нема смисла во овој случај да се направи уништувачот виртуелен, но запомнете, ова е само минимален примерен пример. Мојот оригинален код е многу посложен.