处理rtmp.py

时间:2015-12-27 07:59:13

标签: python python-2.7 socketserver

我目前正在使用rtmp.py作为RTMP直播服务器。它运作良好,但是一天几次,一个可能连接不良的人将会离开并留下他们的插座。更糟糕的是,除了杀死整个服务器之外什么都没有关闭Killcx甚至没有触及连接。这显然不太理想。虽然套接字仍然绑定到例如/ live1,但其他用户无法使用此挂载点。

该项目在Github上可用于源视图。我对Python非常陌生,在我的研究中,我认为客户端连接很难,导致无法关闭()。我试图寻求开发人员的帮助但没有成功。如果有人可以帮我实现补丁,我很乐意将其提交到项目页面,希望它也能使其他人受益。

rtmp.py source

如果您需要我提供更多信息,请告知我们。提前谢谢!

1 个答案:

答案 0 :(得分:0)

创作者联系了我。对于可能遇到此问题的未来用户,我提供的答案对我有用。运行(self)进行了以下更改:rtmp.py中的定义。根据个人喜好调整值或按原样使用。注释为'问题106'。

def run(self):
try:
    while True:
        sock, remote = (yield multitask.accept(self.sock))  # receive client TCP
        if sock == None:
            if _debug: print 'rtmp.Server accept(sock) returned None.'
            break
        if _debug: print 'connection received from', remote
        sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) # make it non-block
        sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) # Issue #106
        sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, 10) # Issue #106
        sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, 10) # Issue #106
        sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPCNT, 2) # Issue #106
        client = Client(sock, self)
except GeneratorExit: pass # terminate
except:
    if _debug: print 'rtmp.Server exception ', (sys and sys.exc_info() or None)

if (self.sock):
    try: self.sock.close(); self.sock = None
    except: pass
if (self.queue):
    yield self.queue.put((None, None))
    self.queue = None