音视频协议

RTMP

简介

  • 英文名称Real-TimeMessage protocal
  • 中文名称:实时消息传递协议
  • 是一种流媒体协议
  • 基于TPC,连接持久且低延时,可以提供流畅的媒体体验
  • L7(应用层)协议

现在RTMP 主要用作流式传输实时视频,并且播放的时候非常流畅,还支持动态播放控制,允许用户跳转播放

随着 Flash 的弃用,RTMP 不再用于向视频播放器传输视频,并且正面临来自 MPEG-DASH 和 HLS 等基于 HTTP 的视频传输协议的激烈竞争,但是,RTMP 仍然在与编码器之间的视频传输中扮演着重要的角色。

RTMP在默认情况下使用 TCP 端口号 1935。
RTMPS,即通过 TLS/SSL 连接的 RTMP。
RTMPE 是使用 Adobe 自己的安全机制进行 RTMP 加密的。
RTMPT 封装在 HTTP 请求中以穿越防火墙。RTMPT 经常使用 TCP 端口 80 和 443 上的明文请求来绕过大多数公司流量过滤。
RTMFP,实时媒体流协议,一种通过网络进行通信的安全传输协议。

一般四个阶段

  • 相机捕捉RAW视频
  • RTMP 编码器将此 RAW 视频转换为数字视频,并将其发送到 Flowplayer 等在线视频主机。
  • 在线视频主机接收的视频并通过HLS协议将其传送到观众的设备
  • 观看设备以最小的时延播放实时视频.

音频编解码器
AAC、AAC-LC、HE-AAC+ v1 和 v2、MP3、Speex
视频编解码器
H.264、VP8、VP6、Sorenson Spark
RTMP 使用 TCP 传输数据,整体上,数据传输分为三个步骤:

  • 握手:客户端的 Flash Player 连接媒体服务器来打通它们之间的 RTMP 连接
  • 连接:客户端发送特定视频流的连接请求
  • :服务器收到请求后,会将原始数据转换为 SWF,即小型 Web 格式,然后,服务器通过 RTMP 将流发送到目标端点

工作原理

一般来说视频流是这样工作的:

  1. 摄像头捕获视频
  2. 通过编码器将视频流传输到视频平台服务器
  3. 视频平台处理视频流
  4. 通过CDN分发到离用户最近的服务器上
  5. 最后视频流就能成功的到达用户设备

那么这个环节中RTMP就起到了非常重要的作用,在视频从摄像头到服务器的过程中,RTMP将大量数据分割成小块并跨多个虚拟通道传输,在视频源和 RTMP 服务器之间提供了稳定和流畅的视频流。

RTMP 最大的缺点是它与 HTML5 播放器不兼容,这样的话必须使用另一种协议,例如 HLS来传输视频文件到达用户的设备,此外,RTMP 容易受到带宽问题的影响。

优势

1、低延迟
RTMP使用独占的 1935 端口,无需缓冲,基于 TCP,所以连接稳定,这样的话,用户在观看视频的时候,假如看到一半断网了,等到网络重连还可以接着上次断开的进度看。
2、易于集成
RTMP 不仅可以整合文本、视频和音频,还支持 MP3 和 AAC 音频流、 MP4、FLV 和 F4V 视频流。

缺点

  • RTMP不支持高分辨率视频和 VP9、AV1 等视频压缩方法。
  • iOS、Android、大多数嵌入式播放器和一些浏览器不再接受 RTMP 直播,某些网络默认阻止 RTMP 端口,这需要特殊的防火墙修改才能允许通过被阻止的网络。
  • RTMP 直播流容易受到数据丢失的影响,网络一旦有点问题就会丢失数据。

总结

RTMP 是一种基于 TCP 的协议,它维护持久连接并允许低延迟通信,为了流畅地传递流并传输尽可能多的信息,它将流拆分为片段,并且它们的大小在客户端和服务器之间动态协商。

