rtp

从零开始写一个发送h264的rtsp服务器(下)

梦想的初衷 提交于 2020-10-01 19:20:57
从零开始写一个发送h264的rtsp服务器(下) 一、H264是如何通过rtsp发送的 简单来说,H264就是通过打包到rtp协议的数据部分发送出去的。 H264打包成rtp数据包有三种方式 单一封包模式 组合封包模式 分片模式 要想弄明白这三种打包方式,必须先弄清楚h264的组成结构,或者叫组成单元。 二、H264结构单元 H264数据流最基本的结构单元叫nalu单元。 H264的nalu单元组成: [start code] + [nalu header] + [nalu paload] start code: 可以为 001 或者 0001, 也就是点3个字节或者4个字节 nalu header: 占一个字节 nalu paload: 长度不定 每一帧画面拥有一个或多个nalu单元,每个nalu单元以start code进行分离 nalu header nalu header占一个字节,它又分了三个部分:F,NRI,TYPE 7 6-5 4-0 F NRI TYPE F:一般为0 NRI:指示nalu单元的重要性,不同编码器编出来的H264数据不同 TYPE:nalu类型 TYPE类型: 类型 定义 0 未定义 1-23 NAL单元 24 STAP-A 单一时间组合包 25 STAP-B 单一时间组合包 26 MTAP-16 多个时间组合包 27 MTAP-24 多个时间组合包

【文末有福利】揭秘阿里中台!一文看懂阿里推荐业务的两项利器

大憨熊 提交于 2020-09-30 02:59:25
从工程的角度看,搜索和推荐既有差异点,又有共同点。阿里巴巴集团的搜索和推荐系统由同一个部门研发,因此很多工程能力是复用的,如搜索和推荐业务的算分服务引擎都是RS/RTP。 本文介绍阿里巴巴推荐的中台产品—BE召回引擎和RTP算分服务,这是阿里巴巴推荐业务的两项利器。 1、召回引擎BE BE(Basic Engine)是基于阿里巴巴集团另一个更底层的框架服务Suez构建的。在Suez框架服务的基础上,BE实现了与推荐业务相关的各种功能组件,如向量召回技术、多表join召回,以及以自定义插件形式提供的排序和算分插件接口。 1.架构及工作原理 BE是一个典型的多列searcher+proxy架构,如图1所示。 图1 BE集群部署 图1中的proxy集群有3个实例,完全对等,互为备份。searcher集群有2行4列,这表示I2I等数据被划分成4份放到4列机器上。每一列上的数据各不相同,但是执行的计算逻辑完全相同,4列合在一起组成完整的一行。2行之间完全对等,互为备份。 各种I2I/S2I/B2I的召回(search)、合并(union)、关联(join)、过滤(filter)和排序(sorter)均在searcher本地完成,最后经过proxy的合并排序(merge sorter)返回,如图2所示。 图2 BE内部逻辑 图2中的I2I、S2I、C2I都是BE支持的召回功能

【教程】RTSP/RTMP/HTTP/HLS协议视频流媒体播放器EasyPlayer-RTSP安卓版本,切换视频流黑屏怎么办?

