4

我正在生成一个 MJpeg 流并尝试将其流式传输到 VLC 并在那里播放。

编码:

        public void SendMultiPartData(String contentType, Func<byte[]> getData)
    {
        MemoryStream mem = null;
        response.StatusCode = 200;
        for ( byte[] buffer = getData(); buffer != null && buffer.Length > 0; buffer = getData())
        {
            response.ContentType = "multipart/x-mixed-replace; boundary=--testboundary";
            ASCIIEncoding ae = new ASCIIEncoding();
            byte[] boundary = ae.GetBytes("\r\n--testboundary\r\nContent-Type: " + contentType + "\r\nContent-Length:" + buffer.Length + "\r\n\r\n");
            mem = new MemoryStream(boundary);
            mem.WriteTo(response.OutputStream);
            mem = new MemoryStream(buffer);
            mem.WriteTo(response.OutputStream);
            response.OutputStream.Flush();
        }
        mem.Close();
        listener.Close();
    }

如果我尝试使用 Firefox 打开流,则完全没有问题,尽管使用 VLC 它不起作用(VLC 似乎继续阅读但从不显示视频)

我一直在嗅探 VLC-to-VLC 流,它们似乎用作 HTTP 标头“application/octet-stream”而不是 multipart/x-mixed-replace

有任何想法吗 ?

提前谢谢,何塞

4

3 回答 3

4

何塞,我遇到了完全相同的问题。Firefox 播放我的流,但 VLC 没有。我通过了很多方法来解决这个问题,包括调试 VLC 源代码,但无处可去。顺便说一句,我的(REST)URL 看起来像http://server:port/livevideo/xyz 然后,我想我应该试试http://server:port/livevideo/xyz.mjpeg 猜猜看,VLC 开始播放视频了!我认为 VLC 可能需要比内容类型更多的提示才能确定它是 mjpeg 流。希望这可以帮助。

辛迪

于 2009-05-08T18:51:45.393 回答
0

你有没有试过这个:

Response.Buffer = false;
Response.BufferOutput = false;

或者这些的一些变化?

于 2009-05-01T21:39:33.203 回答
0

我无法让 Firefox 播放我的流(尽管 chrome 播放它还可以)。对于 VLC,我将缓冲区设置为 0 毫秒(在高级打开选项下),它似乎从那里开始工作,尽管我的数据速率正在扼杀它。

于 2009-07-09T20:21:43.360 回答