2017-01-20 16 views
1

rtsp/h264/mjpegサーバを作成しました。それはうまくいく。しかし、今私はそれぞれの新しい接続クライアントのクエリを取得する必要があります。 RTSP://192.116.10.20:たとえば、私は、クライアントのクエリから要求された解像度を取得する必要がありますか?8554 /ストリームを幅= 1920 &高さ= 1280新しいクライアントごとにGStreamerとURIクエリパラメータを抽出する

私は、次のコードを使用してそれを行うにしようと試みています

.... 
gulong clientConnectedConfigureId = g_signal_connect(m_server, "client-connected", (GCallback)ClientConnected, this); 
.... 

static void ClientConnected(GstRTSPServer *gstrtspserver, GstRTSPClient *arg1, gpointer user_data) 
    { 
     GstRTSPConnection *connection = gst_rtsp_client_get_connection(arg1); 

     if(!connection) 
     { 
      return; 
     } 

     GstRTSPUrl *uri = gst_rtsp_connection_get_url(connection); 

     if(!uri) 
     { 
      return; 
     } 

     gchar *urlString = gst_rtsp_url_get_request_uri (uri); 

     std::stringstream ssTemp; 
     ssTemp << "ClientConnected - urlString = " << urlString; 
     InternalLog::Debug(ssTemp.str()); 

     g_free(urlString); 
    } 

GstRTSPUrlは、以下のメンバーが含まれます。 // RTSPを[U]:// [ユーザー:はpasswd @]ホスト[:ポート]/ABSPATH

クエリRTSPとVLCから接続した後、[クエリを?]:// 192.116.10.20:8554/stream?width=1920 &高さ= 1280結果は次のとおりです。

ClientConnected - urlString = RTSP://192.116.10.20:61099(ヌル)

GstRTSPUrlは= 192.116.10.20およびポート= 61099ホストだけが含まれています。 "abspath"や "query"のような他のフィールドはNULLに等しいです。

netstatユーティリティでは、ポート61099がVLCアプリケーションのクライアントポートであることがわかります。それはポート8554に接続されています。 "width = 1920 & height = 1280"と入力されたクライアントのrtspクエリはどのようにして受信できますか?

答えて

1

あなたはgst_rtsp_media_factory_set_shared(m_factory、TRUE)を使用している場合、私は解決策

... 
gulong clientConnectedConfigureId = g_signal_connect(m_server, "client-connected", (GCallback)ClientConnected, this); 
... 

static void ClientConnected(GstRTSPServer *gstrtspserver, GstRTSPClient *arg1, gpointer user_data) 
{ 
    gulong describeConfigureId = g_signal_connect(arg1, "describe-request", (GCallback)DescribeRequest, user_data); 

    //Do not forget about g_signal_handler_disconnect 
} 

void DescribeRequest(GstRTSPClient *gstrtspclient, GstRTSPContext *arg1, gpointer user_data) 
{ 
    gchar *urlString = gst_rtsp_url_get_request_uri(arg1->uri); 

    std::stringstream ssTemp; 
    ssTemp << "DescribeRequest - urlString = " << urlString; 
    InternalLog::Debug(ssTemp.str()); 

    g_free(urlString); 
} 

を発見しました。 メソッドdefault_gen_keyを再定義する必要があります。 URLは新しいメディアの作成の必要性を判断するキーとして使用されるため、次のコードを使用して行うことができます。

関連する問題