[mythtv] MythPhone and Asterisk

Paul Volkaerts paul.volkaerts at lineone.net
Thu Aug 11 18:07:53 UTC 2005


This looks wrong. The problem as I understand it is that Asterisk needs the
DTMF packet without a Final-Event marker set and because I only send the
event once, I set the Final-Event marker.  (So actually this is an Asterisk
bug not a MythPhone bug, if I was being picky!).  You are just clearing the
Final-Event marker and then sending several times, but the final time does
not have the marker set either (as far as I can tell).

Let me quickly check in a simple, alternative fix.

Paul



> -----Original Message-----
> From: mythtv-dev-bounces at mythtv.org
> [mailto:mythtv-dev-bounces at mythtv.org]On Behalf Of Christophe Guerin
> Sent: 11 August 2005 15:28
> To: Development of mythtv
> Subject: [mythtv] MythPhone and Asterisk
>
>
> This patch enable MythPhone to send DTMFs to Asterisk.
> (www.asterisk.org)
> Consider this patch suitably disclaimed, and without any warranty
> whatsoever.
>
> ----The beginning of the patch------
>
> --- rtp.cpp.orig        2005-08-11 15:50:31.000000000 +0200
> +++ rtp.cpp             2005-08-11 16:14:02.000000000 +0200
> @@ -1448,22 +1448,25 @@
>
>          if (digit != ' ')
>          {
> -            //cout << "Sending DTMF digit " << digit << endl;
> -            RTPPACKET dtmfPacket;
> -            DTMF_RFC2833 *dtmf = (DTMF_RFC2833 *)(dtmfPacket.RtpData);
> +            for (int i=0;i<3;i++)
> +           {
> +               //cout << "Sending DTMF digit " << digit << endl;
> +               RTPPACKET dtmfPacket;
> +               DTMF_RFC2833 *dtmf = (DTMF_RFC2833
> *)(dtmfPacket.RtpData);
>
> -            dtmf->dtmfDigit = CHAR2DTMF(digit);
> -            dtmf->dtmfERVolume = 0x0A; // 0x0A | RTP_DTMF_EBIT; //
> Volume=10; E-bit set indicating end of event
> -            dtmf->dtmfDuration = htons(0x0500); // Duration = 16ms
> -
> -            txSequenceNumber += 1; // Increment seq-num; don't
> increment timestamp
> -            dtmfPacket.RtpVPXCC = 128;
> -            dtmfPacket.RtpMPT = dtmfPayload |
> RTP_PAYLOAD_MARKER_BIT; // Set for 1st tx of a digit, clear for
> retransmissions
> -            dtmfPacket.RtpSequenceNumber = htons(txSequenceNumber);
> -            dtmfPacket.RtpTimeStamp = htonl(txTimeStamp);
> -            dtmfPacket.RtpSourceID = 0x666;
> +               dtmf->dtmfDigit = CHAR2DTMF(digit);
> +               dtmf->dtmfERVolume = 0x0A; // 0x0A | RTP_DTMF_EBIT; //
> Volume=10; E-bit set indicating end of event
> +               dtmf->dtmfDuration = htons(0x0500); // Duration = 16ms
> +
> +               txSequenceNumber += 1; // Increment seq-num; don't
> increment timestamp
> +               dtmfPacket.RtpVPXCC = 128;
> +               dtmfPacket.RtpMPT = dtmfPayload |
> RTP_PAYLOAD_MARKER_BIT; // Set for 1st tx of a digit, clear for
> retransmissions
> +               dtmfPacket.RtpSequenceNumber = htons(txSequenceNumber);
> +               dtmfPacket.RtpTimeStamp = htonl(txTimeStamp);
> +               dtmfPacket.RtpSourceID = 0x666;
>
> -            rtpSocket->writeBlock((char *)&dtmfPacket.RtpVPXCC,
> RTP_HEADER_SIZE+sizeof(DTMF_RFC2833), yourIP, yourPort);
> +               rtpSocket->writeBlock((char *)&dtmfPacket.RtpVPXCC,
> RTP_HEADER_SIZE+sizeof(DTMF_RFC2833), yourIP, yourPort);
> +           }
>          }
>      }
>  }
>
>
> ---- the end of the patch ----
>
> P.S. : I sent it there, because the developper doesn't seems to change
> the source.
>
>




More information about the mythtv-dev mailing list