RTMP协议介绍和接入转换方法

RTMP(Real - Time Messaging Protocol)即实时消息传输协议,是 Adobe 公司为 Flash 播放器和服务器之间音频、视频和数据传输开发的一种私有协议。目前在很多场景中大规模使用。

  1. 协议的特点

    • 实时性强
      • RTMP协议被设计用于实时数据传输,尤其是音频和视频流。在直播场景中,它的实时性至关重要。例如,一场体育赛事直播,主播端的摄像头和麦克风采集到运动员的动作和现场的声音后,这些数据会被快速地通过RTMP协议推送到服务器。
      • 为了达到较低的延迟,RTMP采用了一系列优化措施。它将音频和视频数据切分成较小的数据包,并且在网络带宽允许的情况下,尽可能快地将这些数据包发送出去。与一些传统的文件传输协议不同,它不会等到整个文件或者较大的数据块准备好才传输。
      • 其典型的延迟时间在3 - 5秒左右,这个延迟时间对于很多直播应用场景是可以接受的。比如在一些互动直播中,观众提问后,主播可以在较短的时间内看到问题并回答,观众也能较快地接收到主播的反馈,从而营造良好的互动氛围。
    • 基于TCP协议
      • RTMP协议构建在TCP(Transmission Control Protocol)协议之上。TCP协议是一种面向连接的、可靠的传输层协议。当RTMP客户端(如直播软件)与服务器建立连接时,首先是TCP的三次握手过程。
      • 一旦TCP连接建立成功,RTMP就可以利用TCP的可靠性机制。例如,TCP使用序列号来确保数据包按顺序到达接收端。如果数据包在传输过程中丢失或者出现乱序,TCP会通过其内部的机制,如重传机制来保证数据的完整性。
      • 在网络拥塞的情况下,TCP会自动调整发送窗口的大小,控制数据的发送速率。这对于RTMP协议也很重要,因为音频和视频数据的传输需要稳定的带宽。如果网络状况不佳,TCP会降低数据发送速度,避免网络进一步拥塞,同时也能保证RTMP协议所传输的数据尽量少丢失。
    • 支持多种数据类型
      • RTMP协议的灵活性在于它能够传输多种数据类型。在视频和音频方面,它支持多种编码格式。例如,对于视频可以支持H.264等编码格式,音频可以支持AAC等格式。
      • 除了基本的音频和视频数据,它还能传输脚本数据。以在线游戏直播为例,除了传输游戏画面和玩家的语音解说,还可以通过脚本数据传输游戏中的一些实时信息,如玩家的得分、装备信息等。这些信息可以在直播画面上以字幕或者其他形式显示,增强观众对直播内容的理解。
      • 在在线教育场景中,老师可以通过RTMP协议传输教学视频、讲解音频,同时还可以传输教学课件(如PPT文件的内容)、互动脚本(如提问、回答、课堂练习等内容),让学生在观看直播的同时能够更好地参与课堂互动。
  2. 协议的工作原理

    • 连接建立
      • 当客户端(如浏览器中的Flash播放器)想要与服务器建立RTMP连接时,首先会发起一个握手过程。这个握手过程包含了多个步骤。
      • 客户端会发送一个C0(版本号)和C1(时间戳和其他信息)的消息包给服务器。C0消息主要用于告诉服务器客户端所支持的RTMP版本,这是为了确保双方使用兼容的协议版本进行通信。C1消息中的时间戳则用于同步客户端和服务器之间的时间,这对于后续的音频和视频播放同步非常重要。
      • 服务器收到C0和C1消息后,会返回S0(版本号)和S1(时间戳)消息。S0消息确认了服务器所使用的RTMP版本,这个版本通常会与客户端所支持的版本进行协商,选择一个双方都能接受的版本。S1消息中的时间戳则是服务器的时间信息,客户端可以根据这个时间戳和自己发送的C1消息中的时间戳来计算网络延迟等信息。
      • 接着,客户端会发送C2消息,这个消息包含了对S1消息的确认信息,主要是用于进一步同步双方的时间。服务器收到C2消息后,握手过程完成,RTMP连接正式建立。
    • 创建流
      • 连接建立后,客户端会发送“createStream”命令来创建一个流。这个命令是一个RTMP协议的控制消息,它会通过已经建立的RTMP连接发送到服务器。
      • 服务器收到“createStream”命令后,会为这个流分配资源,包括内存空间、网络带宽等。同时,服务器会为这个流生成一个唯一的流ID,并将这个流ID返回给客户端。
      • 这个流ID就像是一个通道的标识,后续所有关于这个音频或视频的数据包传输都将通过这个通道进行。例如,在一个直播场景中,如果同时有多个主播在进行直播,每个主播的音频和视频数据都会通过各自的流进行传输,这样可以确保数据不会混淆。
    • 数据传输
      • 在流创建成功后,就可以开始数据传输了。对于视频和音频数据,首先需要进行编码。以H.264编码的视频为例,原始的视频画面会被编码器按照H.264的编码规则进行压缩和编码,将其转换为一系列的视频编码单元(NALU - Network Abstraction Layer Unit)。
      • 这些编码后的视频数据和音频数据(如AAC编码的音频)会被分割成一个个数据包。每个数据包前面会添加RTMP协议的头信息,这个头信息包含了数据包的类型(是视频还是音频)、时间戳、序列号等内容。
      • 时间戳用于确保音频和视频的同步播放。例如,如果视频的某一帧的时间戳是100毫秒,对应的音频数据包的时间戳也应该是100毫秒左右,这样在接收端播放时,就能保证画面和声音的同步。序列号则用于接收端对数据包进行排序,确保数据的正确接收和处理。
      • 这些带有协议头的数据包会通过之前创建的流发送到服务器或者客户端。服务器在收到数据包后,会根据协议头的信息进行处理,如将视频数据包转发给其他客户端或者存储起来用于点播等。客户端收到数据包后,会根据协议头的信息进行解码和播放,将视频和音频数据呈现给用户。
    • 参考文档
  3. 应用场景

    • 网络直播
      • 在游戏直播中,游戏主播使用游戏直播软件,软件会捕捉游戏画面和主播的声音。这些音频和视频数据会被编码后,通过RTMP协议推送到直播服务器。例如,斗鱼、虎牙等直播平台都广泛使用RTMP协议来接收主播的直播内容。
      • 直播服务器收到数据后,会根据观众的请求,将这些音频和视频数据通过CDN(内容分发网络)分发给各个观众端的播放器。观众端的播放器可以是浏览器中的Flash插件或者支持RTMP协议的其他播放器。在这个过程中,RTMP协议的实时性保证了观众能够及时看到主播的操作和听到声音,为观众提供了实时的游戏直播体验。
      • 在秀场直播方面,主播的才艺表演(如唱歌、跳舞等)的画面和声音也通过类似的方式进行传输。而且,在一些互动环节,如观众送礼物、留言等,这些互动信息也可以通过RTMP协议或者基于RTMP协议的扩展机制进行传输,让主播能够及时看到并做出回应。
    • 视频点播
      • 对于视频点播系统,虽然它不像直播那样强调实时性,但RTMP协议也有应用。当用户请求播放一个视频时,服务器会从存储设备中读取视频数据。
      • 这些视频数据会按照RTMP协议的要求进行封装和传输。例如,服务器会将视频数据分割成合适大小的数据包,添加协议头信息后发送给客户端。客户端可以根据网络带宽和自身的播放能力来动态地接收和播放这些视频数据包。
      • 与一些传统的HTTP(Hypertext Transfer Protocol)视频点播方式相比,RTMP协议在某些情况下可以提供更流畅的播放体验,特别是对于一些长视频,因为它可以更好地控制数据的传输速率和顺序。
    • 实时互动视频通信
      • 在视频会议场景中,每个参与者的摄像头和麦克风采集的音频和视频数据都会通过RTMP协议(或者基于RTMP协议的相关解决方案)发送到服务器。服务器会将这些数据分发给其他参与者。
      • 例如,在企业的远程视频会议中,员工的会议发言视频和音频会被实时传输,同时,还可以通过RTMP协议传输一些互动信息,如共享文档、电子白板的内容等。在远程教学场景中,教师可以实时传输教学视频和音频,学生可以提问,这些提问信息也可以通过RTMP协议传输,教师能够及时回答,实现实时互动教学。
  4. 协议的局限性

    • 对移动网络支持不够友好
      • 移动网络(如4G、5G)的特点是网络带宽和稳定性相对较差。RTMP协议在设计时主要考虑的是相对稳定的有线网络环境。
      • 在移动网络下,由于信号强度的变化、基站切换等因素,网络带宽会出现较大的波动。RTMP协议对于这种网络带宽的动态变化适应能力有限。例如,当用户在移动设备上观看直播时,从一个信号较好的区域移动到信号较弱的区域,网络带宽可能会急剧下降。
      • RTMP协议可能无法及时调整数据传输速率,导致视频卡顿或者音频中断。而且,由于移动网络的延迟本身相对较高,RTMP协议在移动网络下的延迟可能会进一步增加,影响用户的观看体验。
    • 不支持HTML5原生播放
      • RTMP协议是为Flash播放器设计的。随着HTML5技术的发展,浏览器对Flash的支持逐渐减少。HTML5提供了自己的视频和音频播放标准,如通过和标签来播放媒体内容。
      • RTMP协议的数据包格式和传输方式与HTML5原生支持的格式(如基于HTTP的MSE - Media Source Extensions等)不兼容。这意味着如果要在HTML5环境中播放RTMP协议传输的内容,需要进行额外的处理。
      • 例如,需要使用Flash插件来桥接(但这种方式随着Flash的淘汰也越来越不可行),或者将RTMP流转码为HTML5支持的格式,这会增加系统的复杂性和成本,并且在转码过程中可能会引入额外的延迟和质量损失。
      • 另一种方式,通过视频管理平台,接入RTMP音视频流,转化成可以在HTML5直接播放的FLV、HLS、WebRTC等标准协议,在WEB端进行播放。下面介绍的智联视频超融合平台就可以实现上述功能。
  5. 智联视频超融合平台

    • 平台介绍

      • 智联视频超融合平台通过GB/T28181-2011/2016/2022、国网B接口、RTSP、RTMP、ONVIF、GB/T35114、GA1400、海康大华SDK/API等方式,接入海康、大华、宇视等各个厂家的摄像机、录像机,接入直播手机,接入下级平台,提供web客户端进行视频预览、录像回放、配置管理和智慧运维。

      • 提供标准RESTful格式的HTTP API,提供web播放器demo,满足二次开发需求。同时支持将音视频数据等转发成各种通用标准的流媒体协议,方便第三方客户端调用展示。

      • 支持按照GB/T28181-2011/2016/2022、国网B接口、GB/T35114、GA1400等协议对接到上级平台,包括智联视频云平台和第三方平台。支持普通级联,多级级联,混合级联等多种级联方式。

      • 在这里插入图片描述

      • 智联视频超融合平台目前已经在公安、电力、交通、教育、物联网、智慧城市、智慧园区等多个行业得到了广泛应用。

    • 操作步骤

      • 在智联视频超融合平台配置管理页面,添加虚拟设备,接入协议选择“自定义设备(RTMP/RTSP)”:
        在这里插入图片描述

      • 在该虚拟设备下面,添加虚拟通道:
        在这里插入图片描述

      • 在上面“回源地址”中填入RTMP推流地址:rtmp://XX/XX/XXXXXXX,这样就能在智联视频超融合平台WEB客户端看到RTMP图像信息了;

      • 第三方平台可以通过FLV、HLS、RTMP、RTSP、WebRTC等标准协议获取RTMP音视频信息,同时也能通过国标28181、国网B接口等标准协议,将RTMP音视频转发到上级平台中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值