作者 | 阿文,责编 | 郭芮
头图 | CSDN 下载自视觉中国
出品 | CSDN(ID:CSDNnews)
认识直播技术背后的传输协议
RTMP 是怎么工作的?
握手
建立连接
建立流
播放
握手开始于客户端发送C0、C1块。服务器收到C0或C1后发送S0和S1。
当客户端收齐S0和S1后,开始发送C2。当服务器收齐C0和C1后,开始发送S2。
当客户端和服务器分别收到S2和C2后,握手完成。
客户端发送命令消息中的“连接”(connect)到服务器,请求与一个服务应用实例建立连接。
服务器接收到连接命令消息后,发送确认窗口大小(Window Acknowledgement Size)协议消息到客户端,同时连接到连接命令中提到的应用程序。
服务器发送设置带宽()协议消息到客户端。
客户端处理设置带宽协议消息后,发送确认窗口大小(Window Acknowledgement Size)协议消息到服务器端。
服务器发送用户控制消息中的“流开始”(Stream Begin)消息到客户端。
服务器发送命令消息中的“结果”(_result),通知客户端连接的状态。
客户端发送命令消息中的“创建流”(createStream)命令到服务器端。
服务器端接收到“创建流”命令后,发送命令消息中的“结果”(_result),通知客户端流的状态。
客户端发送命令消息中的“播放”(play)命令到服务器。
接收到播放命令后,服务器发送设置块大小(ChunkSize)协议消息。
服务器发送用户控制消息中的“streambegin”,告知客户端流ID。
播放命令成功的话,服务器发送命令消息中的“响应状态” NetStream.Play.Start & NetStream.Play.reset,告知客户端“播放”命令执行成功。
在此之后服务器发送客户端要播放的音频和视频数据。
从流媒体服务器下载流进行编码播放。
如何搭建一个直播服务?
   
   
     
    
    
      yum -y install gcc pcre-devel openssl-devel
wget -c https://nginx.org/download/nginx-1.17.9.tar.gz
tar zxvf nginx-1.17.9.tar.gz
   
   
       
       
   
     
    
    
      git clone https://github.com/arut/nginx-rtmp-module.git
cd nginx-1.17.9
./configure --prefix=/usr/local/nginx  --add-module=../nginx-rtmp-module  --with-http_ssl_module
make
make install
   
   
       
       
   
     
    
    
      rtmp {
    server {
      listen 1935; # 使用 udp 1935 端口
      chunk_size 4096;
      application live {  # app 名称为 vod
       live on;
       }
  }
}
   
   
       
       
   
     
    
    
      [root@localhost sbin]# ./nginx -c /usr/local/nginx/conf/nginx.conf
   
   
       
    推流:将视频流编码后推到rtmp 服务;
拉流:从 rtmp 服务器下载流进行编码播放。
   
   
     
    
    
      rtmp://rtmp.example.com/[app]/[name]
   
   
       
       
   
     
    
    
      ffmpeg -i test.mp4 -vcodec libx264 -acodec aac -f flv rtmp://IP地址/live/test
   
   
       
    ☞美团十年,支撑全球最大规模外卖配送的一站式机器学习平台是如何炼成的?
☞腾讯提结合ACNet进行细粒度分类,效果达到最新SOTA | CVPR 2020
☞返鄂复工人员自述:回武汉上班,要先飞合肥,再由公司包车接回去