下面以“大牛直播SDK 的 RTSP 播放器遇到 RTP 不带 Marker 位(M bit)”为切入点,结合 RTP/RTCP 基础 与 H.264/H.265/AAC 的负载规范,说明发送端如何规范打包 AAC(RFC 3640,MPEG4-GENERIC):M=1 表示“本包包含了一个 AU 的最后一片,或包含一个/多个完整 AU”。 二、发送端(打包器)如何“规范打包”:H.264/H.2651) 通用约束 时间戳:同一帧(AU)内的所有 RTP 包 使用相同的 RTP 时间戳;视频时钟为 90 kHz。 负载≈1200–1300B; TCP/RTSP 内嵌(interleaved)虽无 UDP 头,但仍建议与 UDP 一致的分片尺寸,利于复用与中间件处理。 三、发送端(打包器)如何“规范打包”:AAC(MPEG4-GENERIC) AU 头:按 SDP 中的 sizeLength/indexLength/indexDeltaLength 生成 AU-headers-section
媒体数据的传送可通过RTP/RTCP等协议来完成。 一次基本的RTSP操作过程是:首先,客户端连接到流服务器并发送一个RTSP描述命令(DESCRIBE)。 =8342-8343,MP2T/RTP/ TCP;unicast;destination =121.60.21.53;interleaved=0-1 4、PLAY 主要功能: 与服务器协商流媒体播放 //S建立会话,通过Transport头字段返回选择的具体转输选项, 并返回建立的Session ID; 4. 第四步:请求开始传送数据 4.C->S:PLAY request //C请求S开始发送数据 4.S->C:PLAY response //S回应该请求的信息 5 第五步: 数据传送播放中 S->C:发送流媒体数据 // 通过RTP协议传送数据 6.
关于使用rtp推流,TSINGSEE青犀视频团队实际已经研发了很长时间,其中也碰到了不少问题,比如RTP推流客户端无法解析播放,或者遇到不同的报错,但这些目前都已经有了比较完善的解决办法。 在使用RTP推流时,默认ffmpeg使用的打包模式是packetization-mode=1,本文我们和大家分享另一个比较实用的技巧,就是使用ffmpeg配置rtp打包模式。 如何修改打包模式? 关于RTP打包模式的说明如下: 目前ffmpeg默认使用的是1: Not interleaved 模式,针对客户的需要,服务端不支持STAP-A的组包模式,需要每个包单独发送,所以需要配置Single 配置完成后,还有个问题,需要配置pkt size,否则I帧无法完整发送,默认pkt size是1024个字节,而一般I帧都大于1024个字节,导致I帧发送不完整,图像传输失败,需要配置pkt size,在rtp url后面加上如下所示内容: rtp://192.168.99.138:6666?
前面我们花了较多的篇幅来介绍了RTSP协议的一些细节,但是rtsp传输,本质上涉及三种协议,RTSP、RTP以及RTCP。RTSP主要负责连接建立,销毁及一些其他的控制。 RTP Header格式 0 1 2 3 4 +-+-+-+-+-+ 包序号 timestamp:32bits(4字节),表示时间戳, 必须使用90 kHz 时钟频率 SSRC:32bits(4字节),用于标识同步信源,参加同一视频会议的两个同步信源不能有相同的SSRC CSRC:特约信源标识符,每个CSRC占用4个字节,可以有0~15个。 值为0x4b cf fa 46, 表示时间戳,wireshark解析为: ? SSRC ? 同步信源标识符,此数据包的值为0x6b 2f dd 87,wireshark的解析为: ?
❝将PCM数据打包为RTP包。 /* 数据有效性判断 */ if (info.encoder_type == AudioEncoder::CodecType::kOther) return; 打包为 RTP // 对于连续的音频包,需要连续的timestamp。 timestamp += sizeof(int16_t) * encoder->NumChannels() * encoder->RtpTimestampRateHz()/100; /* 创建rtp包 packet.SetTimestamp(timestamp); packet.SetSsrc(ssrc); uint8_t *payload = packet.SetPayloadSize(buffer.size()); /* 装载rtp
问题背景: 前面讲解了PS、TS、FLV这三种媒体封装格式,现在新开一个系列讲解下传输协议,这里面会包含RTP、RTSP、HLS、RTMP等。 当然最复杂的封装格式MP4在准备中,后面会把封装格式这个系列讲完。今天要说的RTP传输协议,有人也认为这是封装格式,因为协议中打包音视频要填写时间戳的相关信息,FFmpeg就把这个作为封装格式。 RTP协议既可以理解为传输层也可以理解为应用层,这么说是因为RTP负载可以放到RTSP上进行传输,通过二元交织通道方式实现。 然后通过RTSP、SIP或者HTTP等协议和接收端协商。 2.RTP数据包的生成: 通过RTSP等协议的SDP信息协商好了RTP数据包的发送目的和传输方式,我们就需要把音视频数据打包成RTP包,用UDP发送给接收端了。
优势:RTSP支持多种流媒体格式和传输协议,能够满足不同平台和设备的需求,同时其控制功能也提升了用户体验。 4. RTP(Real-time Transport Protocol)简介:RTP是一个实时传输媒体数据的协议,通常与RTSP一起使用。它负责在网络上传输音视频数据。 优势:RTP的流式传输特性使得音视频数据可以边下载边播放,大大节省了用户的时间和带宽资源。同时,它还可以根据用户的网络状况自动调整播放质量,以提供最佳的观看体验。 4. 优势:RTP的实时传输能力和高可靠性使得监控系统能够稳定运行并发挥最大效用。同时,它还可以与其他监控设备和技术相结合,形成更加完善的监控体系。 4. 例如,RTMP主要使用TCP协议进行可靠的数据传输,而RTP则既可以基于UDP也可以基于TCP进行传输。 4.
),得到可用的音视频数据 涉及技术或协议: 编码方式:CBR、VBR 编码格式 视频:H.265、H.264、MPEG-4等,封装容器有TS、MKV、AVI、MP4等 音频:G.711μ、AAC、Opus 与RTCP、RTSP、RTMP、HTTP、HLS(HTTP Live Streaming)等 控制信令:SIP和SDP、SNMP等 4、解码数据: 使用相关硬件或软件对接收到的编码后的音视频数据进行解码 RTSP提供了一个可扩展框架,数据源可以包括实时数据与已有的存储的数据。该协议目的在于控制多个数据发送连接,为选择发送通道如UDP、组播UDP与TCP提供途径,并为选择基于RTP上发送机制提供方法。 4、RTCP(Real-time Transport Control Protocol,实时传输控制协议) RTCP是RTP的配套协议,为RTP媒体流提供信道外的控制。 RTCP和RTP一起协作将多媒体数据打包和发送,定期在多媒体流会话参与者之间传输控制数据。
二、RTSP / RTP 协议机制深度解读要理解轻量级 RTSP 服务 SDK 的价值,必须先回顾 RTSP 与 RTP 的核心机制。 简而言之:RTSP 管“会话”,RTP 管“数据”,SDP 管“说明”。 四、关键技术实现细节 RTP 打包 视频(H.264/H.265):支持 FU-A(大帧分片)、STAP-A(多帧打包)。 音频(AAC):每帧 1024 个采样点,时间戳递增。 低延迟优化 减少缓冲区层级(编码→RTP→Socket)。 RTP 发送线程实时优先级。 网络环境复杂性 Wi-Fi/4G/5G/专网的丢包率和抖动不同,需支持自适应。 4. 工业 IoT 与边缘监控在工业生产线、智慧工厂和能源行业中,Android 嵌入式终端日益普及。通过轻量级 RTSP 服务 SDK: 工业终端可直接接入摄像头采集模块,生成 RTSP 流。
随着H.265的普及,越来越多的开发者希望大牛直播SDK(Github)能支持低延迟的RTSP H.265播放,并分享相关经验: 实现思路: 对rtsp来说,要播放h265只要正确解析sdp和rtp包即可 RTP 打包格式 实际中其实就用到两种格式,一种是一个nal单元打包到一个rtp包中。 一种是nal单元比较大,分片打包在多个rtp中. 3.1 单个Nal单元打包: PayloadHdr 把 NAL单元头填入就好. 3.2 Nal单元分片打包: PayloadHdr还是拷贝NAL FU header 就一个字节,格式如下: +---------------+ |0|1|2|3|4|5|6|7| +-+-+-+-+-+-+-+-+ |S|E| FuType | +--------- 4. 小结: h265很多和h264相似之处,都有sps和pps,用00 00 00 01进行nal 单元分隔。
2、RTSP(Real Time Streaming Protocol,实时流传输协议) RTSP定义了一对多应用程序如何有效地通过IP网络传送多媒体数据。 RTSP提供了一个可扩展框架,数据源可以包括实时数据与已有的存储的数据。该协议目的在于控制多个数据发送连接,为选择发送通道如UDP、组播UDP与TCP提供途径,并为选择基于RTP上发送机制提供方法。 代理服务器的缓存功能也同样适用于RTSP,并且因为RTSP具有重新导向功能,可根据实际负载情况来切换提供服务的服务器,以避免过大的负载集中于同一服务器而造成延迟。 4、RTCP(Real-time Transport Control Protocol,实时传输控制协议) RTCP是RTP的配套协议,为RTP媒体流提供信道外的控制。 RTCP和RTP一起协作将多媒体数据打包和发送,定期在多媒体流会话参与者之间传输控制数据。
他有多种变种: 1.RTMP工作在TCP之上,默认使用端口1935; 2.RTMPE在RTMP的基础上增加了加密功能; 3.RTMPT封装在HTTP请求之上,可穿透防火墙; 4.RTMPS类似RTMPT ,增加了TLS/SSL的安全功能; 二、RTSP协议(Real Time Streaming Protocol)实时流传输协议。 RTSP具有重新导向功能,可视实际负载情况来转换提供服务的服务器,可以避免过大的负载集中于同一服务器而造成延迟。 RTP协议常用于流媒体系统(配合RTSP协议),视频会议和一键通(Push to Talk)系统(配合H.323或SIP),使它成为IP电话产业的技术基础。 四、RTCP协议(RTP Control Protocol)RTP控制协议 提供数据分发质量反馈信息,RTCP和RTP一起协作将多媒体数据打包和发送,定期在多媒体流会话参与者之间传输控制数据。
3、RTSP(Real Time Streaming Protocol,实时流传输协议) RTSP定义了一对多应用程序如何有效地通过IP网络传送多媒体数据。 RTSP提供了一个可扩展框架,数据源可以包括实时数据与已有的存储的数据。该协议目的在于控制多个数据发送连接,为选择发送通道如UDP、组播UDP与TCP提供途径,并为选择基于RTP上发送机制提供方法。 代理服务器的缓存功能也同样适用于RTSP,并且因为RTSP具有重新导向功能,可根据实际负载情况来切换提供服务的服务器,以避免过大的负载集中于同一服务器而造成延迟。 4、RTCP(Real-time Transport Control Protocol,实时传输控制协议) RTCP是RTP的配套协议,为RTP媒体流提供信道外的控制。 RTCP和RTP一起协作将多媒体数据打包和发送,定期在多媒体流会话参与者之间传输控制数据。
; 与 录像模块 联动:通过 RTP 缓冲直接生成 MP4/FLV 文件,实现边看边录。 RTP Header:序列号、时间戳、SSRC; PS Packet:系统头 + 音视频打包; Transport Mode:UDP 单播为主,部分实现支持 TCP fallback。 (4) 模块协同与场景化应用 与 RTSP 模块 协作:从摄像头拉流 → 转 PS → RTP 推送 → 注册平台; 与 RTMP 模块 协作:RTMP 推流 → 转 GB 通道 → 平台实时播放; 随后,RTMP、GB28181、录制模块分别从该缓冲区读取帧进行编码、打包或输出。 → GB28181:将标准 RTSP 流重新打包为 PS 流,并通过 SIP/INVITE 注册上级平台; RTMP → GB28181:适用于移动推流或自定义直播源纳入国标平台; 多协议并发输出:
背景 在事先Android平台RTSP、RTMP转GB28181网关之前,我们已经实现了Android平台GB28181的接入,可实现Android平台采集到的音视频数据,编码后,打包按需发到GB28181 和我们之前实现的轻量级RTSP服务网关模块类似,我们要做的是,实现RTSP或RTMP流,按需打包对接到GB28181服务平台。 轻量级RTSP服务模块、RTSP|RTMP转GB28181网关模块和内置RTSP网关模块的区别和联系: 内置轻量级RTSP服务模块和内置RTSP网关模块,核心痛点是避免用户或者开发者单独部署RTSP或者 内置RTSP网关模块,实际上是RTSP/RTMP拉流模块+内置轻量级RTSP服务模块组合出来的。 0:1); libPublisher.SetRTPSenderIPAddressType(rtp_sender_handle, session_des_.isIPv4()?
打包多种流媒体协议(RTSP/RTMP/HLS),支持协议间的互相转换,提供一站式的服务。 使用epoll+线程池+异步网络IO模式开发,并发性能优越。 功能清单 RTSP RTSP 服务器,支持RTMP/MP4转RTSP。 RTSPS 服务器,支持亚马逊echo show这样的设备 RTSP 播放器,支持RTSP代理,支持生成静音音频 RTSP 推流客户端与服务器 支持 rtp over udp rtp over tcp 支持H265编码 服务器支持RTSP推流(包括rtp over udp rtp over tcp方式) 支持任意编码格式的rtsp推流,只是除H264/H265+AAC外无法转协议 RTMP RTMP 播放服务器,支持RTSP/MP4转RTMP。
RTSP提供了一个可扩展框架,数据源可以包括实时数据与已有的存储的数据。该协议目的在于控制多个数据发送连接,为选择发送通道如UDP、组播UDP与TCP提供途径,并为选择基于RTP上发送机制提供方法。 代理服务器的缓存功能也同样适用于RTSP,并且因为RTSP具有重新导向功能,可根据实际负载情况来切换提供服务的服务器,以避免过大的负载集中于同一服务器而造成延迟。 直播1.png 3、RTCP(Real-time Transport Control Protocol,实时传输控制协议 RTCP是RTP的配套协议,为RTP媒体流提供信道外的控制。 RTCP和RTP一起协作将多媒体数据打包和发送,定期在多媒体流会话参与者之间传输控制数据。 4、音视频同步: 以Audio为准 Video同步Audio 以Video为准 Audio同步Video 以外部时间为准AV同时同步 Command Msg Command Msg 是RTMP里面的一个主要信息传递工具
产品设计方面,媒体流支持最新GB28181-2016的UDP和TCP被动模式,参数配置,支持注册有效期、心跳间隔、心跳间隔次数、TCP/UDP信令设置,支持RTP Sender IP地址类型、RTP Socket 本地端口、SS-R-C、RTP socket 发送Buffer大小、RTP时间戳时钟频率设置,支持注册成功、注册超时、INVITE、ACK、BYE状态回调。 待收到服务端的Ack后,发送编码、打包后的媒体流数据。在此期间,按照设定间隔,定时发送keepalive。 如上图所示,模块除了常规的音视频参数配置外,系统可同时亦或单独实现如RTMP推送、RTSP推送、轻量级RTSP服务、实时录像、GB28181前端接入。 、RTMP和音视频采集、编码传输等有了多年积累,GB28181接入,对我们来说,只是在现有架构的基础上,完成信令交互和数据打包传输(H264, H265打包成PS流,然后拆成RTP包发送即可),RTP传输支持
RTP 打包与传输 RTSP 的核心在于 RTP(Real-Time Transport Protocol)承载数据,而 H.266 引入了新的 NALU 结构,与 H.265/HEVC 有相似但更复杂的分片和聚合需求 IETF 已在推进 H.266 的 RTP 打包草案,未来 SDK 需要支持 VVC RTP payload format,以保证端到端的标准兼容。 播放器端解包与解码 RTSP 客户端在接收 RTP 包后,需要正确完成 解复用 → NALU 重组 → 解码器输入 的流程。 H.266 能在保持 4K/8K 画质的同时显著降低码率,结合 SDK 的 RTSP 低延迟播放器,能在指挥中心实现 毫秒级调度画面切换,支持海量摄像头的并发接入。 H.266 可在有限带宽的 4G/5G 或专网中传输 高分辨率航拍画面,SDK 播放端通过 RTSP 实现 实时指挥与调度,避免延迟导致的飞行安全风险。
RTP/RTCP(承载层):视频常见 H.264/H.265 负载规范;AAC 音频有各自打包规则。RTCP 提供丢包/抖动/时钟校正等统计反馈。 TCP 内嵌(穿透友好,弱网更稳,时延略高) RTP/RTCP 复用在 RTSP TCP 连接 内,通过 channel 编号区分:SETUP rtsp://cam/trackID=1 RTSP/1.0 4) PLAY 响应与对齐信息(RTP-Info / Range)开始播放时,服务端可在响应中下发参考点:Range: npt=0.000- RTP-Info: url=rtsp://cam/trackID =1;profile-level-id=42c01f;sprop-parameter-sets=...m=audio 0 RTP/AVP 97a=rtpmap:97 MPEG4-GENERIC/48000 AAC:RTP 打包有固定帧步进(常见 1024 samples/帧)。 RTCP:SR/RR 提供丢包、抖动、RTP↔参考时钟映射,可用来指导缓冲深度、网络拥塞控制和 TCP/UDP 切换策略。