流媒体小记包含一些面试问题
RTMP(应用层协议)是TCP传输还是UDP传输?
1、RTMP官方文档没有明确的表示不支持UDP传输,但是通篇的例子都是TCP传输RTMP;包括一些开源流媒体,一般都只采用TCP传输RTMP;
2、主要可能是考虑TCP有乱序重排,和丢包重传;另外是RTMP的chunkSize一般设置的比较小,可能一帧发很多chunk,UDP的话丢数据整个帧也就没办法解码了;
3、RTMP也有变种协议支持UDP传输;
4、RTMP官方文档 https://rtmp.veriskope.com/pdf/rtmp_specification_1.0.pdf
TCP默认是阻塞还是非阻塞?
1、无论是win还是Linux,默认socket都是阻塞的;也就是读不出来或者写不进去就等着;
2、需要通过函数设置为非阻塞
Linux设置非阻塞:fcntl(socket, F_SETFL, flags | O_NONBLOCK);
Windows:
3、socket读写是针对从内核读出,和写入内核而言的

数据传输中的加密算法有哪些,用在什么地方?
1、加密算法分为对称加密,和非对称加密(公钥加密);对称加密使用相同的密钥,秘钥需要进行第二次的非对称加密;
2、公钥加密方式是使用对方的公钥加密,对方在使用自己的私钥解密,所以需要一个交换双方公钥的过程


3、常用加密方式:对称加密:AES128,AES192,AES256、base64加密;非对称加密:RSA加密;摘要加密:MD5(一般用于生成唯一ID)
RTMP打包格式?
chunk的 默认大小?为什么常用128字节?
1、chunksize大小是从128到65536字节;
Rtmp包中有几种时间戳?分别代表什么?
chunk中是否可以存多帧?
chunk中AAC的打包方式,怎么打包采样率的?
RTMP中PTS和DTS是怎么记录的?RTMP的时间单位是什么?
FLV的基本格式?他的时间基是什么?FLV和RTMP的关系是什么?
PTS、DTS的顺序,为什么会出现负值dts?
怎么区分P,B帧,是通过什么算法解析的slice?
AVCC annexb格式的区别?RTMP中使用的是AVCC还是annexb?
YUV表示什么?444,422,420的YUV排布和数据量什么样?
TCP同步,异步传输?MTU(是否TCP, UDP都有),MTU,MSS rtt MSL,TTL,等是什么?)
TCP传输的包头长什么样子?
MTU最大是多少?15W数据怎么发送过去?分包和组包,TCP和UDP的处理区别,丢包。
1、MTU:68字节到65535,不同的数据链路MTU大小限制也不同;MTU的设置可以更好地实现网络传输效率(图片来自图解TCP/IP)

2、MTU=1500时候;UDP 包的大小就应该是 1500 – IP头(20) – UDP头(8) = 1472(BYTES);TCP 包的大小就应该是 1500 – IP头(20) – TCP头(20) = 1460 (BYTES)
3、以太网MTU大小最初是由物理测试得到的一个传输效率最高的值,这个值需要路由器,交换机,网桥都支持;
4、MTU限制 = ip头20字节+传输协议头(TCP=20、UDP=8,ICMP【ping】=8)+荷载内容;
数据包为什么需要排序?
1、因为发出去之后路由路径不一定只有一条,所以到达对端的顺序不一定是发送顺序;就需要重新排列数据包;
RTP 打包方式FU打包?single NALU,stap-A打包方式的具体样式?
RTP包头格式?
B 帧能不能出现在两个P帧之间? B帧是怎么产生的?
HLS与RTMP(flv)比较?
1、首先要知道HLS播放的是M3U8索引的TS切片,要播放成功HLS至少M3U8里要有3个切片。所以HLS延时较大;
2、FLV全名叫flash video,RTMP是FLV格式的进化,底层都需要flash支持;
3、HLS 全名HTTP live streaming, HTTP直播流
HLS的优势和不足: 优势: 使用HTTP协议传输数据,不会被防火墙屏蔽掉,易于分发。 码率自适应,提高播放流畅度。 无状态协议,便于负载均衡。 浏览器支持好,无需安装插件。 不足: 实时性差,延迟高,两个原因: 1采用切片式的多媒体文件,因为切片需要时间编码,所以一个切片的延时不可避免。 2使用http短连接,需要不断的与server建立连接,且基于tcp,需要三次握手,四次挥手,交互耗时长 ———————————————— 原文链接:https://blog.csdn.net/Ritchie_Lin/article/details/121733309
解码输出的stride是什么?为什么会有这个?
(方便指令集加速,一种对齐的部分,padding,不含视频数据)
stride是硬解码输出YUV才有的产物,主要是不同芯片厂商为了提高解码性能和速度,制定了优化策略,而产生stride;但是stride多出来的部分是无用数据;

