You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hololens视频流跨网转发:Flask+ZMQ分片传输故障排查

问题诊断与解决方案

核心问题分析

拆分脚本后视频无法加载,大概率是这几个原因:

  • ZMQ传输时把视频字节流拆成了不完整的帧/MP4原子单元,导致前端播放器无法解析
  • PUSH/SUB的消息队列积压或传输延迟,造成流的连续性断裂
  • Flask的yield输出没有处理好字节流的完整性,播放器收到残缺数据后中断加载

关键修复步骤

1. 按MP4原子单元拆分传输(PUSH端)

Hololens返回的MP4流是由一个个原子单元(box)组成的,不能随便按固定字节块拆分。修改请求脚本,先传输分片长度,再传内容,确保SUB端能完整接收:

import requests
import zmq
import struct

context = zmq.Context()
socket = context.socket(zmq.PUSH)
socket.connect("tcp://你的服务器IP:5555")
# 设置高水位线,避免消息积压
socket.setsockopt(zmq.SNDHWM, 10)

# 流式拉取Hololens视频流
response = requests.get(
    "https://IP/api/holographic/stream/live_high.mp4?holo=true&pv=true&mic=true&loopback=true",
    stream=True
)
response.raise_for_status()

# 按4KB块读取,先传长度再传内容
for chunk in response.iter_content(chunk_size=4096):
    if chunk:
        # 用4字节无符号整数打包分片长度(网络字节序)
        socket.send(struct.pack('!I', len(chunk)))
        socket.send(chunk)

2. 完整重组流后再输出(SUB+Flask端)

Flask端必须确保每次yield的是完整的分片,不能中途截断。修改接收脚本:

from flask import Flask, Response
import zmq
import struct

app = Flask(__name__)

context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect("tcp://你的服务器IP:5555")
socket.setsockopt_string(zmq.SUBSCRIBE, "")
# 匹配PUSH端的高水位线
socket.setsockopt(zmq.RCVHWM, 10)

def generate_stream():
    while True:
        # 先接收分片长度
        len_data = socket.recv()
        chunk_len = struct.unpack('!I', len_data)[0]
        # 按指定长度接收完整分片
        chunk = socket.recv(chunk_len)
        yield chunk

@app.route('/stream')
def stream():
    return Response(
        generate_stream(),
        mimetype='video/mp4'
    )

# 用gevent提升异步性能(需先pip install gevent)
from gevent.pywsgi import WSGIServer
if __name__ == '__main__':
    http_server = WSGIServer(('0.0.0.0', 8080), app)
    http_server.serve_forever()

3. 额外优化点

  • 如果Hololens返回的是TS流,把Flask的mimetype改成video/MP2T,播放器兼容性更好
  • 测试时先用ffplay http://你的服务器IP:8080/stream验证,比浏览器更易发现流的问题
  • 检查PUSH和SUB端的分片长度是否一致,排查丢包或截断问题

内容的提问来源于stack exchange,提问作者Iván Zamora

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 07:53:27