实时视频或音频流如何工作?

时间:2015-11-14 15:05:14

标签: c# .net audio-streaming http-live-streaming

我对生成html页面的服务器进行编码,以便用户可以在浏览器中查看这些页面。

它有onGetRequest事件,这是它的处理程序:

            var req = e.Request;
            var res = e.Response;

            var path = req.RawUrl.Replace("%20", " ");
            if (path == "/")
                path += "index.html";

            if (path.Contains("/../"))
            {
                res.StatusCode = (int)HttpStatusCode.Forbidden;
                return;
            }

            var content = this.ServerToRun.GetFile(path); //getting file to read
            if (content == null)
            {
                res.StatusCode = (int)HttpStatusCode.NotFound;
                return;
            }

            string extension = path.Substring(path.LastIndexOf('.'));

            string auto_mime = PageControls.MimeTypeDeterminer.GetMimeTypeFor(extension);

            if (string.IsNullOrEmpty(auto_mime))
            {
                if (extension.Length > 1)
                    res.ContentType = "application/" + extension.Substring(1);
                else
                    res.ContentType = "application/unknown";
            }
            else
                res.ContentType = auto_mime;

            if (path.EndsWith(".html") || path.EndsWith(".htm"))
                res.ContentEncoding = Encoding.UTF8;

            res.WriteContent(content); //sending content to client

我不明白为支持直播流需要做些什么。 例如,我可以从麦克风录制音频,因此文件每秒都会增加它的大小。

我可以在html代码中执行此操作:

<audio>
    <source src = "live.wav" type = "audio/wav" />
</audio>

服务器将接收该文件的查询,将其读取到最后并将其发送到客户端,但在此live.wav之后将获得更多服务器将不再发送给客户端的声音块。

所以,我被困住了,现场流如何运作以及我需要做什么?

我已经为每个客户端打开了WebSocket,所以我可以调用一些脚本。

1 个答案:

答案 0 :(得分:2)

您应该使用Transfer-Encoding: Chunked HTTP标头。此标头允许您以块的形式发送数据,而无需指定Content-Length,因此在服务器指示最后一个块已发送之前,客户端不会关闭套接字。请参阅https://en.wikipedia.org/wiki/Chunked_transfer_encoding