extraire un champ dans un paquet RTP

extraire un champ dans un paquet RTP - C++ - Programmation

Marsh Posté le 22-04-2011 à 16:01:12    

Bonjour,
Je code en C++
j'aimerais savoir comment on fait pour extraire un bloc de données dans un paquet RTP?
Il faut que j'extraie le champ SSRC qui se trouve à 8octet du début du header. le champ SSRC est en fait de type unsigned int. Comment le récupérer à partir du header RTP et l'interpreter en tant qu'unsigned int.
 
j'ai envie de faire quelque chose du type :

Code :
  1. unsigned char* ssrc = new unsigned char* ssrc[4]
  2. unsigned int ssrc = (unsigned int) ssrc;


 
Merci d'avance pour votre aide.

Reply

Marsh Posté le 22-04-2011 à 16:01:12   

Reply

Marsh Posté le 22-04-2011 à 16:49:29    

Vu que ton champ fait 32 bits, il faut utiliser le type unsigned long int qui lui aussi fait au moins 32 bits quelque soit l'architecture.
A+,


Message édité par gilou le 22-04-2011 à 19:05:35

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 22-04-2011 à 17:20:10    

alors, le cast C, quand tu es en C++, c'est très très mal. Ici, par exemple, ca aura comme effet dévastateur que l'entier que tu vas récupérer sera en fait l'adresse de ton pointeur et non la zone pointée ...
 
Ensuite, ce que tu récupères du réseau doit généralement être mis au format d'endianness de ta machine via un appel à ntohl (Network TO Host Long) dans le cas d'une donnée 32 bits.
 
Et comme le dit gilou, il faut que tu utilises un long int, car c'est là le type qui te garantit contenir au moins 32 bits (et sur la plupart de nos architectures actuelles, ce sera bien 32)
 
en gros, tu pourras faire quelque chose qui s'apparente à ca :

Code :
  1. long int getSsrcFromRtp( const char* RtpPacket )
  2. {
  3.     return ntohl( *reinterpret_cast< const long int* >( RtpPacket + 8 ) );
  4. }



Message édité par theshockwave le 22-04-2011 à 17:20:26

---------------
last.fm
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed