マルチキャストストリームからRTPシーケンス番号をカウントして、失われたパッケージを特定しようとしています。マルチキャストストリームからのカウントRTPシーケンス番号
次のCコードを参照してください:
int sock, bytesRead;
char buffer[MAXBUFSIZE];
uint16_t seq = 0;
uint16_t eseq = 0;
struct sockaddr_in saddr;
socklen_t socklen;
for(;;) {
bytesRead = recvfrom(sock, buffer, MAXBUFSIZE, 0,
(struct sockaddr *)&saddr, &socklen);
if (bytesRead) {
seq = (buffer[2] << 8)+buffer[3];
eseq++;
if (seq != eseq) {
std::cerr << " SEQ = " << seq << " ESEC = " << eseq << "\n";
eseq = seq;
}
}
}
をそして、私は次のような結果受け取っ:各128
RTPパッケージに、あなたが|ESEC - SEQ| = 256
を見ることができるように上げ
12:47:44 SEQ = 58112 ESEC = 57856
12:47:45 SEQ = 57984 ESEC = 58240
12:47:45 SEQ = 58368 ESEC = 58112
12:47:45 SEQ = 58240 ESEC = 58496
12:47:45 SEQ = 58624 ESEC = 58368
12:47:46 SEQ = 58496 ESEC = 58752
12:47:46 SEQ = 58880 ESEC = 58624
12:47:46 SEQ = 58752 ESEC = 59008
12:47:46 SEQ = 59136 ESEC = 58880
12:47:47 SEQ = 59008 ESEC = 59264
12:47:47 SEQ = 59392 ESEC = 59136
12:47:47 SEQ = 59264 ESEC = 59520
エラーを、私はまた、RTPを削除しましたヘッダーを作成し、file.mpgにデータを書き込み、ビデオをエラーやアーチファクトなしで正常に再生します。
私が正しくあなたのコンバージョンそれはsigned char
配列されたバッファに起因する(左シフト)でのオーバーフローを持っているマルチキャストストリーム
[タグ:c]コードではありません。 – LPs
この '(buffer [2] << 8)'はオーバーフローします。 – LPs