Asterisk 13 FAX送信

Asterisk のFAX送信機能を使ってみます。

参考:http://www.asteriskdocs.org/en/3rd_Edition/asterisk-book-html-chunk/Fax_id290275.html

FAXを送受信するためにはspandspライブラリが必要になります。インストール手順はこちらの投稿を参考にしてください。

FAX送信はTIFF画像を送信します。ここでは送信したいTIFF画像があることを前提にAsteriskでFAX送信する方法をご紹介します。

FAX送信処理

FAX送信をするためには extensions.conf で以下の関数を呼ぶだけで行えます。

exten => send,1,SendFAX(/tmp/foo.tif,d)

これだけでは、送信する画像が固定なのでいろいろな画像を送信できるように処理を考えてみます。

[send-fax]
exten => send,1,NoOp(**** SENDING FAX ****)
 same => n,SendFAX(${FAXFILE},d)
 same => n,Hangup()
; Hangup.
exten => h,1,NoOp(Hangup send-fax)
 same => n,NoOp(${FAXSTATUS})
 same => n,NoOp(${FAXERROR})

送信するファイルを動的にセットするため、SendFAX関数のパラメータに FAXFILE という変数を指定しています。
では、次にこのファイル名を与えてFAX送信を実行させます。

コール ファイルでFAX送信実行

Asterisk にはコールファイルと呼ばれる構造化されたファイルを使うことで、自動でダイアル発信させる仕組みがあります。FAX送信を行うためこのコールファイルを利用します。

コールファイルの構文はこちらをご覧ください。

TIFF画像をFAX送信するためのコールファイルは以下の通りです。
/tmp/bar.tif 画像を 0311112222 へ送信する例です。

Channel: SIP/0311112222@account
Extension: send
Context: send-fax
Set: FAXFILE=/tmp/bar.tif

上記内容のコールファイルを /var/spool/asterisk/outgoing ディレクトリに配置すると、上記 extensions.conf の send-fax コンテキストの FAXFILE 変数に /tmp/bar.tif がセットされて send エクステンションの 実行されます。 つまり、/tmp/bar.tif 画像が 0311112222 へFAX送信されます。

※ 注意点は、/var/spool/asterisk/outgoing ディレクトリに直接コールファイルを作成せず、一時ディレクトリに作成した後、移動する必要があります。

複数の画像ファイルを順次FAXで送信するには、画像、送信先ごとににコールファイルを作成してスプールさせれば送信できます。電話回線のチャネル数制限がありますので、コールファイル数をうまく調整しないと送信エラーになる場合があります。

Asterisk 13 FAX受信

Asterisk のFAX受信機能を使ってみます。

参考:http://www.asteriskdocs.org/en/3rd_Edition/asterisk-book-html-chunk/Fax_id290275.html

Asterisk はFAXを受信してTIFF画像へ保存します。FAXを受信するためにはspandspライブラリが必要になります。

Spandspライブラリのインストール

spandsp をビルドするためには libtiff ライブラリが必要です。

# yum install libtiff libtiff-devel

続いて、spandsp のビルド

# wget https://www.soft-switch.org/downloads/spandsp/spandsp-0.0.6.tar.gz
# tar zxvf spandsp-0.0.6.tar.gz
# cd spandsp-0.0.6
# ./configure
# make
# make install
# cat >> /etc/ld.so.conf.d/usrlocallib.conf   ※ ここで Enter タイプして、次行に続く
/usr/local/lib
ここで CTRL+d をタイプして保存します。
# ldconfig

Asterisk を Spandspライブラリとリビルド

spandsp をインストール後、Asteriskをリビルドします。

# cd /usr/local/src/asterisk-13.13.1    ※ ダウンロードした Asterisk のビルドによります
# ./configure
# make menuselect     ※ make menuselect で res_fax_spandsp を選択
Resource Modules / [*] res_fax_spandsp 
[Save & Exit]
# make
# make install
# service asterisk restart

FAX受信処理

extensions.conf で受信したFAXを TIFF 画像で保存します。