就比如这种 1920*1080硬解码输出2048*1088

RTSP协议传输有RTCP吗?RTCP是怎么放置的?
1、(SDP 2通道,通道2一般是RTCP)
2、RTSP传输数据有RTCP的时候,一般会分为RTSP协议解析,和RTP数据解析部分,RTP数据解析部分会区分不同的通道,一般单号的通道是处理RTCP的
3、通道信息在SDP交互的时候告知,数据传输RTP包24 00 len1 len2 80 e0.....这个是第一个通道,24 01 len1 len2 80 c8....是RTCP,24 02 len1 len2 80 ....是音频
4、RTSP传输是TCP,UDP均可的,也是低延迟,因为它也是按帧传输解析的。
5 rtsp交互过程和信令内容解析可以看我的这篇 wireshark解析RTSP交互
国标协议传输RTCP吗。怎么传的?
1、双端口,一个接收RTP数据,一个接收RTCP,双端口号接收RTP国标,+1端口接收RTCP
2、RTCP 一般有SR(发送端报文),RR(接收端报文),SDES(源描述),BEY(通知离开)等信息对应的RTP包头是0x 80 0xc8,0x80 0xC9,0x80 0xCA,0x80 0xCB
3、RTCP一般是UDP传输的,包比较小;(没说不能TCP,但是一般只有UDP传输RTCP)
4、国标数据传输一般是需要sip(会话发起协议Session initialization Protocol)协议配合的,因为sip要协商设备进行主动发流,接收注册、注册,停止,用于创建、修改和释放一个或多个参与者的会话等
SIP协议是干什么的?
1、SIP的默认传输协议是 UDP;SIPS:的缺省传输协议是TCP。tcp/udp默认5060,tcp+tls5061;tcps5061.
2、重点是用户代理、注册、invite会话发起的过程;可以网上搜一下看一下 北小菜 大佬的教学视频
Http协议是基于什么传输的?
1、Http超文本传输协议,是基于TCP协议传输的,目前的Http不支持UDP传输;Http3开始才基于QUIC(UDP)传输支持;
2、Http是一个应用层的协议;用于网页文本信息传输;{以太网首部 { IP首部 { TCP首部 {http超文本}}}}
3、进过了域名解析,路由选择,三次握手,接收端数据包重排,丢包重传(如果丢包了的话)进行数据传输;
http的四次挥手中的timewait和closewait?
1、不管是客户端还是服务端,谁在请求头里发了connection:close,它的对端就会主动发起挥手
2、四次挥手涉及FIN,ACK,的flag;主动挥手端可能会出现timewait;被动挥手端可能会出现closewait(图片来源小林coding)

3、timewait是由于主动关闭引起,但是他最长持续2MSL时间,影响是会占用端口,但是不是永久的;可是closewait是被动端等待本端关闭的时间,影响也是会占用端口,但是可能会因为程序bug而永久处于closewait状态(只要程序还在)
4、timewait等待时长 MSL一般是60秒,主要是为了保证对方能顺利 接收ACK,否则还要进行挥手FIN;另外是保证本次交互的http数据已经完全在网络中消失

点播:
HLS点播相对于RTSP的MP4点播优势在于,MP4的MOOV解析耗时;缺点是TS点播不能精准定位;
音视频同步:
为什么一般不使用音视频向系统时钟同步?
人为修改服务器的系统时间,会导致系统时钟的定时器错乱;
如果有时间戳的跳跃(不是偶尔的调变);就要长时间的等待;
时间戳问题:
PS和TS的时间戳在PES里
RTSP是怎么做流控的?做流控的方案?
RTSP一般是通过RTCP中的丢包之类的回复参数来控制调整发送端的码率
其他方案:接收端* 秒接收不到视频,数据帧,通过业务通知发送端
SIP协议常用功能?
注册,invite,查询;参考北小菜的博客
TCP传输和UDP传输的缺点?
TCP粘包
UDP乱序
浙公网安备 33010602011771号