Archive for category codecs

Fax For Asterisk 1.1.6 Release Announcement

T.38 fax for Asterisk

T.38 fax for Asterisk

Digium is pleased to announce the release of version 1.1.6 of its Fax For Asterisk product, a commercial grade FAX add-on module for open source Asterisk.

This release contains a number of significant improvements, including:

  • Support for 64-bit Linux installations.
  • Reduction in resource consumption, and increase in performance, of T.38 session handling.
  • Simplification of session handling during transition from G.711 to T.38 mode.
  • Adoption of the latest Asterisk T.38 negotiation API, ensuring interoperability with a wide range of T.38 endpoints.

Version 1.1.6 of Fax For Asterisk is available for immediate download at http://www.digium.com/en/docs/FAX/faa-download.php. Note that because this release uses the very latest T.38 negotiation mechanism in Asterisk, it is not compatible with all released versions of Asterisk. The Fax For Asterisk download selector lists the Asterisk versions supported by this release.

For more information about Fax For Asterisk, please visit the product page.

Thank you for your support!
Read the rest of this entry »

, , , , , ,

No Comments

State of FAX (primarily T.38) in Asterisk trunk (planning for 1.8 release)

Over the past year, some of us at Digium have spent many (MANY) hours working on FAX support in Asterisk (even though we’d all prefer to see FAX go away as the obsolete technology that it should be <G>). Some of this work was part of our release of our commercial FAX for Asterisk product, some of it was driven by our desires to have solid FAX support in our commercial PBX products, but most of it was driven by the need to get open source Asterisk (and its community of users) able to use FAX reliably with as many non-Asterisk endpoints as possible.

In Asterisk 1.4 and prior releases, there was limited support for FAX of any kind; Asterisk 1.4 can pass through T.38 sessions on SIP channels, but that’s all. With an open source addon (based on Steve Underwood’s excellent spandsp library), it can have dialplan applications to send and receive FAX over audio (G.711 TDM) links.
During the development of Asterisk 1.6.0, Steve’s FAX dialplan applications were merged into asterisk-addons, and then directly into the Asterisk source tree, where they became the ‘app_fax’ module. In addition, the T.38 negotiation process was redesigned to allow Asterisk applications to actually be T.38 endpoints; this resulted in the ability to send and receive FAX over audio *and* T.38 links.

Once this got into the community’s hands, we started seeing large numbers of bug reports because users could not successfully FAX over T.38 with various ATAs and service providers.  I won’t go into the gory details of why this was the case, except to repeat a recent quote from Steve himself on IRC: “The T.38 spec was written after a night of heavy drinking as a joke.”. While that’s not technically true, it is true that compliance with the T.38 recommendation, primarily in the SIP/SDP negotiations area, is very poor across the industry. Producing a T.38 endpoint that interoperates widely is a complex and difficult process, that can only be achieved through hours and hours (and hours) of testing.

As these problem reports got more severe, we took a significant step: we rewrote the T.38 negotiation mechanisms in Asterisk *again*. These changes first appeared in the 1.6.0.14 and 1.6.1.5 releases. The in-tree app_fax application was updated to support these changes along with them, so open source FAX users got the benefits of these changes immediately… and the result has been wonderful. We get very few T.38 negotiation-related bug reports now, and in nearly every case we can point to a misconfiguration or severely broken far endpoint that is the cause of the problem. For many, many people, FAX over T.38 in Asterisk 1.6.0 and 1.6.1 ‘just works’ now.

While all of this was going on, Digium was also working on our commercial Fax for Asterisk product, which provides comparable functionality to app_fax, but uses a commercial FAX stack. When we began the development of this product, we knew that we wanted as many portions of it as possible to end up open source, so rather than build it as a monolithic module, we built two modules: res_fax and res_fax_digium. res_fax is similar to app_fax, in that it provides dialplan applications, dialplan functions, and other associated components to send and receive FAX. However, it does not actually include any FAX stack; for that, it provides a plugin interface that allows one (or more) additional modules to be loaded to actually provide the FAX technology implementation. It *does* handle all T.38 negotiations, however, using the 3rd generation T.38 implementation in Asterisk.

Of course, res_fax_digium is Digium’s commercial plugin module for res_fax, and we have been delivering the combination of those two modules to our Fax For Asterisk customers for quite a few months now. (Unfortunately it has taken longer to get these modules updated to match Asterisk’s T.38 API than we would have liked, but that’s not important for open source users). Recently, with a final set of changes to the UDPTL stack in Asterisk, we’ve reached the point where we think we’ve implemented all the parts of the T.38 recommendation that we can implement, in as compatible and interoperable a way as we can, with a few configuration options that provide the ability to override broken behavior by far endpoints when necessary. In fact, the combination of the very most recent Asterisk open source releases and either app_fax or res_fax+res_fax_digium now successfully interoperates with quite a few T.38 ATAs we have in our lab and a couple of service providers, and we’re testing more of both as I write this. In nearly every case, this works *without* requiring any configuration changes in Asterisk or the FAX applications, which is good news for end users indeed. We’ve even extended (and fixed) the ‘faxdetect’ functionality in chan_sip so that it works as users expect it to, in a similar way to the faxdetect feature in chan_dahdi.

Now that this point has been reached, it’s time for us to act on our plan to open source res_fax; to that end, I’ve created a new branch in Subversion (/svn/asterisk/team/group/res_fax) based on Asterisk trunk, and merged the most recent version of res_fax into it, updating it to compile against trunk’s recent API changes. By the time Asterisk 1.8 is released, res_fax will *replace* app_fax, as it provides the identical dialplan applications (same names, options and operations), but has additional features and compatibility functionality. To achieve this, though, we’re going to need a res_fax_spandsp plugin module, so that the combination of res_fax + res_fax_spandsp provides the same functionality as app_fax did, and it will be a seamless transition for Asterisk 1.6.x FAX users to move to Asterisk 1.8 when they are ready. We’ve tasked one of our developers to start working on this over the next few weeks, and I’m sure you’ll see some initial steps toward that end shortly. For those of you who have contributed improvements to app_fax and use it heavily (or even those who just use it and can provide testing), I’d encourage you to post a comment in the thread on the asterisk-dev mailing list if you are interested and willing to assist in this effort.

Now, on to even more interesting stuff: as I’ve worked on this over the past 6-8 months, I’ve also spent time finally trying to understand how best to fit TDM-T.38 FAX relay into Asterisk. I know that there are number of community developers who have been working on this, and there are multiple patches in the issue tracker that provide this functionality in various forms. There was also an attempt by Daniel Ferenci to start a discussion on the asterisk-dev list about the best long-term approach for relay support, but he didn’t really get any responses.

Once res_fax and res_fax_spandsp are ready for users to use, it’ll be time for them to be extended to support FAX relay as well. I would like to propose that this be implemented by res_fax providing a new API, a ‘FAX relay session’, that a channel driver (one which services TDM channels) can use to offer T.38 support to the rest of Asterisk, as if it supported T.38 natively. We can start a separate discussion on the list to talk about particulars, but I believe this is the cleanest approach with the least impact on existing code in Asterisk, and I’d like to get opinions from other interested parties and discussion going.

In summary, it appears that Asterisk 1.6.x has achieved pretty solid FAX support (especially over T.38), and that with Asterisk 1.8 we’ll be able to improve it further and begin moving towards FAX relay support as well. For all of you who still insist on using this obsolete technology <G>, I hope this has provided what you need to be able to keep using Asterisk
in every place that it makes sense in your networks!

, , , ,

No Comments

Fax For Asterisk

T.38 fax for Asterisk

T.38 fax for Asterisk

Digium‘s Fax For Asterisk is a commercial facsimile (Fax) termination and origination solution designed to enhance the capabilities of Open Source and commercial Asterisk as well as Switchvox. Fax For Asterisk bundles a suite of user-friendly Asterisk applications and a licensed version of the industry’s leading fax modem software from Commetrex. Fax For Asterisk provides low speed (14400bps) PSTN faxing via DAHDI-compatible telephony boards as well as VoIP faxing to T.38-compatible SIP endpoints and service providers. Licensed on a per-channel basis, Digium‘s Fax For Asterisk provides a complete, cost-effective, commercial fax solution for Asterisk users.

Fax For Asterisk provides two components: res_fax and res_fax_digium. Res_fax is an Asterisk resource module that adds fax termination and origination functionality in Asterisk. It provides Asterisk dialplan functions and dialplan applications to enable the user to build highly-customizable fax solutions. Res_fax_digium provides core fax processing functionality in the form of several supported fax modems — V.21, V.27ter, V.29, and V.17 — to achieve speeds up to 14400bps.

Read the rest of this entry »

, , , , , , , , , , , , , ,

No Comments

