История изменений
Исправление 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);
Исходная версия 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);