美文网首页小程序
小程序直播开发(一):直播工作原理

小程序直播开发(一):直播工作原理

作者: 程序员三千_ | 来源:发表于2019-04-29 13:57 被阅读2次

    直播原理:

    image.png

    直播协议:

    1、HLS协议:


    image.png

    对于hls协议来说,一开始会先发放一个m3u8文件,m3u8文件指向很多ts索引,告诉我们几个视频的片段,这样视频就能播放了。那么m3u8文件怎么更新呢?这里涉及到一个播放时长问题,比如所有的ts文件一共是10s,其实在10s之前,播放器也就是video会重新请求m3u8文件,这是浏览器自己的行为,它会在10s前请求更新m3u8文件,这时候服务器会返回新的m3u8文件。就这样循环更新m3u8文件,就实现了直播的功能。
    如下图,请求一个m3u8文件获取一些ts文件,再请求一个m3u8文件,再获取一些新的ts文件


    image.png
    m3u8文件:
    image.png

    就像上面说得,m3u8文件里有一些ts文件,及其ts文件的时长。

    ts文件:
    image.png

    一个ts文件的解析流程:一开始先有一个PAT的包,PAT会告诉你用到的PMT在那里,PMT会告诉你ts在那里,很多个ts组成了PES。通俗的来讲,浏览器想去解析一个视频,需要知道视频帧和音频帧,在一个ts文件中,我怎么知道在这个视频流中,哪块是视频?哪块是音频?而且每个视频一帧是不够的,都是要n帧组成的,那我们怎么找到这些帧并且链接起来呢?这些是关键的点,所以这个ts告诉你,先找PAT,再找PMT,再有ts文件,然后ts文件按照视频和音频分类,再把相连的这些ts包组成一个帧,再相连的再组成一个帧。。。,那我们怎么知道哪些ts包会组成一个帧呢?那就是ts文件的解析规则了,这里就不拓展开讲了。

    2、RTMP协议


    image.png
    image.png

    一、基本概念

      TCP连接
    
      手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接。TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。
    
      建立起一个TCP连接需要经过“三次握手”:
    
      第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
    
      第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
    
      第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
    
      握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连 接之前,TCP 连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”(过程就不细写 了,就是服务器和客户端交互,最终确定断开)
    
    
      HTTP连接
    
      HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。
    
      HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。
    
      1)在HTTP 1.0中,客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接。
    
      2)在HTTP 1.1中则可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求。
    
      由于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”,要保持客户端程序的在线状态,需要不断地向服务器发起连接请求。通常的 做法是即时不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回复,表明知道客 户端“在线”。若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开。
    
      CDN
    
      CDN的全称是Content Delivery Network,即[内容分发网络](https://baike.baidu.com/item/%E5%86%85%E5%AE%B9%E5%88%86%E5%8F%91%E7%BD%91%E7%BB%9C/4034265)。CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。
    

    3、HTTP-FLV协议


    image.png
    image.png

    总结

    HLS协议比较简单,但延时比较高;RTMP协议实时性比较好,但是用起来比较复杂;HTTP-FLV协议就是权衡两者间的有点,但是它的视频格式是flv。那他们的应用场景分别是哪些?对低延时的场景,一般是使用RTMP协议或者HTTP-FLV协议,如果对于延时要求不高,比如斗鱼,熊猫直播,他们在播放这块走的都是HLS协议(所以平时你直播看到主播的游戏画面是有延迟的,延迟控制在几秒之内),传输文件是ts不是flv,也不需要建立长连接。考虑到服务器并发都是有好处的。

    后续文章将介绍直播流的制作与小程序里的应用

    相关文章

      网友评论

        本文标题:小程序直播开发(一):直播工作原理

        本文链接:https://www.haomeiwen.com/subject/gujynqtx.html