python - 如何使用 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。
- 我不知道这样做的最佳方法是什么。是否可以传递流引用或者我应该将字节块复制到缓冲区或其他任何东西中?
- 我尝试使用 StreamRequestHandler 上的socketserver 文档中的示例。他们正在使用 rfile 属性,但是当我这样做时,我有
AttributeError: 'MyTCPHandler' object has no attribute 'rfile'
- 此外,如果我将 MyTCPHandler.handle 方法设置为空,我会在每次连接后立即断开客户端
谢谢您的帮助
解决方案
推荐阅读
- sql - 当所有行都符合条件时过滤掉 SQL 结果
- python - 如何在python3中仅基于\ n来分行字符串?
- mongodb - 我应该如何在 Mongodb 的不同数据库集合中插入数据?
- java - 注册 mvnrepository.com 并上传一个 jar
- python - 使用matplotlib将非方形数据数组保存为没有空格的图形
- r - 修改 randomNames 环境以添加/删除名称
- mysql - 浮点值在使用 MySQL 的 if 语句中未给出预期结果
- r - R 用 distinct() 丢失数据
- java - 检查数组是否为回文
- python - 使用 python 查看 Azure 虚拟机是否已关闭