Hls协议工作主要分为两大块,一块是http协议,一块是ts码流的封装。前面已经成功完成了ts码流的封装,下面的重点工作就是完成http协议的实现。

我是C#的忠实粉丝,所以采用了HttpListener类来实现。

            HttpListener listerner = new HttpListener
            {
                AuthenticationSchemes = AuthenticationSchemes.Anonymous
            };
            listerner.Prefixes.Add("http://192.168.150.130:8080/");
            listerner.Start();

这里卡了我好几个小时,直到今天早上醒的早,想来试一下。6点就起来了,笨鸟先飞的鸟儿运气不会差。

在下面的时间,终于找到了原因。

Hls之http协议实现

 我存在的问题是,在本机可以建立tcp连接,但是换了其他电脑,完全不行,另外,我把程序放到win7下面运行,又是正常的。

Hls之http协议实现

 就是win10的这个在搞鬼。关了之后,一切正常。

这个方式,可以实现应答字符串了,但是2进制还需要研究。

                    HttpListenerContext httpListenerContext = listerner.GetContext();
                    Console.WriteLine("url ={0}", httpListenerContext.Request.RawUrl);
                    if(httpListenerContext.Request.RawUrl.Contains("m3u8"))
                    {
                        httpListenerContext.Response.StatusCode = 200;
                        using (StreamWriter writer = new StreamWriter(httpListenerContext.Response.OutputStream))
                        {
                            writer.WriteLine(Getextm3u());
                        }
                    }

Hls之http协议实现

 研究api中,如何应答ts流的2进制数据。

在微软的官网找到了实例,开心。

https://docs.microsoft.com/zh-cn/dotnet/api/system.net.httplistener?view=netframework-4.7.2

技术工作基本完善,回公司开始做集成测试。

相关文章: