Sarah wrote:
Sadly, right now, it's the only way to do V.34 (or even V.90) in software. The free implementations like linmodem, spandsp, etc. all have some parts of the code, but they don't work in pratice / are missing pieces.
libspandsp can do 14400 baud under ideal conditions, but it was basically only tested against fax modems (as it's mostly used for fax). In my testing, I was only able to establish a data call in a single direction (iirc inbound) and with an Acer V.90 modem. Both of my softphones failed to connect, as did my 14400 hardware modem.
Christoph wrote:
For V.21 speeds, spandsp works fine.
My idea is to _start_ with V.21 in my bring-up journey, and then go up from there. Assuming that V.21 300 baud works, try V.22 1200 bps next, and then V.22bis 2400 bps. And if the latter also works, then start playing with modulations that are supported by V.32bis module in spandsp, beginning with 4800 bps. The overall idea is to see how high I can climb before the rig stops working.
Also please note the test setup I intend to use: my plan is to speak SIP+RTP (PCMU of course, no compressed codecs) to my SIP trunk interconnection point (bulkvs.com), either sending a call to or receiving a call from a POTS line (public phone number) on real USA PSTN. I *hope* that I can at least get 300 baud to work this way, to prove the most basic concept, but when I reach the speed at which this setup breaks, whatever bps number and modulation standard it will be, I won't have an easy way of knowing if it breaks because spandsp isn't quite there, or because VoIP-land parties who stand between me and legacy TDM PSTN are rearing an ugly head.
When I make or receive calls to or from PSTN phone numbers via BulkVS, here is what I see so far:
* On incoming calls, the SIP INVITE I get lists PCMU, PCMA and G729 in this order of preference; I then select PCMU in my SDP answer.
* On outbound calls, I send SIP INVITE offering only PCMU and PCMA in this order of preference (no compressed codecs), and BulkVS's SBC selects PCMU in its SDP answer.
* With PCMU selected by either of the above two paths, the RTP stream I receive has no dropouts, I get an RTP packet every 20 ms without fail, and the largest jitter I get is usually on the order of 1 ms.
* The very first RTP packet I receive has both sequence number and timestamp equal to 0 (not randomized), M bit set; all subsequent RTP packets have M bit clear, while sequence and timestamp increment in perfect cadence. Thus the incoming RTP stream truly look pristine.
But what I don't know is whether this pristine RTP stream I receive from BulkVS (or the bigger VoIP carrier just behind them) is the genuine truth or only an illusion. It would be most awesome if there is only one TDM-to-RTP conversion point somewhere, if the RTP stream I receive comes directly from that from-TDM converter, and if the TDM path between that conversion point and the 5ESS switch serving my home POTS line is pure and unbroken. But what if the pristine-looking RTP stream I receive is only an illusion? What if there are some compressed codecs, packet loss concealment, elastic jitter buffers or other badness deployed somewhere along the path invisibly to me, and the carrier VoIP switch closest to me merely reconstructs a pristine- looking PCMU RTP stream to "make the customer happy"?
At some point I will need to build a test setup that will allow me to exercise spandsp (or other candidate soft modem implementations) in a 100% controlled environment, without uncertainties of commercial VoIP-to-PSTN carrier environment muddying the waters. But that path will require acquiring a piece of hardware which I currently don't know where to look for: a real telco-grade channel bank or SLC (subscriber loop carrier) terminal, going from a T1 carrier to POTS FXS lines. A typical consumer-grade ATA, or even a "high-end" one, won't be good enough: if it converts POTS to SIP, it is too high-level and has too many unwanted smarts. Instead I want a traditional telco- style channel bank that turns POTS lines into a T1 carrier, then hook up that carrier to an icE1usb (I hope the latter can do T1 too, not just E1) with GPS timing, and have my own software be responsible for dialtone generation, DTMF decoding etc. But I don't know where to look for the necessary hardware...
M~