喜欢而已 提交于 2020-09-29 12:31:31
EasyPlayer视频流媒体播放器支持RTSP、RTMP、HTTP、HLS、UDP、RTP、File等多种流媒体协议播放、支持本地文件播放,支持本地抓拍、本地录像、播放旋转、多屏播放、倍数播放等多种功能特性。使用了 TSINGSEE青犀视频 产品的小伙伴都知道,EasyNVR、EasyDSS内都集成了EasyPlayer.JS版本。 当然了,EasyPlayer-RTSP、EasyPlayer-RTMP也经受了众多用户的使用考验,表现出了强大的播放和调用性能。 我们比较细心的测试专员在对EasyPlayer-RTSP-Android进行测试的时候,就发现切换视频流会出现黑屏的情况,如何保证不黑屏就是现有用户需要解决的问题。 分析问题 在同一个界面中的同一个播放器上,需要切换不同的视频流,如果先调用EasyPlayerClient的stop方法,再调用start方法,那样会出现一段黑屏的情况,用户体验会很差,需要优化代码,做到无缝切换。 解决问题 改写EasyPlayerClient的代码,新增reStart方法: 1、第一次start时候,保存channel: channel = mClient.registerCallback(this); 2、新增closeStream方法,关闭Client: public void closeStream() { if (mClient !

H264 FU-A解包分析

旧城冷巷雨未停 提交于 2020-08-16 17:53:14
1) FU-A分包原理 超过MTU发送单元的H264视频包,需要分片发送,12字节的RTP头后面跟随的就是FU-A分片。FU-A分片的前两个字节分别位FU indicator 和 FU header。FU indicator的前三位和 FU header的后五位构成了NAL单元的头 说明下元素 F:禁止位,0表示正常,1表示错误,一般都是0 NRI:重要级别,11表示非常重要。 TYPE:表示该NALU的类型是什么, 所以有的文档中SPS是0x27,只是NRI的重要性设置不一样而已 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | FU indicator | FU header | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | | FU payload | | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | :...OPTIONAL RTP padding | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

RTCP实现代码分析

十年热恋 提交于 2020-08-16 01:26:58
场景 RTP over TCP中 RTCP的实现代码 std::string strName = "fengyuzaitu@51.cto"; int nLength = 2 + 2 + 8 + 20 + 4 + 6 + strName.size(); std::string strRTCPBuffer; //对齐四个字节,并且让最后的字符是0x00,保证wireshark抓包最后显示Type: END (0) int nRet = (strName.length() + 2) % 4; if (0 != nRet) { nLength = nLength + 4 - nRet; } else { nLength = nLength + 4; } strRTCPBuffer.resize(nLength); //$+channel strRTCPBuffer[0] = 0x24; strRTCPBuffer[1] = 0x01; //RTCP报文长度,一段是RTCP统计数据内容,一段是RTCP源描述 *(unsigned short*)&strRTCPBuffer[3] = htons(nLength - 4); //Sender Report strRTCPBuffer[4] = (char)(2 << 6); // V=2, P=RC=0 strRTCPBuffer[5] =

阿里定向广告新一代主模型:基于搜索的超长用户行为建模范式

最后都变了- 提交于 2020-08-15 23:14:16
  机器之心发布    机器之心编辑部    阿里提出并实现了一套基于搜索范式的超长用户行为建模新方法Search-based user Interest Model(SIM),用于解决工业级应用大规模的用户行为建模的挑战。      对用户沉淀的海量历史行为数据进行充分的理解和学习, 是电商、信息流、短视频推荐这类强用户行为反馈驱动的应用中,近几年技术研发的关键方向,尤其是 CTR 模型这个领域,更是关键的胜负手。   以淘宝为例,大量的用户在网站上沉淀了长达数年甚至十几年的历史行为数据:平均每个用户每年产生的点击量超过了 10000,更不用提其中高频用户的活跃行为了。然而,如何建模这种超长行为序列的数据,学术界和工业界都还在早期阶段摸索。传统的如 LSTM、Transformer 等序列建模的技术,普遍适用于序列数据长度在 100 以内的情况,当序列长度提高一个数量级达到 1000 以上时,都会存在困难;此外,即使离线模型能够处理,如何将模型部署到实际生产系统,在时延和吞吐上都达到工业级标准,更是极具挑战的难题。   18 年我们团队研发上线、19 年在 KDD 上披露的 MIMN[1],是业界首个处理超长行为序列的工业级解决方案,其提出了一套能够对长达 1000 长度的行为序列数据进行训练和在线 serving 的整体解决方案。然而,MIMN 算法基于的是 memory

NVMe时代全面到来 华为距离登顶全球存储市场还有多远?

爱⌒轻易说出口 提交于 2020-08-12 16:34:00
走在存储行业前沿,华为NVMe SSD存储历尽千帆仍少年。 出品 | 常言道 作者 | 丁常彦 如果说全闪存是未来存储市场的大势所趋,那么NVMe SSD则是全闪存市场的发展大势; 如今,全球各大存储厂商都在加速推出基于NVMe的新一代存储产品,华为同样也在积极投身这一代表存储技术未来走向的前沿领域。 日前,入选华为“天才少年”的两名博士生,在加入华为后也将从事华为存储相关的研究,新型存储介质(NVM,SMR)、数据库和键值存储系统正是他们的研究方向之一。 事实上,早在2005年,华为就开始了闪存技术的研究,经过十多年的持续积累,目前华为已经是存储行业内拥有SSD盘片级专利最多的厂家之一。尤其 在NVMe(非易失性内存主机控制器接口规范)领域,华为更是在业内唯一端到端开发了NVMe SSD盘、NVMe闪存控制器和NVMe全闪存操作系统的企业,并在新一代OceanStor全闪存中率先实现了全系列端到端NVMe产品。 梁启超在《少年中国说》中如是说:少年智则国智,少年富则国富;少年强则国强,少年独立则国独立……通过“天才少年”计划聚拢高端人才的华为存储,不仅要成为NVMe SSD的引领者,距离登顶全球存储市场也已经不远。 成为存储事实标准 NVMe时代全面到来 NVM(非易失性存储器)是一种计算机即使关闭电源也能够保存已保存数据的存储器;与易失性存储器不同

Linux基础知识(二)--网络

ぐ巨炮叔叔 提交于 2020-08-12 14:23:10
简述TCP三次握手,四次断开,及其优点和缺点,同时相对于UDP的差别? TCP与UDP概念: • TCP:传输控制协议,即面向连接; • UDP:用户数据报协议,无连接的,即发送数据之前不需要建立连接 TCP与UDP的优缺点上的区别: • TCP的优点: 可靠,稳定。TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。 • 三次握手 : 第一次握手,主机A向主机B发出一个含同步序列号的标志位的数据段给主机B ,向主机B请求建立连接。通过这个数据段,A向B声明通信请求,以及告知B可用某个序列号作为起始数据段进行响应; 第二次握手,主机B收到主机A的请求后,用一带有确认应答(ACK)和同步序列号(SYN)标志位的数据段响应A。通过此数据段,B向A声明已收到A的请求,A可以传输数据了,同时告知A可用某个序列号作为起始数据段进行响应; 第三次握手,主机A收到主机B的数据段后,再发送一个确认应答,确认已收到主机B 的数据段,之后开始正式实际传输数据。 ACK:TCP报头的控制位之一,对数据进行确认。确认由目的端发出,来告知发送端这个序列号之前的数据段都收到了。比如,确认号为X,则表示前X-1个数据段都收到了。只有当ACK=1时,确认号才有效,当ACK=0时,确认号无效