Digium Releases TCE400B PCI-Express Transcoder Card

Digium TCE400B

Digium TCE400B

Digium releases the TCE400B PCI Express card for use with voice applications based on the open source Asterisk telephony platform. The new card provides hardware-based voice compression and decompression (codec) capabilities to shift transcoding from software to hardware. Using the TCE400B in place of a software-only solution places fewer demands on servers and frees up Asterisk to more efficiently process calls and to provide functionality for phone systems such as call recording, conference calling and interactive voice response.

The TCE400B is a half-length, low-profile PCI-Express x1 card for transforming complex VoIP codecs into simple codecs. This product is, essentially, a PCI-Express version of Digium’s existing TC400B product.

Read the rest of this entry »

, , , , , ,

No Comments

G.729 and G.723.1 codecs x86 and x86_64 Linux and FreeBSD binaries for Asterisk open source PBX

DISCLAIMER: You might have to pay royalty fees to the G.729/723.1 patent holders for using their algorithm.

Sources

To compile the codecs you need Intel IPP libraries installed. Currently only Asterisk 1.4, 1.6 and TRUNK are supported. Support for Asterisk 1.2 and Callweaver is planned, for now use the binaries. Use “g723 debug” and “g729 debug” commands to print statistics about received frame sizes, can aid in debugging audio problems. You need to bump Asterisk verbosity level to 3 to see the numbers.

Binaries

  • choose codec binary appropriate for your Asterisk version and CPU type, use x86_64 for 64-bit mode, scroll to the end of the list for FreeBSD binaries
  • delete old codec_g729/723*.so files (if any) from /usr/lib/asterisk/modules directory
  • copy new codec_g729/723*.so files into /usr/lib/asterisk/modules directory
  • restart Asterisk
  • check the codec is loaded with ‘core show translation recalc 10′ on Asterisk console (‘show translation’ in Asterisk 1.2)
  • G.723.1 send rate is configured in Asterisk codecs.conf file (Linux Asterisk 1.2, 1.4, 1.6, TRUNK and Callweaver, FreeBSD 7.x Asterisk 1.4 binaries only):
    [g723]
    ; 6.3Kbps stream, default
    sendrate=63
    ; 5.3Kbps
    ;sendrate=53

    This option is for outgoing voice stream only. It does not affect incoming stream that should be decoded automatically whatever the bitrate is.

  • in sip.conf or/and iax.conf configure the codec(s) either globally or under respective peer, for example:
    disallow=all
    allow=g729
  • for detailed information about Asterisk configuration visit voip-info.org
  • in case of problems read Notes and Troubleshooting

Read the rest of this entry »

, ,

No Comments

Digium TC400B

Digium TC400B

Digium TC400B

The TC400B is a half-length, low-profile PCI 2.2-compliant card for transforming complex VoIP codecs into simple codecs.

Overview:

The TC400B is a bundle of the half-length, low-profile PCI-2.2 compliant TC400P base card and the TC400M voice processing module. The TC400B is designed to handle, in dedicated DSP resources, the complex codec translations for highly compressed audio as would otherwise be processed by Asterisk in software.

Asterisk, in software and with Digium G.729a licensing, is capable of transforming the G.729a codec into other codecs for the purposes of call origination or termination, bridging disparate calls, or VoIP to TDM connectivity. These transformations in software are very expensive, in terms of MIPS, and require a substantial amount of CPU time to accomplish. The TC400B not only relieves the CPU of this duty, freeing it up to handle other tasks or to complete additional call processing; but also provides Asterisk with the capability of bridging G.723.1 compressed audio into other formats, a capability not previously possible.

The TC400B decompresses G.729a (8.0kbit) or G.723.1 (5.3kbit) into u-law or a-law; or, compresses u-law or a-law into G.729a (8.0kbit) or G.723.1 (5.3kbit). The TC400B is rated to handle up to 120 bi-directional G.729a transformations or 92 bi-directional G.723.1 transformations. The TC400B does not require additional licensing fees for the use of these codecs nor does it require the registration process associated with Digium’s software-based G.729a codec licensing.

TC400B Documentation:

Manuals
01.26.2007 – TC400B User’s Manual (PDF)

Datasheets & Brochures
07.01.2008 - TC400B Datasheet (PDF)

Agreements & Policies
08.02.2007 – Digium End-User Purchase and License Agreement (HTML)

See articles for this product in our Knowledge Base  >>

, , , , ,

No Comments