
如何基于 RTMP 协议实现视频直播
主播在客户端采集视频后,照例客户端软件会对视频进行编码以压缩视频,然后通过 RTMP 协议将这个二进制的视频流打包成网络包发送给服务器,这个过程对应上述流程图中的推流(在实际开发中,通常通过 FFmpeg 进行推流)。
主播在客户端采集视频后,照例客户端软件会对视频进行编码以压缩视频,然后通过 RTMP 协议将这个二进制的视频流打包成网络包发送给服务器,这个过程对应上述流程图中的推流(在实际开发中,通常通过 FFmpeg 进行推流)。
在建立 HTTP 标准规范的时候,设计者的初衷主要是想把 HTTP 当做传输静态 HTML 文档的协议,但是随着互联网的发展,Web 应用的用途更加多样性,逐渐诞生了电商网站(如淘宝、亚马逊)、社交网络(如Facebook、Twitter)等功能更加复杂的应用,这些网站的功能单纯靠静态 HTML 显然是实现不了的,因此又产生了通过 CGI 将 Web 服务器与后台动态应用连接起来
简单来说,Web 服务器就是可以接收 HTTP 请求,然后将响应返回给客户端的软件或设备。Web 服务器实现了 HTTP 协议、管理着 Web 资源,并负责提供 Web 服务器的管理功能(配置、控制、扩展等),由于 Web 服务器主要与 HTTP 通信打交道,所以有时候我们也将其称作 HTTP 服务器,对应的,客户端浏览器可以称作 HTTP 客户端。
Web 请求一般都是 HTTP 请求,而 HTTP 协议又是基于 TCP 的,所以,我们主要探讨如何让服务器同时处理更多 TCP 连接请求。
位于应用层的应用程序在基于 TCP 协议或 UDP 协议进行通信时,需要用到操作系统提供的类库,这种类库一般称为 API(Application Programming Interface,应用编程接口)。
TCP 提供面向有连接的通信传输,面向有连接是指在数据通信开始之前先做好通信两端之间的准备工作。 TCP 的连接建立,我们常常称为三次握手。三次握手的目的是为了确保对连接双方来说,链路都是通的。 三次握手除了双方建立连接外,主要还是为了沟通一件事情,就是 TCP 包序列号的问题。每个连接都要有不同的序列号,这个序列号的起始序号是随着时间变化的。