TS流包有效数据位置计算(adaption_field_control)

unsigned int GetSectionStart(unsigned char *ucPacketBuffer, struct ts_packet_head  *pstPacketHead)
{
	unsigned int uiSectionStart = 0;

	switch(pstPacketHead->adaptation_field_control)
	{
		case 0:	break;
		case 1:	uiSectionStart = 4;
				break;
		case 2: break;
		case 3: uiSectionStart = 5 + ucPacketBuffer[4];
			    break;
	}

	if(pstPacketHead->payload_uint_start_indicator)
	{
		uiSectionStart = uiSectionStart + ucPacketBuffer[uiSectionStart] + 1;
	}

	return uiSectionStart;
}

在写这段程序的时候查了好久才想通,结果后面回过来看的时候又忘记了,还是稍微总结下吧。

       adaption_field_control为“调整字段控制”,表示TS分组首部后面是否跟随有调整字段和有效负载。01仅含有效负载,10仅含调整字段,11含有调整字段和有效负载。为00解码器不进行处理。空分组没有调整字段。如果有调整字段就是包数据的第一位(除去包头)指定调整字段长度。

      因为00和10都没有有效负载所以不进行处理,为1表示只有有效负载,数据从第5个字节(数组下标为4)开始;如果为11则从调整字段后一位(第6个字节,数组下标5)加上调整字段长度为包有效数据开始位置。

你可能感兴趣的:(DTV相关)