目前RTP或者基于上面的WebRTC直接使用作为直播技术的挑战性非常高,还缺乏成熟的开源工具和生态,但是RTP的低延迟特性使得很多大厂正在进行二次开发。 RTP不是不可以作为直播平台的技术选项,只是目前缺乏很好的支持,需要自己进行定制开发的部分较多。作为视频行业的领导者,TSINGSEE青犀视频率先投入研发,尝试编译RTP推流程序。 在TSINGSEE青犀视频编译RTP推流程序时,出现以下错误:*const char * 类型的值不能用于初始化 char * 类型的实体。 目前我们也在开发WebRTC打造的低延时直播平台,大家可以关注我们一起探讨了解一下。
关于使用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?
-> cmd [vxWorks *]# rtp Display process list [vxWorks *]# rtp [rtpId or Name] Display summary information about processes in memory [vxWorks *]# rtp exec <filename> Execute a RTP file named <filename> [vxWorks -X : (Vx7) do not return the exit code of foreground RTP, just return 0 -- : mark the end of "rtp exec " options [vxWorks *]# rtp attach Display the attachment list [vxWorks *]# rtp attach [rtpId or Name] *]# rtp detach Detache the shell session from the current memory context [vxWorks *]# rtp foreground
RTP是啥? VxWorks的RTP,全称是Real-Time Process,可以翻译为实时进程。 在6.0之前,VxWorks使用的是single的内存空间,操作系统与应用程序是不分离的。 从6.0开始,VxWorks引入了RTP。这个RTP在许多地方都与其它操作系统的进程差不多,例如对POSIX的兼容性。 所以了解UNIX/Linux进程模型的程序猿,很快就可以熟悉RTP的创建、执行或者终止。 ? 不过RTP是专门为RTOS设计的,为了满足实时性的需求,它与其它系统的进程还是有很多不同的。 有了RTP,就可以在用户模式下执行应用程序和操作系统的其它功能,这些功能在内核和应用程序之间具有清晰的划分。这种体系结构通常被称为进程模型。 同时,6.x与5.5保持了高度的兼容。 基本上不需要任何修改,就可以将早期VxWorks的内核应用程序迁移到6.x内核空间(在大多数情况下,只是重新编译)。 ? 关于RTP的具体信息,咱们后文慢慢道来。
RTP协议格式: 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- 6. PT: 有效载荷类型,占7位,用于说明RTP报文中有效载荷的类型,如GSM音频、JPEM图像等,在流媒体中大部分是用来区分音频流和视频流的,这样便于客户端进行解析。 7. 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- 其PT即payload type为mpeg2 transport streams 也就是ts流,其SSRC为:0x65737D6c,其Seq号为15764,从中也可以看出对于一个RTP流其SEQ号可以开始于一个随机的数值
在《Task之调度策略》里介绍了VxWorks的主要调度策略,而有了RTP之后,系统又是如何调度的呢? 其实非常非常简单:RTP不参与调度,VxWorks还是使用之前的调度策略,即所有Task基于优先级抢占,以及默认关闭的时间片轮转。 如果你不打算使用pthread,现在就可以跳到文末点赞了 ----------分割线--------- 不过,为了更好的支持POSIX标准,VxWorks在RTP里引入了POSIX的Thread调度策略 事实上,要想在RTP里使用POSIX的Thread,必须要包含这种调度策略:INCLUDE_POSIX_PTHREAD_SCHEDULER ? 从名字上就可以看出来,这种策略只对RTP里的Thread有效。而Kernel里的Task和Thread,以及RTP里的Task,用的都是VxWorks的传统策略 ?
RTP概述 1.1. RTP是什么 RTP全名是Real-time Transport Protocol(实时传输协议)。 在视频直播等应用场合,由于生成整个媒体文件要等直播结束,也就是用户至少要在直播结束后才能看到直播节目,所以用下载方式不能实现直播。 流式传输是实现流媒体的关键技术。 RTP实现者在发送RTP数据时,需先将数据封装成RTP包,而在接收到RTP数据包,需要将数据从RTP包中提取出来。 2.2. RTP的封装 一个协议的封装是为了满足协议的功能需求的。 SR分组的主要内容有:相应的RTP流的SSRC,RTP流中最新产生的RTP分组的时间戳和NTP,RTP流包含的分组数,RTP流包含的字节数。SR包的封装如图3所示。 容易看出要获取RTP音频包中的音频信息很容易,直接将RTP包的包头去掉即可。当然,要成功地播放解码获取到的音频流,需要知道其编码,这可从RTP包包头的有效载荷类型字段(PT)获得。 第6章.
6)PT(payload type):有效荷载类型,占7位,用于说明RTP报文中有效载荷的类型,如GSM音频、JPEM图像等,在流媒体中大部分是用来区分音频流和视频流,这样便于客户端进行解析。 二 rtp码流 rtp载荷h264媒体流:rtp协议头和h264码流 rtp头后是rtp载荷,rtp载荷第一个字节格式和NALU头一样。 89 88 dd 85 62 e1 6dfc 33 01 38 1a 10 35 f2 14 ????b?m?3.8..5?. 84 6e 21 24 8f 72 62f0 51 7e 10 5f 0d 42 71 12 ?n!$?rb? nal_unit_type:NALU常用类型取值如下表所示: 5 IDR图像中的片 6 补充增强信息单元(SEI) 7 SPS 8 PPS 9
Task可以注册Hook,RTP也可以,只需在VIP中包含组件INCLUDE_RTP_HOOKS。 define RTP_GLOBAL_SYMBOLS 0x01 /* register global symbols for RTP */ #define RTP_LOCAL_SYMBOLS 0x02 /* idem for local symbols */ #define RTP_ALL_SYMBOLS (RTP_GLOBAL_SYMBOLS | RTP_LOCAL_SYMBOLS ) #define RTP_DEBUG 0x10 /* set RTP in debug mode when created */ #define RTP_BUFFER_VAL_OFF 例如RTP A正在创建RTP B,这种Hook是在RTP A的上下文里执行。Hook创建的对象,属于RTP A。
但是我们如果在TCP传输协议上承载RTSP/RTP将解决这些问题。 1. RTSP/RTP的控制命令和数据都通过一个端口,即RTSP的端口(默认为554),进行交互。 2. 但是,使用TCP传输协议承载RTSP/RTP需要花更多的功夫。 1. 由于二元交织,会使得RTP包封包和解包的过程变得更加复杂。 2. 接下来让我们来了解一下怎么使用TCP承载RTSP/RTP。 TCP承载RTSP/RTP 当使用TCP协议承载RTSP/RTP时,所有的命令和媒体数据都将通过RTSP端口,通常是554,进行发送。 下面是一个rtsp客户端请求 通过rtp over tcp方式建立连接报文; SETUP之后,RTP数据将通过用来发送RTSP命令的TCP Socket进行发送。 data : 数据 - ,比如说RTP包,总长度与上面的数据长度相同 RTP,RTCP数据和RTSP数据共享TCP数据通道,所以必须有一个标识来区别三种数据。
单机模式的Message Channel基于COMP实现,其速度略慢于Message Queue,但具有显著的优势(应用程序的可移植性,以供多节点Message Channel使用等),支持Kernel/RTP Message Queue 面向连接 非面向连接 双向 单向 Message长度可变 Message长度固定 Message数量无限制 Message数量固定 位置透明 Public Object支持RTP
blog.csdn.net/bripengandre/article/details/2238818) 分类: Network Security2008-04-01 16:34 5687人阅读 评论(6) RTP概述 1.1. RTP是什么 RTP全名是Real-time Transport Protocol(实时传输协议)。 在视频直播等应用场合,由于生成整个媒体文件要等直播结束,也就是用户至少要在直播结束后才能看到直播节目,所以用下载方式不能实现直播。 流式传输是实现流媒体的关键技术。 RTP实现者在发送RTP数据时,需先将数据封装成RTP包,而在接收到RTP数据包,需要将数据从RTP包中提取出来。 2.2. RTP的封装 一个协议的封装是为了满足协议的功能需求的。 SR分组的主要内容有:相应的RTP流的SSRC,RTP流中最新产生的RTP分组的时间戳和NTP,RTP流包含的分组数,RTP流包含的字节数。SR包的封装如图3所示。
欢迎关注VxWorks567 用户模式与内核模式使用不同的指令集和MMU配置,因此在RTP中不能直接访问内核的资源,包括内核函数、内核数据,以及driver等。 如果迫不得已,RTP中必须要使用内核的某些机制,怎么解决?可以在RTP中重写相应功能,或者通过System Call! System Call对使用者是透明的,它的大致执行流程如下:RTP里调用System Call封装的API时,系统执行一个特定于体系结构的Trap操作,将CPU从用户模式更改为内核模式;完成Trap请求的操作后 详情如下 RTP函数(参数数量) 对应的内核操作 _close(1) _closeSc _creat(2) _creatSc _edrErrorInject(6) _edrErrorInjectSc _ _fdatasyncSc _fsync(1) _fsyncSc _getcwd(2) _getcwdSc _ioctl(3) _ioctlSc _mctl(4) _mctlSc _msgQOpen(6)
一、什么是RTP 数据传输协议RTP,用于实时传输数据。RTP报文由两部分组成:报头和有效载荷。 二、RTP的会话过程 当应用程序建立一个RTP会话时,应用程序将确定一对目的传输地址。 2)RTP将RTP 数据包发往UDP端口对中偶数端口;RTCP将RTCP控制包发往UDP端口对中的接收端口。 三、RTP Header解析 前12字节是固定的,CSRC可以有多个或者0个。 6)PT(payload type):有效荷载类型,占7位,用于说明RTP报文中有效载荷的类型,如GSM音频、JPEM图像等,在流媒体中大部分是用来区分音频流和视频流,这样便于客户端进行解析。 每个CSRC标识了包含在RTP报文有效载荷中的所有提供信源。 提供信源用来标识对一个RTP混合器产生的新包有贡献的所有RTP包的源。 载荷H264码流:红色RTP协议头,黄色H264码流 RTP头后是RTP载荷,RTP载荷第一个字节格式跟NALU头一样: F和NRI也跟NALU头一样,只有Type有些不一样:拓展24 – 31 0
AIE支持两种类型的RTP,一种是异步(Asynchronous),通常由PS或其他AIE Kernel控制。“异步”意味着RTP可以随时被更改。 在每次Kernel被调用时,RTP都会被读取,而不会进行任何同步处理。这种机制适合于参数不经常更新的场合,例如滤波器系数。另一种为同步RTP(Synchronous)。 在描述AIE Kernel sine时,phase_increment为输入参数,这里的名字是形参名,本质上就是RTP,只是RTP在graph.h中会另起名字。 在描述graph时,将RTP定义为input_port,并起名字为trigger,如下图第26行所示。同时确定RTP与AIE Kernel的连接关系,如下图第33行所示。 这是和同步RTP的最大区别。在同步模式下,graph的run是受RTP的update控制的。在异步模式下,需要通过wait等待graph的run完成。
除了共享库,RTP也可以像内核态一样,去使用静态库 - Static Library。 它俩的区别是 RTP即使只调用共享库中的一个函数,也会加载整个库文件;RTP如果只使用静态库中的一个函数,则只会链接该函数所在的.o文件,而不是整个.a文件 多个RTP使用同一个共享库时,一共只需要加载一次 ;多个RTP使用同一个静态库时,每个RTP都要去链接、加载它 静态库的使用就简单多了,VIP都不需要包含INCLUDE_SHL 还是以Vx69为例,新建一个RTP工程 根据Target选择相应的Active build spec Build tool改为Librarian 将代码加入工程,build得到.a文件 这时就可以在应用程序的RTP里调用这个静态库的函数了 只需要在工程的属性中包含这个.a
1992年11月初,我在网上发布了视频会议工具nv(Network Video),经过初步的测试,它已经可以用来向全球视频直播部分IETF 11月的会议,来自15个国家的200个子网络能够接收直播,在一周内有大概 nv成为当时互联网直播会议的主要工具之一,甚至被NASA选中直播航天飞行任务的现场报道。 nv也被用于各种硬件视频会议项目,使得这些项目可以通过高带宽以太网和 ATM 网络发送完整的 NTSC 高质量直播视频。 为什么要自己压缩视频? 起草RTP ? Steve Deering, IP组播创造者,IPv6首席设计师 当时我们所有人都在做IP 组播的开发工作,并协助创建了MBONE(多播主干网)。 RTP遗憾 对于RTP我并没有什么遗憾。但我知道,人们对RTP最多的抱怨是实现RTCP的复杂性(RTCP是与主要RTP数据流量并行运行的控制协议)。
要想使用WindML,需要先将源码编译为库,内核态就用DKM来编译,用户态当然就用RTP了 打开Workbench,建个RTP: ? 给它起个名字,然后选择合适的build spec。 接下来,根据DKM里的配置来config这个windml,两者要保持一致 Build这个RTP之后,就得到了WindML在用户态的两个库 ? 现在,可以在RTP中使用WindML了。先建个VIP ? BSP就用simpc,Tool chain要与之前的DKM和RTP的build spec都一致。其它选项用默认值就行了 ? 接下来,新建一个RTP,build spec与之前的工程一致,例如上文的SIMPENTIUMgnu_RTP,其它选项使用默认值。 然后在这个RTP里也添加Middleware Component,不过这次选择Application Support ? 添加WindML的代码后,就可以在RTP里执行UGL应用了 ?
RTP协议 在实时音视频通话中,我们通常使用 UDP 作为传输层协议,使用 RTP 协议包荷载音视频数据,RTP(Real-time Transport Protocol)是一种在 Internet UDP 协议没有序号等信息,而 RTP 协议可以补充许多音视频传输必要的信息,让音视频数据到达对端后可以重新组合完整,RTP 本身只保证实时数据的传输,并不能提供可靠传输保证,也没有流量控制,拥塞控制机制 RTP 协议格式如下,红色部分为 RTP 协议可选字段,RTP 协议最小为 12 byte。 Version:RTP 协议版本号 P:填充标识,如果该位为 1,说明该 RTP 包末尾包含了一个或多个填充字节,最后一个字节的值表示填充的字节数(包含最后一个字节本身),一般在一些需要固定块大小的加密算法中才需要填充 实战 使用JRTPLIB发送/接收RTP数据包 使用RTP包荷载H264码流 RTP扩展头部Audio Level的应用(mediasoup显示当前通话Speaker) 发布者:全栈程序员栈长,转载请注明出处
1.RTP协议 RTP:即可心跑在TCP也可以跑在UDP上,实时流协议,所以通常是跑在UDP上。 前 12 个字节出现在每个 RTP 包中,仅仅在被混合器插入时,才出现 CSRC 识别符列表。 (6)负载类型(PT):7 比特,此域定义了负载的格式,由具体应用决定其解释,协议可以规定负载类型码和负载格式之间一个默认的匹配。其他的负载类型码可以通过非 RTP 方法动态定义。 RTP发送端在任意给定时间发出一个单独的 RTP 负载类型;此域不用来复用不同的媒体流。 几个连续的 RTP 包如果是同时产生的。如:属于同一个视频帧的 RTP 包,将有相同的序列号。 不同媒体流的 RTP 时间戳可能以不同的速率增长。而且会有独立的随机偏移量。 RTP 包流的源,用 RTP 报头中 32 位数值的SSRC 标识符进行标识,使其不依赖于网络地址。