GNU ccRTPは、RTP、IETFからのリアルタイムトランスポートプロトコル(RFC 3550、RFC 3551およびRFC 3555を参照)を実装したものです。 ccRTPは、高性能、柔軟で拡張可能な標準準拠のRTPがフルRTCPをサポートしてスタックを提供するGNU一般的なC ++に基づいてC ++ライブラリです。 ccRTPの設計と実装は、大容量のサーバやゲートウェイなどの個人的なクライアント·アプリケーションに適しています。
ccRTPの設計では、RTPは、アプリケーションレベルのプロトコルのフレームワークではなく、例えば、TCPやUDPのような典型的なインターネットトランスポートプロトコルとして定義されていることを考慮に入れています。このように、RTPはめったにアプリケーションから分離された層として実装されていません。
その結果、RTPのアプリケーションでは、多くの場合に適応RTPパケットのレイアウトや処理ルール、タイミング制約、セッションメンバシップの規則だけでなく、他のRTPとRTCPメカニズムをカスタマイズする必要があります。 ccRTPではなく、単にRTPパケット操作ライブラリであるより、RTPフレームワークのためのフレームワークを提供することを目的とします。
部分的なフレームを行うことができ、オーディオおよびビデオデータの両方をサポートし、またccRTPの設計において考慮されているが、分割/再組み立て。ユニキャスト、マルチユニキャストおよびマルチキャスト輸送モデルがサポートされているだけでなく、複数のアクティブな同期ソース、複数のRTPセッション(SSRCスペース)、および複数のRTPアプリケーション(CNAMEスペース)。これは、インターネット標準のすべてのフォームベースのオーディオおよびビジュアル会議システムを構築するために使用していますできます。
GNU ccRTPは、スレッドセーフと高パフォーマンスです。これは、データパケットの受信及び送信のためのパケットキューリストを使用します。両方のインターメディア、メディア内同期が自動的に着信および発信パケットキュー内で処理されます。 GNU ccRTPは、RTCPをサポートし、多くの他の標準との互換性と高度なストリーミングアプリケーションの両方に必要な拡張機能を提供します。
これは、ストリーム内の複数のペイロードタイプを混在させることができ、したがってRFC 2833に準拠したシグナリングアプリケーション、ならびに他の特殊なものをimplimentするために使用することができます。 GNU ccRTPは、直接RTPとRTCPパケットフィルタリングを提供しています。
GNU ccRTPは、IPV4 UDPソケットを有するだけでなく、異なるスレッドモデル、基礎となるトランスポートプロトコルとのリアルタイムストリーミングをimplimentするために使用することができるように、スレッド、ソケットに関連する依存関係を隔離するためにテンプレートを使用します。 ccRTP機能の詳細なリストについてはプログラマの取扱説明書を見てすることができます。
最高レベルでは、ccRTPはRTPセッションを介してデータのリアルタイム·トランスポートのクラスだけでなく、RTCPの制御機能を提供します。
RTPセッションのccRTP実装の主な考え方は、RTPデータパケット/アプリケーションデータユニットの送受信を処理するためのパケットキューを使用することです。 ccRTPでは、データブロックが送信(発信パケット)キューにそれを置くことによって送信され、受信(着信パケット)キューからそれを取得することにより、受信しました。
ccRTPのインターフェイス(パブリックインターフェイス、パブリックまたは保護された相続など)のいくつかのレベルがあります。例えば、ccRTPと一緒に配布rtphelloデモ·プログラムは、ちょうどRTPSessionクラスのパブリックインターフェイスを使用して、仮想メソッドonGotSRを再定義していない、したがって、このプログラムはSRレポートについて知っているどのような情報は、任意のソースからの最後の送信者レポートに搬送され、そのSyncSourceクラスのgetMRSenderInfoメソッドを介して取得することができます。
逆に、rtplistenデモプログラムは、継承によってonGotSR再定義し、これらのRTCPパケットの特殊な処理を行うことができます。一般的には、両方のデータおよび制御パケットは、ほとんどの外部インタフェースを介して直接アクセスすることはできません。
このすべての機能は、いくつかの本質的なクラスと型を介して実行されます。最も基本的なものは、列挙型StaticPayloadType、およびクラスStaticPayloadFormatとDynamicPayloadFormatです。
最も重要なものは、それぞれ、RTPデータパケットで搬送RTPセッション、同期ソース、参加RTPアプリケーションで、アプリケーション·データ·ユニットを表すクラスRTPSession、SyncSource、参加者とAppDataUnitあります。
ccRTPを使用する場合は、送信側とRTPセッションを介して転送されるデータの受信の両方がRTPスタックによって処理受信および送信キューを介して行われます。最も一般的なケースでは、各RTPセッションのための別々の実行スレッドは、キューを処理します。このケースでは、我々は一般的に、この文書を通して仮定しますスレッドモデルです。 ccRTPは特にccRTPがRTPセッションのセットを提供するために、単一の実行スレッドの使用をサポートし、他のスレッドモデルをサポートしていることに注意してください。これは、手動で任意の他のスレッドからの主なデータと制御サービスメソッドを呼び出し、任意のRTPセッションで任意の別のスレッドを関連付けないことも可能です。
ccRTPとパケット受信のための基本的な考え方は、アプリケーションが直接ソケットからパケットを読んでいないということですが、受信キューからそれらを取得します。スタックは、受信キューに受信したパケットを挿入し、このキューを処理する責任があります。一般的には、受信キュー内のパケット受信と挿入は、アプリケーションがそれをキューから取得し、同時に発生しません。
逆に、ccRTPのパケット伝送のための基本的な考え方は、パケットを直接ソケットに書き込むが、スタックによって処理送信キューに挿入されていないことです。それは必要ではないものの、一般的には、パケットの挿入と送信は、異なる時間に生じます。
ccRTPを使用するには、メインヘッダ(の#include
の#include
の#include
まだ成熟していないRTPの拡張のためのクラス。
また、現在ccrtp1、ライブラリにリンクする必要があります。
特徴:
この特殊なスタックに高い拡張性。
·ユニキャスト、マルチユニキャストとマルチキャストをサポートします。と宛先(同期ソースと貢献ソースを含む)複数のソースを処理します。また、対称RTPをサポートします。
例えば、同じ参加者またはNTP-RTPタイムスタンプのマッピングからの同期ソースの関連付けとして取り扱う自動RTCP機能、。
テンプレートを使用して基本的なネットワークおよびトランスポートプロトコルのためとして総称。
これは、スレッドセーフであると、ほぼすべてのスレッドモデルをサポートしています。
汎用的で拡張可能なRTPとRTCPヘッダ正当性をチェックします。
元の状態や情報だけでなく、統計記録を処理します。
自動的にSSRC衝突を処理し、ループ検出を行います。
タイマー再考し、逆再考を実装します。
MD5の/ dev / urandomのか、あるいはに基づく良好な乱数を、提供します。
この何このリリースで新しく追加されます。
コードのクリーンアップ、上流のDebianパッチのRTPの送信者情報、およびマージのためのバグ修正。
コメントが見つかりません