继续上一篇博客,在使用x264对视频进行编码之后,我们需要将编码好的视频进行网络传输,发送给其他的客户端,之后再进行解码。那么,这篇博客我将介绍下如何使用jrtplib这个库对编码后的文件传输。
RTP协议基础知识:
首先,我们依然要先了解一些关于协议的基础知识,不然对于其中的传输参数与发送的数据包顺序什么的我们也就无从下手。在这里,我们仅对一些传输需要了解的关键知识进行介绍,若想了解更全面的关于RTP协议的知识,请直接参看RTP协议的rfc文档,另外,这里有一份翻译的中文版。或者你可以参考这篇博客:按照RFC3984协议实现H264视频流媒体(附源代码),其中有很多有用的资料。
RTP(Real-time Transport Protocol)协议,详细说明了在互联网上传递音频和视频的标准数据包格式。它一开始被设计为一个多播协议,但后来被用在很多单播应用中,所以这个协议既支持单播又支持多播。RTP协议和RTP控制协议RTCP一起使用,而且它是创建在UDP协议上的。但是网上也有人说如果不使用RTSP协议(不了解的话,点这里)的话,RTCP协议就等于形同虚设,我对此观点不太赞同,我觉得不使用RTSP协议也是可以用RTCP配合RTP协议是用的。我在下面的介绍中将会有应用。
既然RTP协议定义的是一个数据包格式,那么下面我们来具体研究下对于传输H264来说,其数据包时如何定义的。
首先,我们来看RTP数据包的结构,RTP数据包由RTPheader和RTPpayload组成,下图为RTP数据头部格式:
图1,RTP数据包格式