LINUX.ORG.RU

История изменений

Исправление zaz, (текущая версия) :

pack_num = (len % RTP_PAYLOAD_MAX_SIZE) ? (len / RTP_PAYLOAD_MAX_SIZE + 1) : (len / RTP_PAYLOAD_MAX_SIZE);
		/* размер данных в последнем пакете */
last_pack_size = (len % RTP_PAYLOAD_MAX_SIZE) ? (len % RTP_PAYLOAD_MAX_SIZE) : (RTP_PAYLOAD_MAX_SIZE);

Помоему у вас сдесь проблемка не большая, вы высщитывате ко-во пакетов и размер последнего пакета на основе размера пайлоада (len) а фактически фрагментируете (len-1) байт (NALU заголовок не фрагментируется). В резултате если у вас на входе был len=(RTP_PAYLOAD_MAX_SIZE+1) то вы получите last_pack_size=1. А далее

memcpy(nalu_playload, data + (current_pack * RTP_PAYLOAD_MAX_SIZE) + 1, last_pack_size - 1);
send_data_client(sendbuf, last_pack_size - 1 + 14);
В последнем пакете будет только NALU заголовок без данных, может это и не страшно и проблема не в этом - но както выглядет не очень корректно.

Исходная версия zaz, :

pack_num = (len % RTP_PAYLOAD_MAX_SIZE) ? (len / RTP_PAYLOAD_MAX_SIZE + 1) : (len / RTP_PAYLOAD_MAX_SIZE);
		/* размер данных в последнем пакете */
		last_pack_size = (len % RTP_PAYLOAD_MAX_SIZE) ? (len % RTP_PAYLOAD_MAX_SIZE) : (RTP_PAYLOAD_MAX_SIZE);

Помоему у вас сдесь проблемка не большая, вы высщитывате ко-во пакетов и размер последнего пакета на основе размера пайлоада (len) а фактически фрагментируете (len-1) байт (NALU заголовок не фрагментируется). В резултате если у вас на входе был len=(RTP_PAYLOAD_MAX_SIZE+1) то вы получите last_pack_size=1. А далее

memcpy(nalu_playload, data + (current_pack * RTP_PAYLOAD_MAX_SIZE) + 1, last_pack_size - 1);
send_data_client(sendbuf, last_pack_size - 1 + 14);
В последнем пакете будет только NALU заголовок без данных, может это и не страшно и проблема не в этом - но както выглядет не очень корректно.