虽然RTMP优势比较明显,但是其技术早已过时,出现了越来越多的替代品,比如用于硬件编码器的SRT、用于浏览器的WebRTC。不过这也不能说明RTMP可以被完全替代,RTMP技术对于直播来说还是很重要的。

FFmpeg

FFmpeg即是一款音视频编解码工具,同时也是一组音视频编码开发套件,作为编码开发套件,它为开发者提供了丰富的音视频处理的调用接口。

FFmpeg提供了多种媒体格式的封装和解封装,包括多种音视频编码、多种协议的流媒体、多种多彩格式转换、多种采样率转换、多种码率转换等;FFmpeg框架提供了多种丰富的插件模块,包含封装与解封装的插件、编码与解码的插件等。


FFmpeg框架的基本组成包含AVFormat、AVCodec、AVFilter、AVDevice、AVUtil等模块库,结构图如下:

2.1、AVFormat–FFmpeg的封装模块
AVFormat中实现了目前多媒体领域中的绝大多数媒体封装格式,包括封装和解封装,如MP4、FLV、KV、TS等文件封装格式,RTMP、RTSP、MMS、HLS等网络协议封装格式。FFmpeg是否支持某种媒体封装格式,取决于编译时是否包含了该格式的封装库。根据实际需求,可进行媒体封装格式的扩展,增加自己定制的封装格式,即在AVFormat中增加自己的封装处理模块。

2.2、AVCodec–FFmpeg的编解码模块
AVCodec中实现了目前多媒体领域绝大多数常用的编解码格式,即支持编码,也支持解码。AVCodec除了支持MPEG4、AAC、MJPEG等自带的媒体编解码格式之外,还支持第三方的编解码器,如H.264(AVC)编码,需要使用x264编码器;H.265(HEVC)编码,需要使用x264编码器;MP3(mp3lame)编码,需要使用libmp3lame编码器。如果希望增加自己的编码格式,或者硬件编解码,则需要在AVCodec中增加相应的编解码模块。

2.3、AVFilter–FFmpeg的滤镜模块
AVFilter库提供了一个通用的音频、视频、字幕等滤镜处理框架。在AVFilter中,滤镜框架可以有多个输入和多个输出。

2.4、swresample–FFmpeg的音频转换计算模块
swresample模块提供了高级别的音频重采样API。例如允许操作音频采样、音频通道布局转换与布局调整。

2.5、swscale–FFmpeg的视频图像转换计算模块
swscale模块提供了高级别的图像转换API,例如它允许进行图像缩放和像素格式转换,常见于将图像从1080p转换成720p或者480p等的缩放,或者将图像数据从YUV420p转换成YUYV,或者YUV转RGB等图像格式转换。

RTSP

RTMP和RTSP,RTMP 是基于 TCP 开发的,那么 RTSP 使用到了 UDP

  • 英文全称:Real Time Streaming Protocol
  • 中文意思:实时流协议
  • 底层协议:TCP 和 UDP
  • 网络控制协议
  • 视频编解码器:H.265
  • 音频编解码器:AAC
  • 延迟:2 秒

RTSP 1996年诞生,由 RealNetworks、Netscape 和哥伦比亚大学的专家联合开发,用于控制 VHS 式视频流的娱乐和通信系统,RTSP 使用高效的 RTP 协议,将流数据分解成更小的块,这样可以更快地传递。

RTSP 支持可靠的分段流,这意味着用户可以在仍在下载流的同时继续观看流。

Android 和 iOS 设备没有开箱即用的 RTSP 兼容播放器,所以普及度并不高,但 RTSP 在许多监控 和闭路电视 (CCTV) 应用非常广泛,远程摄像头、在线教育和互联网直播等,都用的比较频繁。

上面提到RTSP使用RTP协议进行分解视频块的,这里我们来讲一下RTP协议。

RTP协议,英文全称:Real-time Transport Protocol,中文就是实时传输协议,它的底层其实就是UDP,这样一来就可以实现低延迟

