【音视频第17天】RTSP、RTMP协议初识

news/2024/11/6 13:39:09/

被叫去搞直播了,悲喜交加。先学习一下基本的技术栈,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 提供了多种流媒体协议的解析和处理功能,可以帮助开发人员更方便地实现流媒体接收和播放功能。

今天就到这吧,累了,回家


http://www.ppmy.cn/news/50192.html

相关文章

3. 排序

3. 排序 3.1 总纲 3.2 Comparable与Comparator接口介绍 由于我们这里要讲排序,所以肯定会在元素之间进行比较。规则的。在实际应用中,我们往往有需要比较两个自定义对象大小的地方。而这些自定义对象的比较,就不像简单的整型数据那么简单&a…

Android主流网络请求开源库的对比

目录 一、为什么要用网络请求开源库? 网络请求开源库是一个将网络请求的相关功能封装好的类库 没有网络请求框架之前 App想与服务器进行网络请求交互是一件很痛苦的事:因为Android的主线程不能进行网络请求,需另开1个线程请求、考虑到线程池…

CSS基础——定位及背景处理

目录 定位 相对定位 相对定位特点 绝对定位 绝对定位的特点 固定定位 固定定位和绝对定位不同的特点 层级问题 opacity IE处理 背景 background-image background-color background-repeat background-position 图片整合技术 优点 background-attachment 属性…

几种加密算法

一、概述 在安全领域,利用密钥加密算法来对通信的过程进行加密是一种常见的安全手段。利用该手段能够保障数据安全通信的三个目标: 1、数据的保密性,防止用户的数据被窃取或泄露 2、保证数据的完整性,防止用户传输的数据被篡改 3…

leetcode 1416. Restore The Array(恢复数组)

一台打印机没有把空格打印出来,以至于不知道打印出的 s 中到底有哪些数字。 现在知道数字的取值范围在1 ~ k, 数字开头不能是0. 返回可能的数字个数。取模1097. 思路: DP 假设dp[ i ]为 i ~ n位的s 所能组成的数字组合数。 从右到左遍历,…

人工智能包含哪些知识

人工智能是一个广泛的领域,它涉及多个学科和知识领域。以下是人工智能包含的一些知识: 计算机科学:人工智能的发展需要计算机科学中的许多概念和技术,如算法、数据结构、计算机体系结构、计算理论等。 数学:数学在人工…

4、RSA终端指令

RSA总结 加密算法,都是数学知识对称加密(传统加密算法)RSA(三个人的名字)非对称加密(现代加密算法) 原根欧拉函数、欧拉定理(费马小定理)模反元素 m^(e * d) mod n ≡ m迪菲赫尔曼密钥交换RSA算法 RSA: 拆解两个(大)质数的乘积很难!所以RSA想对安全.加密: M ^e % N C解密: C…

java: web应用中不经意的内存泄露

前面有一篇讲解如何在spring mvc web应用中一启动就执行某些逻辑,今天无意发现如果使用不当,很容易引起内存泄露,测试代码如下: 1、定义一个类App package com.cnblogs.yjmyzz.web.controller;import java.util.Date;public cla…