当前位置: 首页 > Web前端 > HTML5

WebSocket+MSE——HTML5直播技术解析

时间:2023-04-05 18:48:10 HTML5

作者|刘博(优拍云多媒体开发工程师)目前,为了满足相对火热的移动端网络直播需求,一系列HTML5直播技术迅速发展起来。可用于HTML5的常见直播技术包括HLS、WebSocket和WebRTC。今天给大家介绍一下WebSocket和MSE相关的技术要点,最后通过一个例子来展示具体的用法。文章大纲WebSocket协议简介WebSocket客户端/服务器API简介MSE简介fMP4简介DemoShowWebSocket常见的Web应用程序是围绕HTTP请求/响应模型构建的。所有HTTP通信都由客户端控制。客户端向服务器发送请求。服务器接收并处理请求后,将结果返回给客户端,客户端显示数据。由于这种模式不能满足实时应用的需要,于是出现了SSE、Comet等“服务器推送”长连接技术。WebSocket是一种基于TCP连接的通信协议,可以在单个TCP连接上进行全双工通信。WebSocket在2011年被IETF定义为标准RFC6455,并由RFC7936补充,WebSocketAPI被W3C定义为标准。WebSocket是在TCP上独立创建的协议。HTTP协议中的概念与WebSocket无关。唯一相关的是,当使用HTTP协议的101状态码进行协议切换时,使用的TCP端口为80,可以绕过大部分防火墙的较大限制。WebSocket握手为了更方便的部署新的协议,HTTP/1.1引入了Upgrade机制,使客户端和服务端可以借助现有的HTTP语法升级到其他协议。此机制在RFC7230的第6.7节升级中有详细描述。发起HTTP/1.1协议升级,客户端必须在请求头中指定这两个字段▽>Connection:UpgradeUpgrade:protocol-name[/protocol-version]如果服务端同意升级,需要这样响应▽>HTTP/1.1101SwitchingProtocolsConnection:upgradeUpgrade:protocol-name[/protocol-version][...datadefinedbynewprotocol...]可以看到HTTPUpgrade响应的状态码是101,响应可以使用新的协议数据格式定义文本。WebSocket握手利用了这种HTTP升级机制。握手完成后,后续数据传输将直接通过TCP完成。WebSocketJavaScriptAPI目前主流的浏览器都提供了WebSocket的API接口,可以向服务器发送消息(文本或二进制),接收事件驱动的响应数据。步骤1。查看浏览器是否支持WebSocket>if(window.WebSocket){//WebSocket代码}Step2.建立连接>varws=newWebSocket('ws://localhost:8327');Step3.注册回调函数和发送和接收数据分别注册WebSocket对象的onopen、onclose、onerror和onmessage回调函数。通过ws.send()发送数据,这里不仅可以发送字符串,还可以发送Blob或者ArrayBuffer类型的数据。如果接收二进制数据,需要将连接对象的格式设置为blob或arraybuffer。ws.binaryType='arraybuffer';WebSocketGolangAPI服务端WebSocket库我推荐使用Google自带的http://golang.org/x/net/webso...,配合net/http使用非常方便。也可以通过websocket.Handler把WebSocket的handler函数转成http.Handler,这样就可以和net/http库一起使用了。然后通过websocket.Message.Receive接收数据,通过websocket.Message.Send发送数据。具体代码可以看下面的Demo部分。MSE在介绍MSE之前,我们先了解一下HTML5