diff --git a/src/lynq/lib/liblynq-call/include/libcall/lynq_call.h b/src/lynq/lib/liblynq-call/include/libcall/lynq_call.h
index 8f6d0af..f1cf502 100755
--- a/src/lynq/lib/liblynq-call/include/libcall/lynq_call.h
+++ b/src/lynq/lib/liblynq-call/include/libcall/lynq_call.h
@@ -137,11 +137,13 @@
 /*set*/
 int lynq_set_voice_audio_mode(const LYNQ_Audio_Mode audio_mode); 
 int lynq_set_remote_rtp_ip(const char* ip, const int ip_length);
+int lynq_set_vlan_info(const char* vlan_info, const int vlan_info_length);
 int lynq_set_rtp_port(const LYNQ_Rtp_Mode rtp_mode, const int port);
 int lynq_set_rtp_param(const int clock_rate,const int channels,const int latency); //only for client
 /*get*/
 LYNQ_Audio_Mode lynq_get_voice_audio_mode();
 int lynq_get_remote_rtp_ip(char* ip, const int ip_length);
+int lynq_get_vlan_info(char* vlan_info, const int vlan_info_length);
 int lynq_get_rtp_port(const LYNQ_Rtp_Mode rtp_mode, int* port);
 int lynq_get_rtp_param(int* clock_rate,int* channels, int* latency);//only for client
 /*Audio Path setting end*/
diff --git a/src/lynq/lib/liblynq-call/lynq_call.cpp b/src/lynq/lib/liblynq-call/lynq_call.cpp
index c91bea3..6fa3bcf 100755
--- a/src/lynq/lib/liblynq-call/lynq_call.cpp
+++ b/src/lynq/lib/liblynq-call/lynq_call.cpp
@@ -28,8 +28,10 @@
 #define LYQN_SEDN_BUF 1024*8+sizeof(int)*3
 #define INVALID_ID (-1)
 #define RTP_FROM_CMD "gst-launch-1.0 -v udpsrc port=%d caps=\'application/x-rtp, media=(string)audio, clock-rate=(int)%d, channels=(int)%d\' ! rtpjitterbuffer latency=%d ! rtppcmadepay ! alawdec ! audioresample ! audioconvert ! alsasink device=\'hw:0,2\'"
-#define RTP_TO_CMD   "gst-launch-1.0 -v alsasrc device=\'hw:0,6\' ! audioconvert ! audioresample ! alawenc ! rtppcmapay ! udpsink host=%s auto-multicast=true port=%d"
+#define RTP_TO_CMD   "gst-launch-1.0 -v alsasrc device=\'hw:0,6\' ! audioconvert ! audioresample ! alawenc ! rtppcmapay ! udpsink host=%s %s auto-multicast=true port=%d"
+#define RTP_VLAN_INFO_FORMAT "multicast-iface=\"%s\""
 #define MAX_IP_LENGTH 128
+#define MAX_VLAN_INFO_LENGTH 128
 #define USER_LOG_TAG "LYNQ_CALL"
 
 using ::android::Parcel;
@@ -2077,6 +2079,7 @@
     }
     int* rtp_mode= (int*) arg;
     char cmd[384];
+	char vlan_para_string[sizeof(RTP_VLAN_INFO_FORMAT)+MAX_VLAN_INFO_LENGTH-2/*sizeof "%s"*/]={0};
     LYINFLOG("lynq_start_rtp_cmd: rtp_mode is %d",(*rtp_mode));    
     if ((*rtp_mode) == RTP_CLIENT)
     {
@@ -2088,8 +2091,12 @@
     }
     else if ((*rtp_mode) == RTP_SERVER)
     {
+        if(strlen(g_rtp_server_info.vlan_info)>0)
+        {
+           sprintf(vlan_para_string,RTP_VLAN_INFO_FORMAT,g_rtp_server_info.vlan_info);
+        }
         sprintf(cmd,RTP_TO_CMD,   \
-            g_rtp_server_info.ip,g_rtp_server_info.port);
+        g_rtp_server_info.ip,vlan_para_string,g_rtp_server_info.port); 
     //  LYINFLOG("start to rtp play: cmd is %s",cmd);
         system(cmd);    
     }
@@ -2198,6 +2205,28 @@
     
     return 0;
 }
+int lynq_set_vlan_info(const char* vlan_info, const int vlan_info_length)
+{
+    if (NULL == vlan_info)
+    {
+        LYERRLOG("vlan_info is NULL!!!");
+        return -1;
+    }
+    
+    if ((vlan_info_length < strlen(vlan_info)+1) || (vlan_info_length > MAX_VLAN_INFO_LENGTH))
+    {
+        LYERRLOG("incoming vlan_info error, vlan info length %d", vlan_info_length);
+        return -1;
+    }    
+
+    
+    bzero(g_rtp_server_info.vlan_info,MAX_VLAN_INFO_LENGTH);
+    strcpy(g_rtp_server_info.vlan_info,vlan_info);
+   
+    LYINFLOG("lynq_set_vlan_info suc: vlan is %s, length is %d", vlan_info,vlan_info_length);
+    
+    return 0;  
+}
 int lynq_set_rtp_port(const LYNQ_Rtp_Mode rtp_mode, const int port)
 {  
     if (port < 0)
@@ -2261,6 +2290,25 @@
     strcpy(ip,g_rtp_server_info.ip);
     return 0;
 }
+int lynq_get_vlan_info(char* vlan_info, const int vlan_info_length)
+{
+    if(vlan_info==NULL) 
+    {
+        LYERRLOG("vlan info is NULL");
+        return -1;
+    }
+
+    if(vlan_info_length < strlen(g_rtp_server_info.vlan_info)+1)
+    {
+        LYERRLOG("vlan info length %d is shorter than saved vlan info length %d",vlan_info_length,strlen(g_rtp_server_info.vlan_info)+1);
+        return -1;
+    }
+   
+    bzero(vlan_info,vlan_info_length);
+    strcpy(vlan_info,g_rtp_server_info.vlan_info);        
+   
+    return 0;  
+}
 int lynq_get_rtp_port(const LYNQ_Rtp_Mode rtp_mode, int* port)
 {
     if(g_lynq_call_init_flag == 0)
