Opusコーデック

2020年8月6日 (木) 10:42時点におけるTakatyan (トーク | 投稿記録)による版 (ページの作成:「== 概要 == OpusコーデックはAsteriskで利用可能な音声コーデックの1つ。技術的特徴は[https://ja.wikipedia.org/wiki/Opus_(音声圧縮) Wikipedi...」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)

目次

概要

OpusコーデックはAsteriskで利用可能な音声コーデックの1つ。技術的特徴はWikipediaの記事を参照のこと。

可変ビットレートであり、ビットレートに比して高音質で、低遅延とのことです。

注意事項

インストール前に、提供元のREADMEをお読みください。

使用状況の統計を24時間ごとにコミュニティサーバーに送信する旨が記載されています。

また、バイナリパッケージの提供であり、x86またはx86_64のみの提供であるため、Raspberry Pi等のARMプロセッサ環境に対してはインストールできません。

了解された上で、インストールを行ってください。

インストール

Asterisk 16

Asterisk 16では、ビルド時にmake menuconfigでインストールするかどうかを選択します。

インストールするを選択した場合、make install時にOpusコーデックのバイナリがダウンロードされ、インストールされます。

make menuconfig 

Codec Translators → 下の方「External」の更に下 → codec_opusを選択肢、Enterキーで*マークをつけ、Save & Exitし、makeします。

もし

XXX codec_opus

とXXXが表示されていて選択できない場合、何らかの依存ソフトウェアがインストールされていないためインストールできないようです。 codec_opusを選択した状態で、下の方の「Depends on」に記載されているソフトウェアをインストールします。

CentOS 8ではxmlstarletが不足していましたが、何故かdnfからインストールできなかったので、RPMパッケージを手動でインストールしました。

依存ソフトウェアをインストールしたら、./configureからやり直します。その場合make menuconfigで設定した内容は消去されるので、必要な場合設定内容を手元にメモしてから./configureをやり直し、再度make menuconfigを実行します。

make menuconfigが完了したら、makeでビルドを行います。続いて、sudo make installまたはrootユーザーでmake installを行います。Opusの追加のみの場合は、上書きインストールをしても問題は発生しませんでした。

設定

Asterisk設定ファイルのmodules.confに次の2行を追加します。

load = codec_opus.so
load = res_format_attr_opus.so

追加しなくても動く場合もあるようですが、他コーデックとの変換に失敗する場合は上記の追加で改善します。(他コーデックと変換については下記「CLIでの確認」も参照。)

続いて、pjsip.confのendpoint等でallow=opusと記載します。使用するクライアントでもOpusを使用する設定を行います。

CLIでの確認

Opusが使用可能かどうかは、Asterisk CLIで次のコマンドを実行するとわかります。

CLIコマンド:

core show codecs

結果(抜粋):

      29 audio opus         opus             (Opus Codec)

CLIコマンド(コーデック同士の変換にかかるミリ秒を表示):

core show translation

結果:

        Translation times between formats (in microseconds) for one second of data
         Source Format (Rows) Destination Format (Columns)

          ulaw   gsm slin8 slin12 slin16 slin24 slin32 slin44 slin48 slin96 slin192  g722 testlaw  opus
    ulaw     - 15000  9000  17000  17000  17000  17000  17000  17000  17000   17000 17250   15000 23000
     gsm 15000     -  9000  17000  17000  17000  17000  17000  17000  17000   17000 17250   15000 23000
   slin8  6000  6000     -   8000   8000   8000   8000   8000   8000   8000    8000  8250    6000 14000
  slin12 14500 14500  8500      -   8000   8000   8000   8000   8000   8000    8000 14000   14500 14000
  slin16 14500 14500  8500   8500      -   8000   8000   8000   8000   8000    8000  6000   14500 14000
  slin24 14500 14500  8500   8500   8500      -   8000   8000   8000   8000    8000 14500   14500 14000
  slin32 14500 14500  8500   8500   8500   8500      -   8000   8000   8000    8000 14500   14500 14000
  slin44 14500 14500  8500   8500   8500   8500   8500      -   8000   8000    8000 14500   14500 14000
  slin48 14500 14500  8500   8500   8500   8500   8500   8500      -   8000    8000 14500   14500  6000
  slin96 14500 14500  8500   8500   8500   8500   8500   8500   8500      -    8000 14500   14500 14500
 slin192 14500 14500  8500   8500   8500   8500   8500   8500   8500   8500       - 14500   14500 14500
    g722 15600 15600  9600  17500   9000  17000  17000  17000  17000  17000   17000     -   15600 23000
 testlaw 15000 15000  9000  17000  17000  17000  17000  17000  17000  17000   17000 17250       - 23000
    opus 23500 23500 17500  17500  17500  17500  17500  17500   9000  17000   17000 23500   23500     -

他コーデックとの変換については、Opusと変換する他方のコーデックのモジュールについてもmodules.confに記載する必要があるようで、必要な場合、上記のmodules.confへの追加例に倣って記載してください。

使ってみる

ulawではVoicemailmainで各音声の末尾が切れているような感じ(「メッセージ」の「ジ」が聞こえる前に次の音声に移ってしまう)でしたが、Opusにしたら改善しました。