转自http://blog.csdn.net/leixiaohua1020/article/details/50535230
1、原理
视频如果前面损坏或后面损坏可以从中间继续播
3、名词解释
MPEG-TS(Transport Stream“传输流”;又称TS、TP、MPEG-TS)是用于音效、图像与数据的通信协定,最早应用于DVD的实时传送节目。
sync_byte 同步字节,固定为0x47 ,表示后面的是一个TS分组,当然,后面包中的数据是不会出现0x47的
transport_error_indicator传输错误标志位,一般传输错误的话就不会处理这个包了
payload_unit_start_indicator这个位功能有点复杂,字面意思是有效负载的开始标志,根据后面有效负载的内容不同功能也不同,后面用到的时候再说。
transport_priority 传输优先级位,1表示高优先级,传输机制可能用到,解码好像用不着。
PID 这个比较重要,指出了这个包的有效负载数据的类型,告诉我们这个包传输的是什么内容。前面已经叙述过。
transport_scrambling_control加密标志位,表示TS分组有效负载的加密模式。TS分组首部(也就是前面这32bit)是不应被加密的,00表示未加密。
adaption_field_control 翻译为“调整字段控制”,表示TS分组首部后面是否跟随有调整字段和有效负载。01仅含有效负载,10仅含调整字段,11含有调整字段和有效负载。为00的话解码器不进行处理。空分组没有调整字段
continuity_counter 一个4bit的计数器,范围0-15,具有相同的PID的TS分组传输时每次加1,到15后清0。不过,有些情况下是不计数的。如下:(1)TS分组无有效负载(2)复制的TS分组和原分组这个值一样(3)后面讲到的一个标志discontinuity_indicator为1时
adaptation_field()调整字段的处理
data_byte有效负载的剩余部分,可能为PES分组,PSI,或一些自定义的数据。
实时传输协议RTP(Real-time Transport Protocol)是一个网络传输协议,详细说明了在互联网上传递音频和视频的标准数据包格式。
UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
3、代码
关于用到的结构体参考http://blog.csdn.net/qingkongyeyue/article/details/52123732
关于用到的函数参考http://blog.csdn.net/qingkongyeyue/article/details/52921559
这里要注意的是htons(port)这里是将16位数从主机字节序(小端字节序)转换成网络字节序(大端字节序)。网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。网络字节顺序采用big endian排序方式。
这里的INADDR_ANY就是指定地址为0.0.0.0的地址,这个地址事实上表示不确定地址,或“所有地址”、“任意地址”。 一般来说,在各个系统中均定义成为0值。
下面是时间戳,假若是MP2T类型,判断同步字节,固定为0x47 ,表示后面的是一个TS分组