История изменений
Исправление zaz, (текущая версия) :
fwrite(audioData, strlen(audioData), 1, output);
strlen здесь вообще ни к чему, здесь строк нету реальный размер аудио данный в пакете это (len - sizeof(RtpHdr)); тоесть код должен быть
fwrite(audioData, (len - sizeof(RtpHdr)), 1, output);
Чтение и отправка выглядит ужасно :), он не понятно что делает но явно не занимается отправкой аудио в RTP. Должно быть чтото вроде этого (код не проверяю поэтому может и не скомпилируется):
// Новая структура для RTP с PCMA/PCMU данными
#pragma pack(push, 1)
struct RTP_PCMA
{
struct RtpHdr hdr;
char audioData[160];
};
#pragma pack(pop)
// .....
struct RTP_PCMA outPacket;
int ts = 0, seq = 0, ssrc = 1000000000;
srand(time(NULL)); // srand нужно вызывать ДО rand иначе от него толку 0
ssrc += rand()%8999999999;
// Заполняем поля заголовка которые не меняются для всего потока
outPacket.hdr.version = 2;
outPacket.hdr.p = 0;
outPacket.hdr.x = 0;
outPacket.hdr.cc = 0;
outPacket.hdr.m = 0;
outPacket.hdr.pt = 8;
outPacket.hdr.ssrc = htonl(ssrc);
while (!feof(output)) {
fread(outPacket.audioData, 160, 1, output);
ts += 160;
outPacket.hdr.seq = htons(++seq);
outPacket.hdr.ts = htonl(ts);
sendto(s1, &outPacket, sizeof(outPacket), 0, (struct sockaddr *) &si_other, slen);
usleep(19500);
}
Исходная версия zaz, :
fwrite(audioData, strlen(audioData), 1, output);
strlen здесь вообще ни к чему, здесь строк нету реальный размер аудио данный в пакете это (len - sizeof(RtpHdr)); тоесть код должен быть
fwrite(audioData, (len - sizeof(RtpHdr)), 1, output);
Чтение и отправка выглядит ужасно :), он не понятно что делает но явно не занимается отправкой аудио в RTP. Должно быть чтото вроде этого (код не проверяю поэтому может и не скомпилируется):
// Новая структура для RTP с PCMA/PCMU данными
#pragma pack(push, 1)
struct RTP_PCMA
{
struct hdr;
char audioData[160];
};
#pragma pack(pop)
// .....
struct RTP_PCMA outPacket;
int ts = 0, seq = 0, ssrc = 1000000000;
srand(time(NULL)); // srand нужно вызывать ДО rand иначе от него толку 0
ssrc += rand()%8999999999;
// Заполняем поля заголовка которые не меняются для всего потока
outPacket.hdr.version = 2;
outPacket.hdr.p = 0;
outPacket.hdr.x = 0;
outPacket.hdr.cc = 0;
outPacket.hdr.m = 0;
outPacket.hdr.pt = 8;
outPacket.hdr.ssrc = htonl(ssrc);
while (!feof(output)) {
fread(outPacket.audioData, 160, 1, output);
ts += 160;
outPacket.hdr.seq = htons(++seq);
outPacket.hdr.ts = htonl(ts);
sendto(s1, &outPacket, sizeof(outPacket), 0, (struct sockaddr *) &si_other, slen);
usleep(19500);
}