首页 > 解决方案 > 如何使用 Python 将媒体流从 SocketSever 传输到 Falcon API

问题描述

我正在开发一个小型 python 服务器,旨在接收 MP4 流作为套接字服务器,我想将数据传输到另一个通过 Falcon 的 GET 请求连接的客户端。

这是我发送媒体的 API 服务器:

class StreamResource:
    def on_get(self, req, resp):
        #Throw error rfile is not defined
        resp.stream = hlserver.socket_list[0].rfile.iter_content(io.DEFAULT_BUFFER_SIZE)

app = falcon.API()
app.add_route('/livestream.mp4', StreamResource())

这是我接收媒体的套接字服务器

class MyTCPHandler(socketserver.StreamRequestHandler):

    def setup(self):
      print(self.client_address[0],' connected')
      socket_list.append(self)

    def handle(self):
        #Have to keep this to prevent client to be disconnected
        self.data = self.request.recv(1024).strip()

    def finish(self):
      print(self.client_address[0],' disconnected')
      socket_list.remove(self)



class ThreadedSocketServer(object):

    def __init__(self, interval=1):
    
        self.interval = interval

        thread = threading.Thread(target=self.run, args=())
        thread.daemon = True                            # Daemonize thread
        thread.start()                                  # Start the execution

    def run(self):
      HOST, PORT = "localhost", 8001

      # Create the server, binding to localhost on port 9999
      server = socketserver.TCPServer((HOST, PORT), MyTCPHandler)

      # Activate the server; this will keep running until you
      # interrupt the program with Ctrl-C
      server.serve_forever()

所以我的主要目标是将数据从 MyTCPHandler.handle 传输到 StreamResource.on_get。

  1. 我不知道这样做的最佳方法是什么。是否可以传递流引用或者我应该将字节块复制到缓冲区或其他任何东西中?
  2. 我尝试使用 StreamRequestHandler 上的socketserver 文档中的示例。他们正在使用 rfile 属性,但是当我这样做时,我有AttributeError: 'MyTCPHandler' object has no attribute 'rfile'
  3. 此外,如果我将 MyTCPHandler.handle 方法设置为空,我会在每次连接后立即断开客户端

谢谢您的帮助

标签: pythonsocketssocketserverfalconframework

解决方案


推荐阅读