流媒体协议:1视频是一张张图片连续播放组成的图片,如果按照图片保存,占用空间很大,传输和存储都会占用大量空间,所以需要对图片进行处理,去空间化,去冗余化,编码处理2 直播,首先主播端把视频推流到服务器,服务器进行视频分发,客户端拉流,将视频拉取到本地用播放器进行播放。3 编码 将组成视频的图片进行编码,编码就是压缩过程。每张图片都是一帧,都是由像素组成的,每个像素由RGB组成,共24位,大小比如:1024×768×24约等于70M,视频和图片编码基于以下的特点,像素间的空间冗余,可以计算出来,视频序列播放间的时间冗余,视觉冗余,视觉不敏感,可以丢失一些数据,编码冗余,出现概率高的像素用的字节码少,低的用的字节码多,霍夫曼编码。4 视频如何压缩成图片的 视频序列将帧分为3种 I帧又叫关键帧,B帧又叫双向预测内插压缩帧,P帧单向预测内插编码帧,P帧要依赖前一个I帧,存的是和前一个I帧的差异,B帧依赖前后帧,压缩率更高,解码需要缓存之前的画面,还需要之后的画面,叠加得到最终画面。帧分成多个片,片分成多个宏块,宏块分成多个子块,传输,要转成二进制,网络提取层单元,NALU,网络提取层单元,传输的时候拆成一个个的单元,一个NALU由起始标识符,标识NALU的间隔,NALU header,主要包含NALU type,包括SPS,PPS或者帧类型,NALU payload,如果是SPS,则是图片尺寸,视频格式,如果是PPS,图像分片的信息,如图像类型,序列号,如果是帧,payload包含真正的图像数据。5如何将视频打包传输到对端 推流基于RTMP协议,是基于TCP协议,tcp建立以后要创建一个RTMP连接,建立这个连接是为了处理单独的事情,版本号和时间戳,如果客户端和服务端版本号不一致,直接断开连接。客户端发送C0,c1,c2,服务端发送s0,s1,s2,连接上以后,需要传输ckunk块大小和窗口大小,正式传输数据之前还需要创建流stream,通过这个流来推流。NALU需要放在message进行发送,message称为RTMP package包,message由message type,时间戳,stream id,payload和message body组成,message传输的时候拆成一个个的trunk,每个trunk有message id,接收到以后组装成message 6客户端先接收到解码参数,对NALU进行解码,交给播放器播放。
展开