被叫去搞直播了,悲喜交加。先学习一下基本的技术栈,RTSP RTMP HTTP
先简单随便看看吧。
目录
- 什么是流媒体协议
- RTMP
- RTMP 工作原理
- RTSP
- RTSP 工作原理
- RTMP 与 RTSP 区别
- 详细看看RTSP
- 简介
- RTSP交互流程
- OPTIONS
- DESCRIBE
- SETUP
- PLAY
- PAUSE
- SET_PARAMETER
- GET_PARAMETER
- ANNOUNCE
- TEARDOWN
什么是流媒体协议
流媒体协议,英文学名Streaming Protocol,用一句人话来解释:流媒体协议是一种用于通过 Web 传递多媒体的协议。
RTMP 和 RTSP 是两种不同的视频传输协议,它们的主要区别在于应用场景和传输方式。
RTMP
英文全称:Real Time Messaging Protocol
中文意思:实时消息协议
底层协议:TCP
应用级视频流协议
视频编解码器:H.264
音频编解码器:AAC
延迟:3 - 30 秒
RTMP 2005 年诞生,由 Macromedia 开发,后来被 Adobe 收购。最初用于在 RTMP 服务器和用户设备上的 Flash 播放器之间传输数据。是闭源的。RTMP 的最大优点是可以在服务器和客户端服务器之间保持稳定的连接,无论用户的互联网连接质量如何,它都可以无缝低延迟进行流媒体传输。这个技术主要通过将数据流分成相等的小部分(音频数据默认为 64 字节,视频数据默认为 128 字节)并将它们顺序传输到接收设备,然后将它们重新组合成视频流来实现的。
先切开,然后传输,然后再组合起来。
RTMP 最大的缺点是它与 HTML5 播放器不兼容,这样的话必须使用另一种协议,例如 HLS来传输视频文件到达用户的设备,此外,RTMP 容易受到带宽问题的影响。
RTMP 工作原理
一般来说视频流是这样工作的:
1.摄像头捕获视频
2.通过编码器将视频流传输到视频平台服务器
3.视频平台处理视频流
4.通过CDN分发到离用户最近的服务器上
5.最后视频流就能成功的到达用户设备
在视频从摄像头到服务器的过程中,RTMP将大量数据分割成小块并跨多个虚拟通道传输,在视频源和 RTMP 服务器之间提供了稳定和流畅的视频流。
RTMP就简单看看就好了。重点关注一下RTSP协议。
RTSP
英文全称: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协议进行分解视频块 的,使用TCP 收发控制命令(例如播放或停止请求),使用UDP 传送音频、视频和数据。
TCP可靠传输,比如用户按下播放或者停止播放的时候,这个是个准确的请求,这个需要保证可靠性,这个时候TCP作用就体现了。
UDP是低延迟的协议,那么用于传送音频、视频和数据可以达到非常高效的效果。
RTSP 工作原理
用户设备向视频流平台发送 RTSP 请求
视频流平台返回可以操作的请求列表,比如播放、暂停等
用户设备向视频流平台发送具体的请求,比如播放
视频流平台解析请求并调用指定机制启动视频流处理
RTMP 与 RTSP 区别
1、延迟
RTMP:3-30秒
RTSP:2-5秒
2、音频编解码器
RTMP:AAC、AAC-LC、HE-AAC+ v1 & v2、MP3、Speex、Opus、Vorbis
RTSP:AAC、AAC-LC、HE-AAC+ v1 & v2、MP3、Speex、Opus、Vorbis
3、视频编解码器
RTMP:H.264, VP8, VP6, Sorenson Spark®, Screen Video v1 & v2
RTSP:H.265 (preview), H.264, VP9, VP8
4、优点
RTMP:低延迟、适应性、灵活性、不需要缓冲
RTSP:低延迟、分段流式传输
5、缺点
RTMP:带宽问题、HTML5 不支持、某些浏览器和设备的兼容性问题、安全性有点低
RTSP:HTTP 不兼容、依赖于其他协议
详细看看RTSP
简介
用于Internet上针对多媒体数据流的一种传输协议,是应用层协议。RTSP在体系结构上位于RTP和RTCP之上,它使用TCP或UDP完成数据传输RTSP默认使用554端口(服务器的端口)
RTSP交互流程
RTSP的消息有两大类:请求消息(request)、响应消息(response)
OPTIONS
Options 是客户端用来向服务器查询支持的方法之用
Options不是所有的Server都支持的
在Options的回复报文中返回支持的方法
Options可用作客户端与服务器的心跳
请求消息:
OPTIONS rtsp://10.137.13.70:554/88888888/16/20200708/268435616/268435616.ts RTSP/1.0CSeq: 1
Content-Length: 0User-Agent: CTC RTSP
响应消息:
RTSP/1.0 200 OKServer: HMS_V1R2CSeq: 1
Date: Fri, 11 Sep 2020 02:07:36GMTSession: 2954565955
Timeshift-Status: 0
Public: DESCRIBE,SETUP, PLAY PAUSE,GET_PARAMETER,SET_PARAMETER TEARDOWN
DESCRIBE
Describe主要用于客户端向服务器查询会话描述信息
如果不存在则返回404或者重定向
如果存在则返回媒体的描述信息。
它可能使用同意头部(Accept)来指出客户端能理解的描述格式。服务器以所请求的资源的描述作为回应
请求消息:
DESCRIBE rtsp://10.137.13.70:554/88888888/16/20200708/268435616/268435616.ts RTSP/1.0CSeq: 2
Content-Length: oUser-Agent: CTC RTSPSession: 2954565955Accept: application/sdp
响应消息:
RTSP/1.0 200 OKServer: HMS_V1R2CSeq: 2
Date: Fri,11 Sep 2020 02:07:36 GMTSession: 2954565955
Content-Length: 134
Content-Type: application/sdp
Content-Base: rtsp://10.137.13.70:554/88888888/16/20200708/268435616/268435616.ts/
SETUP
请求消息:
SETUP rtsp://10.137.13.70:554/88888888/16/20200708/268435616/268435616.ts RTSP/1.0
CSeq: 3
Transport: MP2T/RTP/UDP;unicast;client_port=1234-1235;destination=10.137.13.71;
User-Agent: CTC RTSP
Session: 2954565955
响应消息:
RTSP/1.0 200 OK
Server: HMS_V1R2
CSeq: 3
Date: Fri, 11 Sep 2020 02:07:36 GMT
Session: 2954565955
Timeshift-Status: 0
Transport: MP2T/RTP/UDP;unicast;client_port=1234-1235;destination=10.137.13.71;source=10.137.13.70;server_port=8046-8047;ssrc=4
PLAY
PAUSE
SET_PARAMETER
GET_PARAMETER
ANNOUNCE
TEARDOWN
在MRF上发布直播组播放频道,组播流转发到承载网,并提供频道的组播地址
MRF(Multicast Routing Protocol) 是一种用于在 IP 网络中传输组播数据的协议。在这里,MRF 被用来发布直播组播放频道,并将组播流转发到承载网。
承载网 (Transport Network) 是指用于传输数据的网络,通常是指光纤网络、铜线网络或其他类型的网络,这些网络可以传输不同类型的数据,例如 IP 数据包、ATM 数据包或 Frame Relay 数据包。
频道 (Channel) 是指一组相关的数据流,这些数据流可以是由同一媒体传输的,也可以是由不同的媒体传输的。在直播组播频道中,一组数据流被打包成一组,这些数据流可以来自不同的源,也可以来自不同的媒体。
组播地址 (Multicast Address) 是指用于标识组播源和接收者之间的通信的 IP 地址。在直播组播频道中,频道的组播地址被提供给用户,以便他们可以加入该频道并接收直播数据流。
发布直播组播频道 (Publish a Multicast Channel) 是指将一组相关的数据流打包成一组,并将其发布给特定的组播地址,以便感兴趣的用户可以加入该频道并接收这些数据流。
可以看看live555,那个代码里面有rtsp,流程很清晰,很好理解如果要做流媒体客户端的话,可能会用到directshow。这里面live555和directshow是什么意思?
live555 是一个开源的基于 C++ 的流媒体服务器软件,它支持多种流媒体协议,包括 RTMP、RTSP、HTTP 和 TCP。live555 提供了丰富的功能,如视频流加密、压缩、流媒体协议转换等,可以用于制作流媒体服务器。
DirectShow 是 Windows 操作系统中用于处理视频和音频的 API,它支持多种流媒体协议,包括 RTMP、RTSP、HTTP 和 TCP。DirectShow 提供了丰富的函数和工具,用于制作流媒体服务器和客户端。使用 DirectShow,开发人员可以方便地实现视频和音频的流式传输,包括视频解码、音频解码、流加密和压缩等功能。
如果要开发流媒体客户端,使用 live555 和 DirectShow 是非常有帮助的。live555 提供了 RTMP 和 RTSP 协议的支持,而 DirectShow 提供了多种流媒体协议的解析和处理功能,可以帮助开发人员更方便地实现流媒体接收和播放功能。
今天就到这吧,累了,回家