2017-05-18 2 views
0

現在、私は接続を確立するためにSDPメッセージを使ってアプリケーションを開発中です。私がしなければならないことは、SDPメッセージの文字列表現のためのパーサーを作成し、情報を表す何らかの種類の構造を作成し、既存の構造からそのようなメッセージを作成することです。 RFC 4566からJavaでSDPメッセージ文字列を解析する

例:

v=0 
    o=jdoe 2890844526 2890842807 IN IP4 10.47.16.5 
    s=SDP Seminar 
    i=A Seminar on the session description protocol 
    u=http://www.example.com/seminars/sdp.pdf 
    [email protected] (Jane Doe) 
    c=IN IP4 224.2.17.12/127 
    t=2873397496 2873404696 
    a=recvonly 
    m=audio 49170 RTP/AVP 0 
    m=video 51372 RTP/AVP 99 
    a=rtpmap:99 h263-1998/90000 

私の質問は:は、このようなメッセージを解析するためのJavaツールのいずれかのビルドはありますか?私はgithubについていくつかの例を見てきましたが、話題に慣れていないので、どのソリューションがそのような作業に最適かを判断することができません。

答えて

1

はい、JavaにはJain SIPというビルトインSIP機能がいくつかあります。メディアの部分では非常に弱いです(コーデックのサポートはありません)。ただし、シグナリング処理のためには、お客様のニーズを満たす必要があります。

例:

import javax.sdp.*; 
import javax.sip.*; 

ContentTypeHeader contentType = (ContentTypeHeader) msg.getHeader(ContentTypeHeader.NAME); 
ContentLengthHeader contentLen = (ContentLengthHeader) msg.getHeader(ContentLengthHeader.NAME); 

if (contentLen.getContentLength() > 0 && contentType.getContentSubType().equals("sdp")){ 
    String charset = null; 

    if (contentType != null) 
     charset = contentType.getParameter("charset"); 
    if (charset == null) 
     charset = "UTF-8"; // RFC 3261 

    //Save the SDP content in a String 
    byte[] rawContent = msg.getRawContent(); 
    String sdpContent = new String(rawContent, charset); 

    //Use the static method of SdpFactory to parse the content 
    SdpFactory sdpFactory = SdpFactory.getInstance(); 
    SessionDescription sessionDescription = sdpFactory.createSessionDescription(sdpContent); 
    Origin origin = sessionDescription.getOrigin(); 

    System.out.println("A Session ID is " + origin.getSessionId()); 
} else { 
    System.out.println("It is not a SDP content"); 
} 

あなたがこれを好きではない場合は、ちょうどそのようなjain sipjsdpとしてオープンソースのSDPパーサーを使用しています。

また、RFC 4566に準拠して手作業で行うこともできます。これは、SDP解析は非常に簡単で、少しの文字列操作で行うことができます。

+0

ありがとうございます。私が心配しているのは、良いメディアサポートが必要だということです。私はSIPを使用していないので、SDPだけが私に興味を持ち、あなたが言及しているライブラリには数年(かなり古い)があります。それが問題になると思いますか? –

+1

良いメディアサポートをお探しの場合は、[this java sip client](https://www.mizu-voip.com/Software/Softphones/JVoIP.aspx)をご覧ください。これはすぐに使用できるSIPクライアントですが、送受信されるメッセージ(SDPを含む)を操作することもできます。また、SDPへのアクセスがさらに必要な場合は、開発者に問い合わせることもできます。 –