标签: multipart-mixed-replace

使用Twisted的twisted.web类,如何刷新传出缓冲区?

我使用Twisted创建了一个简单的http服务器,它发送Content-Type:multipart/x-mixed-replace标头.我正在使用它来测试我想要设置为接受长期流的http客户端.

出现的问题是我的客户端请求挂起,直到http.Request调用self.finish(),然后它立即接收所有多部分文档.

有没有办法手动将输出缓冲区刷新到客户端?我假设这就是为什么我没有收到单独的多部分文件.

#!/usr/bin/env python

import time

from twisted.web import http
from twisted.internet import protocol

class StreamHandler(http.Request):
    BOUNDARY = 'BOUNDARY'

    def writeBoundary(self):
        self.write("--%s\n" % (self.BOUNDARY))

    def writeStop(self):
        self.write("--%s--\n" % (self.BOUNDARY))

    def process(self):
        self.setHeader('Connection', 'Keep-Alive')
        self.setHeader('Content-Type', "multipart/x-mixed-replace;boundary=%s" % (self.BOUNDARY))

        self.writeBoundary()

        self.write("Content-Type: text/html\n")
        s = "<html>foo</html>\n"
        self.write("Content-Length: %s\n\n" % (len(s)))
        self.write(s)
        self.writeBoundary()
        time.sleep(2)

        self.write("Content-Type: text/html\n")
        s = "<html>bar</html>\n"
        self.write("Content-Length: %s\n\n" % (len(s)))
        self.write(s)
        self.writeBoundary()
        time.sleep(2)

        self.write("Content-Type: text/html\n")
        s = "<html>baz</html>\n"
        self.write("Content-Length: %s\n\n" % (len(s)))
        self.write(s)

        self.writeStop()

        self.finish()

class StreamProtocol(http.HTTPChannel):
    requestFactory …
Run Code Online (Sandbox Code Playgroud)

python twisted multipart-mixed-replace

9
推荐指数
1
解决办法
5818
查看次数

通过http从mjpeg流中提取其他数据

我通过http获取mjpeg流并使用<img>标签查看它.非常标准,没有问题,一切都正确流.

但是,与编码的jpg数据一起,http响应中有一个我想要访问的UTC时间戳.基本上,我希望能够显示每帧的匹配时间.以下是我正在使用的每个框架的响应:

Content-Type: image/jpeg
Content-Length: 60189
Time-Stamp: 51961243969
UTC-Time: 1349439599864
Flags: 2097153
PlayID: 1
Camera-Type: Halocam IP
Connection: Close

[encoded jpg data]
--myboundary
Run Code Online (Sandbox Code Playgroud)

目前,<img>标签正在获取该流并直接解释jpgs.无论如何通过javascript拦截,解释或分离UTC时间值,以便我可以在页面上显示它?我不控制http响应,但如果通过某些更改可以获得解决方案,我可以与控制它的人交谈.

javascript image http mjpeg multipart-mixed-replace

7
推荐指数
1
解决办法
1394
查看次数

将HTTP multipart/x-mixed-replace保存活动流中的JPEG图像保存到ubuntu服务器

我有一个摄像头,通过连续的多部分http流将JPEG图像发送到网络服务器.当我访问流的IP地址时,浏览器将此流读取为一系列模仿视频的图像.我想将此流中的文件下载到远程服务器.

我不知道如何解析流并将文件直接保存到我的ubuntu服务器,或者通过我的ruby on rails应用程序文件系统.

以下是浏览器查看流的方式:

Response Headers:
HTTP/1.1 200 OK
Content-Type: multipart/x-mixed-replace; boundary=frame

Request Headers:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Cache-Control: max-age=0
Connection: keep-alive
DNT: 1
Host: my-ip-address
Run Code Online (Sandbox Code Playgroud)

请帮我找到解决这个问题的正确方法.

http keep-alive multipart-mixed-replace ruby-on-rails-4 ubuntu-16.04

6
推荐指数
1
解决办法
914
查看次数

在 Node.js 中发出 HTTP 请求并接收 multipart/x-mixed-replace 响应

我需要向外部服务器发出 HTTP GET 请求才能开始接收事件。请求后我立即得到multipart/x-mixed-replace回复。当事件发生时,它会作为 XML 消息与指示该部分结束的边界一起发送。

现在我必须在 Node.js 中实现它。对于正常请求,我使用node-rest-client,调用其get()方法并将我的逻辑放入方法的回调中。问题是回调仅在响应完成时执行,并且multipart/x-mixed-replace直到连接关闭时才会执行。

还有其他 NPM 模块可以做到这一点吗?我搜索了 NPM 注册表,但发现结果似乎不适合该任务。还是在纯 Node 中完成更好?我就是这样,请举个例子。

stream multipart-mixed-replace node.js

5
推荐指数
1
解决办法
2624
查看次数

multipart/x-mixed-replace 内容类型的视频流问题

美好的一天,我使用 esp8266 模块作为服务器,带有摄像头模块通过 wifi 连续传输 jpeg 图像。我想同时在同一个浏览器窗口中播放流视频、文本和按钮。所以我用 HTML 创建了网页,我使用“multipart/x-mixed-replace”内容类型作为流窗口、文本和按钮,因为我读到这种类型接受各种子类型,如 html 和图像。流媒体窗口有效,但...

  1. 当我向服务器发送视频请求时,我会看到视频流一段时间,然后屏幕显示文本和按钮几分之一秒,然后视频流再次继续。它们永远不会一起出现在同一个窗口中。它们只是闪烁。
  2. 流窗口位于浏览器选项卡的中心,周围是灰色背景,我不知道如何更改位置和颜色,也不知道为什么它们会这样显示。
  3. 当我打开浏览器的“检查元素”选项以检查从服务器发送的代码(我编写的 HTML 代码)时,我注意到在标签内,有 4 行 HTML 代码我没有写在我的代码中。他们只是不知从哪里冒出来,我不知道如何阻止他们。

总而言之,我想要做的是在同一个浏览器窗口中同时拥有流式视频窗口、文本和按钮。

下面是我编写的 HTML 代码和流窗口的图像,我相信我在内容类型上做错了或者我没有以正确的方式使用它。

HTTP/1.1 200 OK
Content-Type: multipart/x-mixed-replace; boundary=frame

--frame                     //this part shows the jpeg image captured
Content-Type: image/jpeg
..
fetch jpeg image part
..
--frame                     //this part hopefully adds text and buttons 
Content-Type: text/html     // along with the streaming video window 
<!DOCTYPE HTML>             //This is the idea at least...

 <html>
    <body>
        <h1 style="position:relative; left:25px;"> &#9875 Observation Panel &#9875</h1> …
Run Code Online (Sandbox Code Playgroud)

html video content-type multipart-mixed-replace mime-types

3
推荐指数
1
解决办法
8176
查看次数

multipart/x-mixed-replace PNG 流始终显示最后一帧之前的帧

在制作了一个通过multipart/x-mixed-replace Content-Type标头将 PNG 图像流式传输到浏览器的程序后,我注意到标签中只显示最后一帧<img>,而不是最近发送的帧。

这种行为非常烦人,因为我只在图像更改时发送更新以节省带宽,这意味着当我等待更新时,屏幕上将显示错误的帧。

具体来说,我使用的是 Brave 浏览器(基于 chromium),但由于我尝试了上下“屏蔽”,我认为这个问题至少也出现在其他基于 chromium 的浏览器中。

搜索问题只会产生一个相关结果(以及许多不相关的结果),即HowToForge线程,没有回复。同样,我也认为问题与缓冲有关,但我确保刷新缓冲区无济于事,这与线程中的用户非常相似。用户确实报告说它可以在他们的一台服务器上运行,但不能在另一台服务器上运行,这让我相信它可能与特定的 HTTP 标头或类似的东西有关。我的第一个猜测是Content-Length因为浏览器可以判断图像何时完整,但它似乎没有任何效果。

所以本质上,我的问题是:有没有办法告诉浏览器显示最新的multipart/x-mixed-replace而不是之前的?而且,如果这不是标准行为,原因可能是什么?

当然,这是相关的源代码,尽管我认为这更多的是一个一般的 HTTP 问题,而不是与代码有关的问题:

服务器

package routes

import (
    "crypto/md5"
    "fmt"
    "image/color"
    "net/http"
    "time"

    brain "path/to/image/generator/module"
)

func init() {
    RouteHandler{
        function: func(w http.ResponseWriter, r *http.Request) {
            w.Header().Set("Content-Type", "multipart/x-mixed-replace; boundary=frame")
            w.Header().Set("Cache-Control", "no-cache") // <- Just in case
            w.WriteHeader(200)

            // If the request contains a token and the token maps to a valid "brain", start consuming …
Run Code Online (Sandbox Code Playgroud)

javascript http go multipart-mixed-replace

1
推荐指数
1
解决办法
7390
查看次数