【问题标题】:Mjpeg streaming not working on google chromeMjpeg 流无法在谷歌浏览器上运行
【发布时间】:2013-09-01 11:58:01
【问题描述】:

我是 mjpeg 流媒体的新手。我正在尝试构建一个 mjpeg 流服务器应用程序,将 mjpeg 视频流式传输到运行 firefox 或 google chrome 的客户端。目前,流媒体在 Firefox 上运行良好,但拒绝在 google chrome 上运行。有谁知道这可能是为什么? (我已经下载了最新版本的 google chrome 和 firefox for windows)以下是我的 C# 类中的代码 sn-p,它将 http 头和图像流(内存流)写入网络流:

 /* Write the HTTP header to the network stream */
        public void WriteHeader()
        {
            Write("HTTP/1.1 200 OK\r\n"                                 +
                  "Content-Type: multipart/x-mixed-replace; boundary="  +
                    this.Boundary                                       +
                    "\r\n"
                 );

            this.Stream.Flush();
        }

        /* To write text to the stream */
        private void Write(string text)
        {
            byte[] data = BytesOf(text);
            this.Stream.Write(data, 0, data.Length);
        }

        /* Write header followed by the provided memory stream*/
        public void Write(MemoryStream imageStream)
        {
            StringBuilder sb = new StringBuilder();
            sb.AppendLine();
            sb.AppendLine(this.Boundary);
            sb.AppendLine("Content-Type: image/jpeg");
            sb.AppendLine("Content-Length: " + imageStream.Length.ToString());
            sb.AppendLine();
            Write(sb.ToString());
            imageStream.WriteTo(this.Stream);
            Write("\r\n");
            this.Stream.Flush();
        }

        /* To get bytes from the from the specified string */
        private static byte[] BytesOf(string text)
        {
            return Encoding.ASCII.GetBytes(text);
        }   

以下是代码 sn-p,它调用适当的方法将标头和图像数据写入网络流:

/* Sends data to the specified client */
    private void SendData(Socket client)
    {
            MjpegWriter jw = new MjpegWriter(new NetworkStream(client, true));
            jw.WriteHeader();
            foreach (var memstream in this.ProcessImages())
            {
                Thread.Sleep(50);
                jw.Write(memstream);
            }
    }

【问题讨论】:

    标签: c# google-chrome mjpeg


    【解决方案1】:

    我有同样的问题(Chrome 29 中的错误)。我发现如果您将运动 jpeg 流嵌入到 html 文件中,例如:

    <html><body>
    <img src="http://192.168.1.77:8081">
    </body></html>
    

    您现在可以在 Chrome 29 中查看流。

    【讨论】:

    • 谢谢!像魅力一样工作。您知道 Firefox 有一个好的解决方案吗?即使 firefox 通过简单地输入 URL(IP 地址和端口号)来流式传输 mjpeg,它也不能有效地回收内存,并且当它开始占用过多内存时会被操作系统强制关闭。
    【解决方案2】:

    我认为这是最新版 Chrome 的错误。我可以在 Chrome v28 上很好地使用 mjpg_streamer,但 v29 会因空白屏幕而停止。运行 oldchrome.exe 有时会留在程序 files\google\chrome\application 下,motion jpeg 再次开始工作。我向 Goog 发送了一个错误通知,但不确定它会走多远。

    【讨论】:

    • 谢谢!我尝试使用 v28,但不幸的是,v28 对我不起作用。我创建了一个小型 html 网页(如上所述),mjpeg 流现在在 v29 中运行良好。它也可以在 Opera 上完美运行。
    【解决方案3】:

    我从 Chromium 博客发现 Chrome 29 不支持 x-mixed-replace:

    我们已移除对 multipart/x-mixed-replace 主要资源的支持。我们 将继续支持多部分图像和动画图像。

    奇怪!

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-27
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-02
    相关资源
    最近更新 更多