2016-04-22 21 views
1

マルチキャストストリームから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配列されたバッファに起因する(左シフト)でのオーバーフローを持っているマルチキャストストリーム

+1

[タグ:c]コードではありません。 – LPs

+0

この '(buffer [2] << 8)'はオーバーフローします。 – LPs

答えて

3

からRTPシーケンス番号をカウントする方法を説明してください。

#include <stdio.h> 
#include <stdint.h> 

int main() 
{ 
    uint16_t seq1; 
    uint16_t seq2; 
    uint16_t seq3; 

      char buffer1[] = {0, 0, 0xE8, 0x80}; 
    unsigned char buffer2[] = {0, 0, 0xE8, 0x80}; 

    seq1 = (buffer1[2] << 8)+buffer1[3]; 
    printf("seq1: %d\n", seq1); 

    seq2 = (buffer2[2] << 8)+buffer2[3]; 
    printf("seq2: %d\n", seq2); 

    seq3 = buffer1[2]; 
    seq3 = (seq3 << 8)+buffer2[3]; 
    printf("seq3: %d\n", seq3); 

    return 0; 
} 

出力は次のとおりです:それはあなたがテスト/このコードサンプル使用して、それを解決することができUB

で変換をバッファ

seq1: 59264 
seq2: 59520 
seq3: 59520 

あなたはsigned charseq1)を使用して見ることができるようにすることは間違っています。 あなたが掲示した結果の最後の行に何が起こったかを示します。

+1

ヘルプと明確な説明をありがとう! –

関連する問題