• ベストアンサー

LinuxでRTPヘッダを作りたいのですが・・・

現在、簡易IP電話を作成しています。 UDPのデータ部分にそのまま音声データを入れている感じなのですが、 できればRTPを使いたいです。 RTPヘッダをプログラミング(C言語)したいときどのように書けばよいかわかりません。なんとなくですが、構造体を使うのかなぁとは思うのですが(汗) どのようにすればいいでしょうか?? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • goosyu
  • ベストアンサー率58% (36/62)
回答No.1

ヘッダ記述は次の2通りが考えられます。 ・ビットフィールドを使った構造体定義  ビットフィールドを使うには実際にビットの並びを検証する必要があり  ます。また開発するシステムに大きく依存しますので移植性を考えた  場合は避けるべきですが,よくソースでみかけますので使い勝手が  いいようです。(ビットフィールドをインターネット検索すると  問題点が詳しく書かれてますので参考にしてみては) ・情報は通常の構造体に定義しておき,ヘッダ作成時はその構造体を参照し  てビット操作を行いヘッダを作ります。  (ビット操作やビット演算子でインターネット検索すると解説があります   ので参考になります) ☆一応ビットフィールドを使った構造体をRTPヘッダ風に書いてみました。  また”http://sourceforge.jp/”の「検索」で"JRTPLIB”キーに検索  すると参考になるかもしれません。 /* ビットフィールド例 (ビッグエンディアン)*/ struct stRTPHeader { unsigned char ver : 2; unsigned char padding : 1; unsigned char ext : 1; unsigned char csrcCnt : 4; unsigned char mark : 1; unsigned char payloadType: 7; unsigned short seqNumber; // 16 bit シーケンス番号 unsigned long ts; // 32 bit タイムスタンプ unsigned long ssrc; // 32 bit 同期送信元 }; /* 普通の構造体と同じようにメンバにアクセス出来ます。 */ struct stRTPHeader rtph; // 普通の構造体と同じく宣言 rtph.ver = 2; // 構造体メンバのverに2を代入

d_x-x_b
質問者

お礼

ありがとうございます! ビットフィールドで、RTPヘッダ情報を定義することができました! ・・・のですが、UDPの上にRTPヘッダをどうやってくっつけたらいいかがわかりません(^_^;) すみませんが、RTPヘッダをUDPヘッダの上に乗せるやり方を教えてもらえないでしょうか??

その他の回答 (1)

  • goosyu
  • ベストアンサー率58% (36/62)
回答No.2

>>UDPの上にRTPヘッダをどうやってくっつけたらいいかがわかりません(^_^;) >>すみませんが、RTPヘッダをUDPヘッダの上に乗せるやり方を教えてもらえ >>ないでしょうか?? まずUDPパケットとRTPパケットの関係を確認して下さい。 UDPパケットはUDPヘッダとデータから構成され,そのデータの中に RTPパケットは格納されます。 一度,UDP(RFC768),RTP/RTCP(RFC3550)を確認した方が良いようです。

d_x-x_b
質問者

お礼

お礼が遅れて申し訳ありませんm(_ _)m 丁寧な答えありがとうございます! UDPのデータの中に自作RTPヘッダと音声データを入たらそれっぽいのができました! ありがとうございました♪

関連するQ&A