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点就起来了,笨鸟先飞的鸟儿运气不会差。
在下面的时间,终于找到了原因。
我存在的问题是,在本机可以建立tcp连接,但是换了其他电脑,完全不行,另外,我把程序放到win7下面运行,又是正常的。
就是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());
}
}
研究api中,如何应答ts流的2进制数据。
在微软的官网找到了实例,开心。
https://docs.microsoft.com/zh-cn/dotnet/api/system.net.httplistener?view=netframework-4.7.2
技术工作基本完善,回公司开始做集成测试。