Я работаю над приложением для видеочата, и у меня проблемы с потоковой передачей UDP по сравнению с TCP.
Когда я использую конвейеры, указанные ниже, видеопотоки передаются приемлемо. ( Само приложение написано на python, но конвейеры в основном такие, как показано ниже)
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 port = 5000», а tcpclientsink на «udpsink host = nnn.nnn.nnn.nnnn port = 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 ' Я читал документы и страницы руководства, возился с различными параметрами udpsink, но все безрезультатно. Может ли кто-нибудь направить меня к (без сомнения очевидной) вещи, которую я совершенно не понимаю? Заранее благодарим :)