--- /usr/local/src/orig/asterisk-1.4.33.1/channels/chan_sip.c 2010-06-01 22:57:49.000000000 +0800 +++ /usr/local/src/asterisk-1.4.33.1/channels/chan_sip.c 2010-07-28 16:58:21.000000000 +0800 @@ -6763,14 +6763,23 @@ if (debug) ast_verbose("Adding codec 0x%x (%s) to SDP\n", codec, ast_getformatname(codec)); - if ((rtp_code = ast_rtp_lookup_code(p->rtp, 1, codec)) == -1) + + struct ast_rtp* rtp = NULL; + + if (codec & AST_FORMAT_AUDIO_MASK) + rtp = p->rtp; + if (codec & AST_FORMAT_VIDEO_MASK) + rtp = p->vrtp; + + if(!rtp) return; - if (p->rtp) { - struct ast_codec_pref *pref = ast_rtp_codec_getpref(p->rtp); - fmt = ast_codec_pref_getsize(pref, codec); - } else /* I dont see how you couldn't have p->rtp, but good to check for and error out if not there like earlier code */ + if ((rtp_code = ast_rtp_lookup_code(rtp, 1, codec)) == -1) return; + + struct ast_codec_pref *pref = ast_rtp_codec_getpref(rtp); + fmt = ast_codec_pref_getsize(pref, codec); + ast_build_string(m_buf, m_size, " %d", rtp_code); ast_build_string(a_buf, a_size, "a=rtpmap:%d %s/%d\r\n", rtp_code, ast_rtp_lookup_mime_subtype(1, codec,