除了RTP协议,为确保流畅和一致的流传输,RTSP 还使用另外两种网络通信协议:

  • TCP 收发控制命令(例如播放或停止请求)
  • UDP 传送音频、视频和数据。

这个怎么理解呢?

TCP可靠传输,比如用户按下播放或者停止播放的时候,这个是个准确的请求,这个需要保证可靠性,这个时候TCP作用就体现了。

UDP是低延迟的协议,那么用于传送音频、视频和数据可以达到非常高效的效果。

RTSP 工作原理

  1. 用户设备向视频流平台发送 RTSP 请求
  2. 视频流平台返回可以操作的请求列表,比如播放、暂停等
  3. 用户设备向视频流平台发送具体的请求,比如播放
  4. 视频流平台解析请求并调用指定机制启动视频流处理

由于 RTSP 依赖于专用服务器,并且依赖于 RTP,因此该协议不支持加密视频内容或重传丢失的数据包。

RTSP和RTMP的区别

延迟

  • RTMP:3-30秒
  • RTSP:2-5秒

音频编解码器

  • RTMP:AAC、AAC-LC、HE-AAC+ v1 & v2、MP3、Speex、Opus、Vorbis
  • RTSP:AAC、AAC-LC、HE-AAC+ v1 & v2、MP3、Speex、Opus、Vorbis

视频编解码器

  • RTMP:H.264, VP8, VP6, Sorenson Spark®, Screen Video v1 & v2
  • RTSP:H.265 (preview), H.264, VP9, VP8

优点

  • RTMP:

    • 低延迟
    • 适应性
    • 灵活性
    • 不需要缓冲
  • RTSP:

    • 低延迟
    • 分段流式传输

缺点

  • RTMP:

    • 带宽问题
    • HTML5 不支持
    • 某些浏览器和设备的兼容性问题
    • 安全性有点低
  • RTSP:
  • HTTP 不兼容
  • 依赖于其他协议

其实看完RTMP 与 RTSP 区别,应该对于使用场景有见解式的认识了。

  • IP 摄像机、物联网设备,那么选择 RTSP准不会错
  • 第三方流媒体应用,那么选择RTMP准不会错

HTML5播放RTMP流

在Web开发中,HTML5是一种用于构建网页结构和内容的标准。它提供了丰富的功能,包括音频、视频、动画等多媒体元素。然而,默认情况下,HTML5并不直接支持RTMP(Real Time Messaging Protocol)流。RTMP流是一种用于传输音视频数据的协议,通常用于实时直播、视频会议等应用。

然而,借助一些第三方库和技术,我们可以在HTML5中播放RTMP流。本文将介绍如何使用video.js和hls.js这两个流行的工具来实现这一目标。

webRTC

WebRTC(Web Real-Time Communications)是由谷歌开源并推进纳入W3C标准的一项音视频技术,旨在通过点对点的方式,在不借助中间媒介的情况下,实现浏览器之间的实时音视频通信。

发起WebRTC通信的两端被称为对等端(Peer),成功建立的连接被称为PeerConnection,一次WebRTC通信可包含多个PeerConnection。

const pc2 = new RTCPeerConnection({...});

在寻找对等端阶段,信令服务器的工作一般是标识与验证参与者的身份,浏览器连接信令服务器并发送会话必须信息,如房间号、账号信息等,由信令服务器找到可以通信的对等端并开始尝试通信。

在整个WebRTC通信过程中,信令服务器是一个非常重要的角色,除了上述作用,SDP交换、ICE连接等都离不开信令,下面会提到。

webRTC通信过程

找到对方

进行协商

建立连接

开始通讯

找到对方

虽然webRTC不需要经过服务器进行通信,但是在开始通信之前,必须知道对方的存在,这个时候就需要信令服务器。信令服务器来获取参与者身份信息等。

进行协商

协商过程主要指SDP交换。

Last modification:October 5, 2023
如果觉得我的文章对你有用,请随意赞赏