我似乎无法使用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()
-参数,以压缩最大传输