技术控

    今日:29| 主题:49448
收藏本版 (1)
最新软件应用技术尽在掌握

[其他] HTML5 直播协议之 WebSocket 和 MSE

[复制链接]
落日夕阳 发表于 2016-12-2 16:35:44
47 3

立即注册CoLaBug.com会员,免费获得投稿人的专业资料,享用更多功能,玩转个人品牌!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
当前为了满足比较火热的移动 Web 端直播需求, 一系列的 HTML5 直播技术迅速的发展了起来.
  常见的可用于 HTML5 的直播技术有 HLS, WebSocket 与 WebRTC. 今天我要向大家介绍一下 WebSocket 与 MSE 相关的内容, 并在最后通过一个实际的例子, 来展示其具体的用法.
  大纲

  
       
  • WebSocket 协议介绍.   
  • WebSocket Client/Server API 介绍.   
  • MSE 介绍.   
  • fMP4 介绍.   
  • Demo 展示.  
  WebSocket

  通常的 Web 应用都是围绕着 HTTP 的请求/响应模型而构建的. 所有的 HTTP 通信都是通过客户端来控制的, 都是由客户端向服务器发出一个请求, 服务器接收和处理完毕后再返回结果给客户端, 客户端再将数据展现出来. 这种模式不能满足实时应用的需求, 于是出现了 SSE, Comet 等 “服务器推” 的长连接技术.
  WebSocket 是直接基于 TCP 连接之上的通信协议, 可以在单个 TCP 连接上进行全双工的通信. WebSocket 在 2011 年被 IETF 定为标准 RFC 6455, 并被 RFC 7936 所补充规范, WebSocket API 被 W3C 定为标准.
  WebSocket 是独立的创建在 TCP 上的协议, HTTP 协议中的那些概念都不复存在, 和 HTTP 的唯一关联是使用 HTTP 协议的 101 状态码进行协议切换, 使用的 TCP 端口是 80, 可以用于绕过大多数防火墙的限制.
   
HTML5 直播协议之 WebSocket 和 MSE-1 (服务器,全双工,HTML5,客户端,2011)

  WebSocket 握手

   为了更方便地部署新协议,HTTP/1.1 引入了 Upgrade 机制, 它使得客户端和服务端之间可以借助已有的 HTTP 语法升级到其它协议. 这个机制在 RFC7230 的 6.7 Upgrade ) 一节中有详细描述.
  要发起 HTTP/1.1 协议升级,客户端必须在请求头部中指定这两个字段:
  [code]Connection: Upgrade
Upgrade: protocol-name[/protocol-version][/code]  如果服务端同意升级, 那么需要这样响应:
  [code]HTTP/1.1 101 Switching Protocols
Connection: upgrade
Upgrade: protocol-name[/protocol-version]

[... data defined by new protocol ...][/code]   可以看到, HTTP Upgrade 响应的状态码是 101 , 并且响应正文可以使用新协议定义的数据格式.
  WebSocket 握手就利用了这种 HTTP Upgrade 机制. 一旦握手完成,后续数据传输就直接在 TCP 上完成.
  WebSocket JavaScript API

  目前主流的浏览器提供了 WebSocket 的 API 接口, 可以发送消息(文本或者二进制)给服务器, 并且接收事件驱动的响应数据.
  Step1 检查浏览器是否支持 WebSocket.
  [code]if(window.WebSocket) {
        // WebSocket代码
}[/code]  Step2 建立连接
  [code]var ws = new WebSocket('ws://localhost:8327');[/code]  Step3 注册回调函数以及收发数据
  分别注册 WebSocket 对象的 onopen, onclose, onerror 以及 onmessage 回调函数.
   通过 ws.send() 来进行发送数据, 这里不仅可以发送字符串, 也可以发送 Blob 或 ArrayBuffer 类型的数据.
  如果接收的是二进制数据,需要将连接对象的格式设为 blob 或 arraybuffer.
  [code]ws.binaryType = 'arraybuffer';[/code]  WebSocket Golang API

   服务器端 WebSocket 库我推荐使用 Google 自己的  golang.org/x/net/websocket  , 可以非常方便的与 net/http 一起使用.
   可以将 websocket 的 handler function 通过 websocket.Handler 转换成 http.Handler , 这样就可以跟 net/http 库一起使用了.
   然后通过 websocket.Message.Receive 来接收数据, 通过 websocket.Message.Send 来发送数据.
  具体代码可以看下面的 Demo 部分.
  MSE

   在介绍 MSE 之前, 我们先看看 HTML5
友荐云推荐




上一篇:Slicer: Auto-sharding for datacenter applications
下一篇:How we built Bitbucket Data Center to scale
酷辣虫提示酷辣虫禁止发表任何与中华人民共和国法律有抵触的内容!所有内容由用户发布,并不代表酷辣虫的观点,酷辣虫无法对用户发布内容真实性提供任何的保证,请自行验证并承担风险与后果。如您有版权、违规等问题,请通过"联系我们"或"违规举报"告知我们处理。

妙竹 发表于 昨天 21:33
好贴,好贴,必须顶一个!
回复 支持 反对

使用道具 举报

MaryArsr 发表于 昨天 23:23
心里只有你一个频道,最可恨的是还没有广告。
回复 支持 反对

使用道具 举报

tsings 发表于 4 小时前
我唯一的缺点就是钱多,而现在我几乎完美了。
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

我要投稿

推荐阅读

扫码访问 @iTTTTT瑞翔 的微博
回页顶回复上一篇下一篇回列表手机版
手机版/CoLaBug.com ( 粤ICP备05003221号 | 文网文[2010]257号 )|网站地图 酷辣虫

© 2001-2016 Comsenz Inc. Design: Dean. DiscuzFans.

返回顶部 返回列表