python - 将 udp m2tp 单播流代理到流式 sanic.response 时 CPU 使用率差异很大
问题描述
我开发了一个代理,它可以让我使用我的 ISP 提供的追赶视频作为通过 http 的 udp 单播 m2tp 流。为此,我使用 python、asyncio 和 Sanic。
它工作得很好,但有些事情我无法解释。一些流使用不到 8% 的一个 cpu 核心 (i7-3770),而其他特定流则消耗多达 30%。所有的流原则上都是相同的,我不对它们做任何处理,只是从 udp 套接字读取并写入流sanic.Response
,基本上是这样的:
import asyncio_dgram
import socket
from contextlib import closing
from Sanic import Sanic, response
app = Sanic()
MIME = 'video/MP2T'
@app.get('/some/url')
async def handle_url(request):
host = socket.gethostbyname(socket.gethostname())
client_port = 43545
async def my_streaming_fn(response):
with closing(await asyncio_dgram.bind((host, client_port))) as stream:
while True:
data, remote_addr = await stream.recv()
await response.write(data)
return response.stream(my_streaming_fn, content_type=MIME)
所有流都到达一个单独的 vlan,所有 ts 数据包都是 1344 字节(1316 没有标头)。即使来自相同的原始电视频道,我也看到了相同比特率的流的差异。
我缺少什么可以解释某些流和其他流之间 cpu 使用率的巨大差异?任何想法?
解决方案
推荐阅读
- opencv - 旋转和平移不变性的特征检测器?
- sql - 查询以查找返回多余结果集的重复项
- react-native - ReactNative:使用 react-native-push-notification 库接收通知时,我的应用程序崩溃
- vba - 将 PDFMaker 插件与 Outlook VBA 一起使用
- scenekit - 是否将场景工具包节点附加到 ARAnchor 只是将节点的变换设置为锚点的变换?
- iis - 我们可以在 IIS 上托管 ASP.NET Core 2.2 MVC 项目而不发布它吗?
- angular - 使用实现接口的对象时,在双向表单绑定期间出现未定义错误
- php - Laravel 通过 API 上传多张图片
- graphdb - ontext graphdb 在工作台启动并运行时无法锁定问题
- reactjs - React Reloading Page 不适用于服务器,但适用于 localhost