RTSP, RTP, RTCP, RTMP傻傻分不清?
RTSP基于TCP传输请求和响应报文,RTP基于UDP传输流媒体数据,RTCP基于UDP传送传输质量信息(如丢包和延迟)。
比如喀什一个局域网内10个人同时点播广州的同一个源,喀什和广州之间就要传10x4Mbps的数据。1. 是为讨论下文编的; 2. 4Mbps算不上高清。
在局域网和城域网之间有个proxy,喀什和广州之间传1路,局域网内1变10: pkt = recv(); for (i = 0; i < n_receiver; i++) send(pkt).
包从网络->网卡->核心->用户态,简单判断和修改,再用户态->核心->网卡->网络,memcpy次数非常多。本例改都都不改。
Programming Protocol-independent Packet Processors (P4) is an open source, domain-specific programming language for network devices, specifying how data plane devices (switches, routers, NICs, filters, etc.) process packets. SmartNICs with P4 support: Netronome offers its P4 programmable devices under its the Agilio SmartNICs line of products, which include three series: CX (see Figure 5), FX and LX. The heart of those devices is the Netronome flagship silicon chip called NFP (Network Flow Processor or Netronome Flow Processor). CX series is the most diverse family with low-end NFP-4000 matched with 2GB of DDR3 RAM. The network interfaces available here vary from 2 x 10 GbE to 2 x 40 GbE. The cards are available in a low-profile PCI and in OCPv2 form factor. FX series right now includes only one card, a modified version of Agilio CX 2 x 10 GbE with an additional quad-core ARMv8 processor with 2 GB of RAM on-board. The LX series is the most powerful family and is built as a high-profile PCI card with 2 x 40 GbE or 1 x 100 GbE interfaces and NFP-6480 silicon with 8GB of DDR3-1866Mhz DRAM w/ECC. P4的网站上还列出了更多智能网卡。
请看下面的语言:
IP[] _receivers
loop rtp_1_to_n { # coroutine to relay/pass on RTP packets
pkt = recv()
for ip in _receivers:
sendto(pkt, ip)
endfor
}
我们把它叫做DPTD: Data Plane Transmission Description. 笑够了再往下看,也许我们能增强并实现它呢?
DPTD里没有指针。if pkt[1:4] == 000001h 这样检查数组下标是否越界时不用检查a[1], a[2], a[3]3次。没有goto语句。
for i = 0 to 1000 step 1 for j = 0 to 10 for k = 0 = 10编译时遇到两条出错信息:
1. for最多套2层
2. 每个for最多循环100次
这样程序好像没法写成死的了吧?默认网络字节顺序。
Linux kernel里可不能像用户态程序那样用阻塞式recv等。好像有kernel thread。有人在用户态下做了个C的协程库(只能用全局变量)。写个kernel module, 实现协程库功能是可以做到的。
该module解释执行DPTD不难。解释执行没有那么慢,Java还能写Web服务器呢: Tomcat.
难点有2:
1. DPTD与外界的交互,如启动和停止协程,修改_receivers。
2. 做成编译型。
1)好像不是太难,handle = dptd_exec('loop rtp_1_to_n ...'), 像Javascript和Python的exec/eval,把代码传进去,返回handle,如123,然后用handle来start和stop。dptd_exec('IP[] _receivers'); 定义_receivers, dptd_exec('_receivers += 192.168.0.1'),可参考JS和Python Engine的做法。
2. 做成编译型好像挺难但不是做不到。关键每个协程得有自己的堆栈。我在DOS下写flood fill时干过mov old_sp, sp; mov sp, 大内存块地址,递归,mov sp, old_sp. kernel咋加载a.out的?
Erlang能"一行怒解TCP", 但语法贼晦涩。
不好意思,我标题党的。
参考资料: The Linux Virtual Server Venture (LVS) permits load adjusting of organized administrations, for example, web and mail servers utilizing Layer 4 Exchanging. search(章文嵩 百科), search(IPVS, iptables and kube-proxy).
RTSP, RTP, RTCP, RTMP傻傻分不清?的更多相关文章
- SIP SDP RTSP RTP RTCP webrtc
rfc1889 rfc2326 rfc3261 rfc3550 rfc3856 rfc6120. SIP SDP RTSP RTP RTCP,就像他们出现的顺序一样,他们在实际应用中的启用 ...
- RTSP,RTP,RTCP的区别
下面的文章讲解的都非常详细,可以参考OpenRTSP的源码学习.这个是live555库里面的工具Demo http://www.360doc.com/content/12/0516/23/782850 ...
- 浅谈协议(二)——视频流协议 [RTP/RTCP/RTMP/HTTP_FLV]
- RTP RTCP RTSP
1.RTP over UDP和RTP over RTSP有什么区别?2.RTP over RTSP是不是就是RTP over TCP?3.RTP over TCP 打包视频是不是要加4个字节的头,是 ...
- EasyPusher RTSP推流/EasyRTMP RTMP推流Android安卓摄像头视频偏暗的问题解决方案
本文转自EasyDarwin团队成员JOHN的博客:http://blog.csdn.net/jyt0551/article/details/75730226 在我们测试EasyPusher/Easy ...
- 流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls)
RTP 参考文档 RFC3550/RFC3551 Real-time Transport Protocol)是用于Internet上针对多媒体数据流的一种传输层协议.RTP协议详细 ...
- [转]流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls)
[转]流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls) http://blog.csdn.net/tttyd/article/details/12032357 RTP ...
- [转帖]十分钟快速理解DPI和PPI,不再傻傻分不清!
十分钟快速理解DPI和PPI,不再傻傻分不清! https://baijiahao.baidu.com/s?id=1605834796518990333&wfr=spider&for= ...
- RTP/RTCP、TCP、UDP、RTMP、RTSP
OSI中的层 功能 TCP/IP协议族 应用层 文件传输,电子邮件,文件服务,虚拟终端 TFTP,FTP,HTTP,SNMP,SMTP,DNS,RIP,Telnet 表示层 数据格式化,代码转换,数据 ...
随机推荐
- Linux上的多进程间通信机制
最近项目需要一个类似于Android上广播通信机制,方便多进程间相互通信,可以是一对多,多对一,或者多对多. 大致如下 Linux现有的进程间通信能用的只有 管道 消息队列 信号量(这个还只能算同步机 ...
- Kill杀死Linux中的defunct进程(僵尸进程)
一.什么是defunct进程(僵尸进程)? 在 Linux 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他,那么他将变成一个僵尸进程.当用ps命令观察进程的执行状 ...
- 第06课 OpenGL 纹理映射
纹理映射: 在这一课里,我将教会你如何把纹理映射到立方体的六个面. 学习 texture map 纹理映射(贴图)有很多好处.比方说您想让一颗导弹飞过屏幕.根据前几课的知识,我们最可行的办法可能是很多 ...
- 记录 mysql 使用时遇到的问题
1,linux平台上mysqld和mysql的区别. 首先,mysql数据库是标准的c/s架构,yum安装时注意到了,有mysql和mysql-server包 mysql是客户端的工具,mysqld ...
- SpringBoot整合reids之JSON序列化文件夹操作
前言 最近在开发项目,用到了redis作为缓存,来提高系统访问速度和缓解系统压力,提高用户响应和访问速度,这里遇到几个问题做一下总结和整理 快速配置 SpringBoot整合redis有专门的场景启动 ...
- 绚丽的色彩从何而来_LOTO示波器实测WS2812B系LED光源
绚丽的色彩从何而来_LOTO示波器实测WS2812B系LED光源 不管你对 "RGB性能狂升300%" 的梗认同不认同,不可否认,绚丽的彩色很是酷炫,在现在市面上带"灯& ...
- NAT & 防火墙
NAT 网络地址转换 NAT产生背景 今天,无数快乐的互联网用户在尽情享受Internet带来的乐趣.他们浏览新闻,搜索资料,下载软件,广交新朋,分享信息,甚至于足不出户获取一切日用所需.企业利用互联 ...
- MySQL高级篇 | 索引介绍
前言 性能下降SQL慢的原因 查询语句写的烂 索引失效 单值索引 复合索引 关联查询太多join(设计缺陷或不得已的需求) 服务器调优及各个参数设置(缓冲.线程数等) 索引是什么 MySQL官方对索引 ...
- springboot使用之请求参数与基本注解
@PathVariable 作用:@PathVariable是spring3.0的一个新功能:接收请求路径中占位符的值,将URL中占位符参数{xxx}绑定到处理器类的方法形参中@PathVariabl ...
- 华为开发者大会主题演讲:3D建模服务让内容高效生产
内容来源:华为开发者大会2021 HMS Core 6 Graphics技术论坛,主题演讲<3D建模服务使能3D内容高效生产>. 演讲嘉宾:华为消费者云服务 AI算法专家 3D建模服务(3 ...