[Twisted-Python] Media Resource Control Protocol (MRCP)

Rodrigo Senra rodsenra at gpr.com.br
Tue Sep 4 10:31:50 EDT 2007

[ Ivan Uemlianin ]:
|Dear All
|I am interested in writing an MRCP (Media Resource Control Protocol
|[1]) server. 

Great. I did that for a Brazilian company. It was not a full MRCP
server, just enough to cope with their TTS needs. But I will be glad
to give advice and help.

| In particular I want to write an MRCP speech recognition
|resource server as part of my trefnydd [2] project.

That is about the opposite of what I have explored (synthesis) ;o)

|  I am posting here to ask for advice about the network programming part.

My MRCP server followed [1], and was based on RTSP for session handling,
instead of SIP.

|I shall also be writing an MRCP client (if only to test the server).
|All the code will be GPL'd.

That is great. I hope I can contribute with that. The project we 
(me and João Chaves Jr) have worked on was proprietary software.
That was an imposition from the client, and a source of great frustration
for me. :o(

|As far as I understand it, an overview of the networking would go like
|An MRCP session between client and server is initiated using the
|Session Initiation Protocol (SIP).

The version I worked on, was based in RTSP not SIP.
From the spec:
  This protocol is designed to work with streaming
  protocols like RTSP (Real Time Streaming Protocol) 
  or SIP (Session Initiation Protocol)

So if you need a MRCP server that is SIP-based for doing ASR,
then I cannot help much since I have experience with a
RTSP-based for doing TTS ;o)
That does not mean I won't give advice if I have any worth giving! 

|Client and server negotiate using
|SIP messages containing SDP message bodies to define the participants
|and the resources required in the session.


|After session initiation, two channels are launched: a media channel 
| using RTP to carry binary audio (i.e., speech) data,

Right. I used a wrapper over JRTPLIB to handle RTP and RTCP. 

| and a control channel using TCP (control
|channel messages are text-based and in MRCP format).

Well, the RTSP-based verison used the same RTSP channel to
tunnel session initiation (pure RTSP) and media control
(MRCP payloads embedded in RTSP announce messages).
I do not know how this is handled with SIP.

|It seems to me that both client and server software would have to cope
|with SIP, SDP, RTP, MRCP (message format) and plain old TCP (for the
|SIP/SDP and MRCP control channel messages).

Sounds about right.

|Here are my questions:
|- Does anyone know of a FOSS project to write an MRCP server?
|preferably in python. I know of mrcp4j [3].

Not that I know of.

|- My first plan would be to make the MRCP client/server a subclass of
|an SIP client/server, as SIP is used to set up (and tear down) the
|session.  Does that sound sensible?

I used Twisted HTTP handling implementation as a starting point for
the RTSP implementation since both protocols are very much alike.

I wish you luck and success.

best regards,
Rod Senra

[1] http://tools.ietf.org/html/rfc4463

Rodrigo Dias Arruda Senra

More information about the Twisted-Python mailing list