下面以“大牛直播SDK 的 RTSP 播放器遇到 RTP 不带 Marker 位(M bit)”为切入点,结合 RTP/RTCP 基础 与 H.264/H.265/AAC 的负载规范,说明发送端如何规范打包 一、先厘清 Marker 位在各规范里的语义 RTP 基础(RFC 3550):M 位的语义由具体负载格式定义,常用于标记“重要边界事件”(如视频帧边界或音频语音突发边界)。 序号:RTP 序号每包 +1,随机起始。 Marker:仅在“该 AU 的最后一包”置 1;否则为 0。 四、接收端(播放器)如何“稳健容错”:Marker 缺失时的切帧策略即使对端未设置 M 位,播放器也应能“稳健切帧”而不积压卡顿: 按 (SSRC, RTP 时间戳) 聚帧 同一 AU 的所有包时间戳相同 结合负载内信号 FU 分片的 E 标志 只标识“NALU 结束”,并不等同于“AU 结束”; 若存在 AUD NALU(H.264 type 9 / HEVC type 通常 35),可将其作为 AU
RTSP被用于建立的控制媒体流的传输,它为多媒体服务扮演“网络远程控制”的角色。尽管有时可以把RTSP控制信息和媒体数据流交织在一起传送,但一般情况RTSP本身并不用于转送媒体流数据。 媒体数据的传送可通过RTP/RTCP等协议来完成。 一次基本的RTSP操作过程是:首先,客户端连接到流服务器并发送一个RTSP描述命令(DESCRIBE)。 客户端再分析该SDP描述,并为会话中的每一个流发送一个RTSP建立命令(SETUP),RTSP建立命令告诉服务器客户端用于接收媒体数据的端口。 流媒体连接建立完成后,客户端发送一个播放命令(PLAY),服务器就开始在UDP上传送媒体流(RTP包)到客户端。 在播放过程中客户端还可以向服务器发送命令来控制快进、快退和暂停等。 第五步: 数据传送播放中 S->C:发送流媒体数据 // 通过RTP协议传送数据 6.
关键点: 该功能实现,主要需要考虑RTSP取摄像头视频流,拆RTP包,组H264帧,通过PJSIP的视频通道转发;这个过程中,涉及到RTP通道保活,RTSP通道保活;调试时间多耗费在对摄像头返回的RTP == 0){ printf_data(data, 7); printf("[1]seq:%d, old_type:%d, nalu_type:%d marker:%d, len:%d,last_len :%d\r\n", seq,old_type, nalu_type, marker, len, last_rtp_frame_cache_len); } if (nalu_type == 28) { :%d, data:%02x, nalu_type:%d marker:%d, len:%d,last_len:%d\r\n", seq,data[0], nalu_type, marker, len, ), payload, len); last_rtp_frame_cache_len += len; } } if (marker){ //reset 0 if (getFrameCallback
前面我们花了较多的篇幅来介绍了RTSP协议的一些细节,但是rtsp传输,本质上涉及三种协议,RTSP、RTP以及RTCP。RTSP主要负责连接建立,销毁及一些其他的控制。 而实际涉及媒体数据传输使用的是RTP协议,本节我们来介绍一下RTP协议。 RTP概览 RTP是一种应用层协议,传输层协议可以是TCP或者UDP(UDP多一些)! RTP数据包由两部分组成,一部分是RTP Heaeder,一部分是RTP body,RTP Header占用最少12个字节,最多72个字节;另一部分是RTP Payload,用来封装实际的数据负载,如封装 值为10,版本号为2,我们与wireshark的抓包解析对比一下: ? Padding ? 值为0,表示不填充。wireshark的抓包如下: ? X(扩展) ? 值为0。 M(marker) ? 值为0,表示该数据包非一帧数据的最后一帧!wireshark的解析: ? ps:当该值为1时,表示该数据包是一帧数据的最后一个数据包!
RTP协议详细说明了在互联网上传递音频和视频的标准数据包格式。它一开始被设计为一个多播协议,但后来被用在很多单播应用中。RTP协议常用于流媒体系统(配合RTCP协议或者RTSP协议)。 P:填充标志,占1位,如果P=1,则在该报文的尾部填充一个或多个额外的八位组,它们不是有效载荷的一部分。 3. X:扩展标志,占1位,如果X=1,则在RTP报头后跟有一个扩展报头。 4. 10. 特约信源(CSRC)标识符:每个CSRC标识符占32位,可以有0~15个。每个CSRC标识了包含在该RTP报文有效载荷中的所有特约信源。 其控制流由RTSP协议来提供。 RTP协议的使用: RTP的使用实例之一如上图: 上面是某省IPTV2.0早期的一个数据包的情况。从包中可以看出RTP是怎么和RTSP配合一起使用的。 从包402到411为RTSP的协商过程,RTSP在PLAYer命令后数据包就到来。紧跟其后412包就是一个mpeg 的PES包,它是有由rtp来承载的TS来形成。
特点:RTSP协议本身不传输媒体数据,而是通过控制连接建立命令和控制,媒体数据通过其他协议(如RTP)传输。它提供了丰富的控制选项,方便用户操作,且可以穿越NAT和防火墙。应用场景:1. RTP(Real-time Transport Protocol)简介:RTP是一个实时传输媒体数据的协议,通常与RTSP一起使用。它负责在网络上传输音视频数据。 直播服务 应用场景:在直播场景中,RTP协议为高质量的音视频传输提供了保障,RTP能确保观众能够实时观看到流畅、清晰的视频内容。 总结RTMP、RTSP、RTP、HLS、DASH这些协议在流媒体传输领域各有特点,但也有一些共同点。分别在实时视频传输中各有优势,选择哪种协议取决于具体的应用场景、网络条件以及设备兼容性等因素。 RTMP、RTSP、RTP、HLS、DASH这些协议在服务于流媒体传输方面有着共同的目标和追求,同时也在各自擅长的领域发挥着重要作用。
RTCP协议介绍见:音视频协议-RTCP协议介绍 2 协议格式介绍 rtp协议定义在rfc3550第5.1章RTP头定义: 版本号(2bit):默认为2; 填充标志(1bit):当设置为1时 ,最后一个字节表示填充字节数包括该字节本身,这些填充不属于荷载,解析时需要被忽略; 扩展标志(1bit):当设置为1时,rtp头后面会接一个扩展头需要解析,需要注意的是length长度是32bit为单位计算的 ,也就是4字节加1; CSRC计数(4bit):CSRC 个数最多就是15个; 标志位M(1bit):视频编码表示一帧的结束标志; 荷载类型(7bit):具体见RFC3551,0-95已经被定义 _t extension:1;//扩展 uint8_t csrccount:4;//csrc count uint8_t marker:1; //标志 uint8_t payloadtype identifier marker = (rtpheader->marker == 0)?
此版本号固定为2 rtp_hdr->marker = 0; //标志位,由详细协议规定其值。 rtp_hdr->ssrc = htonl(10); //随机指定为10,而且在本RTP会话中全局唯一 // 当一个NALU小于1400字节的时候,採用一个单RTP包发送 if(pNalu rtp_hdr->marker=1; rtp_hdr->seq_no = htons(seq_num ++); //序列号,每发送一个RTP包增1 //设置NALU HEADER,并将这个HEADER 2; //版本号号,此版本号固定为2 rtp_hdr->marker = 1; //标志位,由详细协议规定其值。 rtp_hdr->ssrc = htonl(10); //随机指定为10,而且在本RTP会话中全局唯一 rtp_hdr->seq_no = htons(seq_num ++); //序列号
3、RTSP和RTP(TRCP)的联系 RTP:Realtime Transport Protocol实时传输协议。RTP提供时间标志,序列号以及其他能够保证在实时数据传输时处理时间的方法。 RCTP是RTP的控制部分,用来保证服务质量和成员管理。RTP和RTCP是一起使用的。 RTSP:Realtime Streaming Protocol 实时流传输协议。 RTSP具体数据传输交割RTP,提供对流的控制。 RTP是基于UDP协议的,UDP不用建立连接,效率更高。但允许丢包,这就要求在重新组装媒体的时候多做一些工作。 Nov 2006 12:34:38 GMT Date: Fri, 10 Nov 2006 12:34:38 GMT Expires: Fri, 10 Nov 2006 12:34:38 GMT 10、RTSP基于libcurl代码实现 /* * Copyright (c) 2011, Jim Hollinger * All rights reserved.
RTP是一种应用层协议,一般使用 UDP作为底层协议实现数据传输,但并不强制底层协议的选择,比如利用 RTSP进行流媒体传输时使用 TCP也非常常见。 P:padding,1 bit, 填充标志。如果 P=1,则在该报文的尾部填充一个或多个额外的填充数据,它们不算作负载的一部分。填充的最后一个字节指明可以忽略多少个填充比特。 填充可能用于某些具有固定长度的加密算法,或者用于在底层数据单元中传输多个RTP包。 X:extension,1 bit,扩展标志。如果 X=1,则在 RTP 报头后将有且仅有一个扩展报头。 两个媒体包 X, Y,其 RTP header 如下所示,根据这两个媒体包生成一个 FEC 包。负载长度分别为 10,11。 在接收端,主编码与所有次编码作为独立的 RTP 包提取出来,复制冗余编码包的 RTP 头中的 sequence number,SSRC,marker bit,CC field,RTP version,和
v2016.11.28) Accept: application/sdp RTSP/1.0 200 OK CSeq: 3 Date: Thu, 15 Jul 2021 10:34:36 CST Content-Type Streaming Media v2016.11.28) Transport: RTP/AVP;unicast;client_port=54374-54375 RTSP/1.0 200 OK CSeq : 4 Date: Thu, 15 Jul 2021 10:34:36 CST Session: 191201771 Transport:RTP/AVP/UDP;unicast;client_port= ) Transport: RTP/AVP;unicast;client_port=54376-54377 Session: 191201771 RTSP/1.0 200 OK CSeq: 5 Date : Thu, 15 Jul 2021 10:34:36 CST Session: 191201771 Transport:RTP/AVP/UDP;unicast;client_port=54376-54377
笔记要点 1、cluster marker gene的意义 2、基于t检验 3、其它检验方法 1、cluster marker gene的意义 物以类聚,人以群分。 但如图可以看到只有10个Top1,我认为是由于存在重复的gene结果导致。并且在前面出现过的基因,再后面的TopX就不再出现了。 这种思路定义的cluster marker gene标准是比较严苛的,即当某个cluster的一个基因表达水平与其它所有cluster都具有显著差异时,才会被认为是marker gene。 对于marker gene的生物意义来说,表达上调的marker gene更具有可解释性(细胞类型注释)以及可实验验证性。 这种定义marker gene的标准是十分严苛的。筛选出来的marker基因直接反映了cluster对于该基因的表达有无情况。
协议介绍 SDP 完全是一种会话描述格式(对应的RFC2327) ― 它不属于传输协议 ― 它只使用不同的适当的传输协议,包括会话通知协议(SAP)、会话初始协议(SIP)、实时流协议(RTSP 媒体协商这一块要用RTSP来实现. 流媒体协议sdp信息,附带在describe报文中有rtsp服务端发出,主要目的,告之会话的存在和给出参与该会话所必须的信息,sdp会话完全是文本形式,采用UTF-8编码的ISO 10646字符集 sdp 会话描叙格式介绍 名称 格式: 说明 协议版本: v=0 给出sdp的版本号,目前为0版本,无子版本号 会话源 o=(用户名)(会话标识)(版本)(网络类型)(地址类型)(地址) 如果不存在用户登录名,该字段标志位 /udp上传送(RTP/AVP)IETF RTP协议,在udp上传输 格式列表: 对应对应的音频负载类型(PT) m=video 0 RTP/AVP 96 a描叙行: 格式:a=rtpmap:(净荷类型
v2016.11.28) Accept: application/sdp RTSP/1.0 200 OK CSeq: 3 Date: Thu, 15 Jul 2021 10:34:36 CST Content-Type Streaming Media v2016.11.28) Transport: RTP/AVP;unicast;client_port=54374-54375 RTSP/1.0 200 OK CSeq : 4 Date: Thu, 15 Jul 2021 10:34:36 CST Session: 191201771 Transport:RTP/AVP/UDP;unicast;client_port= ) Transport: RTP/AVP;unicast;client_port=54376-54377 Session: 191201771 RTSP/1.0 200 OK CSeq: 5 Date : Thu, 15 Jul 2021 10:34:36 CST Session: 191201771 Transport:RTP/AVP/UDP;unicast;client_port=54376-54377
数据,偶数端口用来接收RTP数据,相邻的奇数端口用于接收RTCP数据! SETUP表明消息类型; URI表示请求的RTSP服务器的地址; RTSP_VER表明RTSP的版本; TRANSPORT表明媒体流的传输方式,具体包括传输协议如RTP/UDP;指出是单播,组播还是广播 请求之后,如果没有异常情况,RTSP服务器的回复比较简单,回复200 OK消息,同时在Transport字段中增加sever_port,指明对等的服务端RTP和RTCP传输的端口,增加ssrc字段,增加 通过该抓包文件,我们可以看出,服务端对应SETUP请求的RTP和RTCP的传输端口分别为8284和8285;ssrc的值为4a7fb757;mode="play"表示当前rtsp连接是播放模式! 8284-8285;ssrc=4a7fb757;mode="play" Date: Fri, Apr 10 2020 19:07:19 GMT 好了,RTSP的SETUP消息我们也介绍完了,本篇以后,我们对
如果说 RTP 负责“送数据”,RTSP 则负责“告诉系统什么时候、以何种方式去送”。 1.3 RTSP 与 RTP / RTCP 的协同关系RTSP 本身并不携带音视频内容。它的职责是会话建立 + 参数协商 + 状态管理,而数据面完全交给 RTP 与 RTCP。 Payload Type = 96 (H.264) RTCP Sender Report 示例 NTP Timestamp = 0xE44123C9B6000000 (2025-11-07 10 10:35:00,若当前系统时间为 10:35:00.300,则播放时需延迟 300 ms,保证帧按时渲染。 五、落地示例:SmartMediaKit 的 RTSP 播放模块在前文我们系统地分析了 RTSP/RTP/RTCP 三层协议的机制与关键工程挑战。
针对音视频数据量大的特点,有一套专门的网络传输协议RTP/RTSP,它的运行流程是这样的: RTSP RTSP(Real Time Streaming Protocol)是一款网络控制协议,用来控制流媒体服务器的 :961874] didWriteDataWithTag: 1 2016-08-10 13:41:02.728 RTSPClient[2457:961862] didReadData: 1, RTSP/ RTSP/1.0 200 OK CSeq: 3 Date: Wed, Aug 10 2016 05:41:03 GMT Session: 63A3E5E6;timeout=60 Transport: RTP 961857] didReadData: 4, RTSP/1.0 200 OK CSeq: 4 Date: Wed, Aug 10 2016 05:41:03 GMT Range: npt=0.000- Session: 63A3E5E6 RTP-Info: url=rtsp://192.168.0.102:554/live.264/track1;seq=18553;rtptime=3987283666
RTSP负责定义具体的控制信息、操作方法、状态码,以及描述与RTP之间的交互操作。RTSP媒体服务协议框架如下: ? ,就开始传送媒体流(RTP包)到客户端。 CSeq: 9 Content-Length: 46 Content-Type: text/parameters packets_received: 10 C->S: SET_PARAMETER rtsp://example.com/media.mp4 RTSP/1.0 CSeq: 10 Content-length: 20 CSeq: 10 Content-length: 10 Content-type: text/parameters barparam REDIRECT 重定向请求
轻量级RTSP服务模块、RTSP|RTMP转GB28181网关模块和内置RTSP网关模块的区别和联系: 内置轻量级RTSP服务模块和内置RTSP网关模块,核心痛点是避免用户或者开发者单独部署RTSP或者 内置RTSP网关模块,实际上是RTSP/RTMP拉流模块+内置轻量级RTSP服务模块组合出来的。 数据源来自RTSP或RTMP网络流,拉流模块完成编码后的音视频数据回调,然后,汇聚到内置轻量级RTSP服务模块。RTSP|RTMP转GB28181网关模块,和内置RTSP网关模块数据源接入一样。 lastExceptionInfo:"")); // 10毫秒后,停止信令, 然后重启 handler.postDelayed(new Runnable() { @Override gb28281_heart_beart_timeout sip start"); gb28181_agent_.start(); } } },10
/RTCP(UDP/TCP)RTSP 仅负责控制;真正的视频流走以下路径之一: RTP over UDP(低延迟、弱网敏感) RTP over TCP(interleaved)(最常用,穿透性强) ④ PLAY — 启动媒体传输⑤ PAUSE / TEARDOWN — 暂停/关闭会话2.3 RTP 在 RTSP 播放中的作用(RFC 3550 核心要点)要让 RTSP 播放器好用,关键在于 RTP 3.2 RTP 解复用:RTSP 播放器的“真正难点”很多开发者以为 RTSP 难在协议,其实最难的是 RTP 层的兼容性。 六、跨平台低延迟 RTSP 播放器的完整工程方案经过 10年(2015–2025)在安防、AI 视觉、无人机、工业相机、车载终端等行业的持续落地,SmartMediaKit围绕 RTSP 播放建立了一套完整 七、结语:RTSP 的未来价值与SmartMediakit工程意义RTSP 虽然诞生于上世纪,但由于其在AI 视觉设备与工业场景中的普适性、兼容性与设备支持度极高,在未来 5–10 年仍将是 B 端实时视频链路的核心协议之一