[faxin]
exten => _03XXXXXXX,1,NoOp(Faxin-${EXTEN})
 same => n,Set(FAXOPT(ecm)=yes)
 same => n,Set(FAXOPT(maxrate)=14400)
 same => n,Set(FAXOPT(minrate)=2400)
 same => n,Set(FAXOPT(modem)=v17,v27,v29)
 same => n,Set(TIFF=${EXTEN}-${UNIQUEID}.tif)
 same => n,ReceiveFax(/tmp/${TIFF})
 same => n,Hangup()
; Hangup.
exten => h,1,NoOp(Hangup in-fax)
 same => n,NoOp(FAX Status: ${FAXSTATUS})
 same => n,NoOp(FAXOPT(ecm): ${FAXOPT(ecm)})
 same => n,NoOp(FAXOPT(filename): ${FAXOPT(filename)})
 same => n,NoOp(FAXOPT(headerinfo): ${FAXOPT(headerinfo)})
 same => n,NoOp(FAXOPT(localstationid): ${FAXOPT(localstationid)})
 same => n,NoOp(FAXOPT(maxrate): ${FAXOPT(maxrate)})
 same => n,NoOp(FAXOPT(minrate): ${FAXOPT(minrate)})
 same => n,NoOp(FAXOPT(pages): ${FAXOPT(pages)})
 same => n,NoOp(FAXOPT(rate): ${FAXOPT(rate)})
 same => n,NoOp(FAXOPT(remotestationid): ${FAXOPT(remotestationid)})
 same => n,NoOp(FAXOPT(resolution): ${FAXOPT(resolution)})
 same => n,NoOp(FAXOPT(status): ${FAXOPT(status)})
 same => n,NoOp(FAXOPT(statusstr): ${FAXOPT(statusstr)})
 same => n,NoOp(FAXOPT(error): ${FAXOPT(error)})

備忘録として、受信したTIFF画像をPHP AGIを使ってJPEGへ変換したりするには ImageMagick が便利です。

ImageMagick のインストール

# yum install yum install ImageMagick ImageMagick-devel
# yum install php-pecl-imagick

CentOS6 にMariaDB をインストール

CentOS 6.9/MySQL5.1 で動いているシステムを CentOS6.9/MariaDB 10.2 での動作検証を行うため、VMware 上でゲストOSとしてCentOS6.9 用意、MySQL はインストールせず、MariaDB をリポジトリでインストールします。

1. MariaDB のリポジトリ生成
こちらのサイトから「Downloads Setting up MariaDB Repositories」から以下の3ステップでリポジトリの内容が生成されます。

1. Choose a Distro
  => CentOS
2. Choose a Release
  -> CentOS 6 (x86_64)
3. Choose a Version
  -> 10.2 [Stable]

# MariaDB 10.2 CentOS repository list - created 2017-09-18 08:06 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

上記内容を /etc/yum.repos.d/MariaDB.repo というファイル名で保存します。

2. MariaDB のインストール
yum コマンドでインストール出来ます。

# yum install MariaDB-client MariaDB-server
# mysql -V
mysql Ver 15.1 Distrib 10.2.8-MariaDB, for Linux (x86_64) using readline 5.1

以上です。

Microsoft ファイル チェックサム整合性検証ユーティリティ

ファイルをダウンロードして使用する際にチェックサムをチェックする習慣をつけるべく Windows 7 でチェックサムの算出できるツールを入手しました。

MSIV ユーティリティのダウンロード(英語):
https://www.microsoft.com/en-us/download/confirmation.aspx?id=11533

MSIV ユーティリティの説明:
https://support.microsoft.com/ja-jp/kb/841290

PHP で複数ページのTIFFファイルをJPGに変換

ひとつのファイルに複数のページを格納したTIFFフォーマットの画像ファイルをそれぞれのページごとにJPGファイルとして保存する方法をPHPで実現します。

$path = "./src/foo.tif";
$dest = "./dst/";
$type = "jpg";

# ファイル名の取得
$extract = pathinfo($path);
$file = $extract['filename'];

# TIFF画像ファイルを読み込み
$images = new Imagick($path);

foreach($images as $i => $image) {
    $n = $i + 1;
    $image->writeImage("{$dest}{$file}_page{$n}.{$type}");
}
$images->clear(); 

例:

ソースファイル: foo.tif
出力ファイル: foo_page1.jpg  foo_page2.jpg foo_page3.jpg

以上です。