如何使ZeroMQ使用UDP?



我似乎无法使用UDP或找到如何在PyZMQ中使用它的任何示例。

我希望能够发送一个h264流。我能够通过在Python Opencv和Sockets上使用@nathancy答案来使用TCP -用h264编码的流媒体视频。

但我似乎无法找到如何在PyZMQ中使用UDP的任何示例

我需要做什么来用UDP而不是TCP发送数据以提高速度?

如果一个帧丢失了,它就丢失了,我不需要重新发送它。这就是为什么我想使用UDP

Q: 我需要做什么来用UDP而不是TCP发送数据…?

:
好吧,
ZeroMQ有一种方法使用UDP-transport为实用通用组播(PGM)协议,无论是ZeroMQ{ pgm:// | epgm:// }-transport-classes。然而,需要注意的是:

pgm传输实现需要访问原始IP套接字。在某些操作系统上,可能需要额外的权限才能进行此操作。不需要与其他PGM实现直接互操作性的应用程序被鼓励使用epgm

因此,对于ZeroMQ经典PUB / SUB数据流,可以这样设置:


//
// Connecting to the multicast address 239.192.1.1, port 5555,
// using the first Ethernet network interface on Linux
// and the Encapsulated PGM protocol
// 
rc = zmq_connect( aMulticastOverUDP_socket, "epgm://eth0;239.192.1.1:5555" );
assert (rc == 0 && "____ Well, something went wrong on epgm:// connect" );

在Python中,可能听起来像:

#----------------------------------------------------- start Context()-engine
aContext = zmq.Context( nIoTHREADs )
#----------------------------------------------------- start Socket()-instances
aUdpPUB  = aContext.socket( zmq.PUB )
#----------------------------------------------------- start settings
aUdpPUB.setsockopt( zmq.LINGER, 0 )
aUdpPUB.setsockopt( zmq....,    ... )
...
#----------------------------------------------------- start serving
aUdpPUB.bind( "epgm://eth0;239.192.1.1:5555" )
...
#----------------------------------------------------- start dismantling
aUdpPUB.close()
aContext.term()

为了微调端到端加密性能,必须调整相关的Context()-实例的zmq_setsockopt()-参数,以压缩最大传输

最新更新