CentOS 7上のxawtvでノイズが発生することへの対応 [Linux]
・xawtv-3.105-2.el7.x86_64
・alsa-lib-1.1.6-2.el7.x86_64
・alsa-plugins-pulseaudio-1.1.6-1.el7.x86_64
・alsa-utils-1.1.6-1.el7.x86_64
・pulseaudio-10.0-5.el7.x86_64
・kernel-3.10.0-957.10.1.el7.x86_64
(saa7134 モジュール、saa7134_alsa モジュールを使用)
1. 発生事象
xawtv の音声にノイズが発生する。
・起動直後にはノイズは発生しない。
・しばらく使用しているとノイズが発生する。
(30〜60 分程度の連続使用で、音がこもる/割れる。)
・xawtv を再起動すると改善される。
・xawtv の機能により、ミュートの設定/解除を行うと改善される。
・改善された後も、しばらく使用していると再発する。
・ノイズが発生する場合には、下記のようなメッセージが出力される。
ALSA lib pcm.c:8424:(snd_pcm_recover) overrun occurred
(ただし、当該メッセージが出力されてもノイズが発生するとは限らない。)
(補足)
・/dev/mixer の存在しない状態で使用している。
・xawtv の画像に関しては、問題は発生していない。
2. 対処方法
現時点では、根本的な解決方法は不明である。
また、取り敢えず、下記の手順により対応可能である。
(1) ~/bin/xawtv-patch の作成
下記の処理を行うスクリプトを作成する。
(a) xawtv の機能により、mute の状態を取得する。
v4lctl show mute
(注意)
xawtv-remote に同じ引数(同じコマンド)を指定しても何も出力されない。
(b) mute されていない場合、xawtv の機能により mute/unmute を実施する。
xawtv-remote volume mute on sleep 0.1 xawtv-remote volume mute off
・mute の実施により、一時的に音声出力が途切れる。
・mute と unmute の間に sleep を入れた方が、より効果が得られる。
(注意)
v4lctl に同じ引数(同じコマンド)を指定しても求める効果が得られない。
(2) cron への ~/bin/xawtv-patch を実行する設定の追加
・例えば、20 分毎に ~/bin/xawtv-patch を実行する。
・再発した場合には、手動で mute の設定/解除を実施することで対応する。
3. 備考
下記の対応を試したが、いずれの方法でも上記の問題を解決できなかった。
3-1. バッファ・サイズの縮小による対応
underrun の発生をバッファ・サイズの変更で改善できたとの情報がある。
(https://bbs.archlinux.org/viewtopic.php?id=185736)
このため、overrun の発生も改善できる可能性があると思い試してみた。
・バッファ・サイズの拡大では underrun が発生する。
・よって、バッファ・サイズの縮小を実施する。
バッファのサイズを縮小する手順は、下記の通りである。
(1) /etc/pulse/default.pa の編集
タイマーベースのスケジューリングを無効化する。
# diff default.pa default.pa.sav 45,46c45 < ## disable tsched to suppress overrun when xawtv is running < load-module module-udev-detect tsched=0 --- > load-module module-udev-detect
(2) /etc/pulse/daemon.conf の編集
バッファ・サイズを縮小する。
;; suppress overrun when xawtv is running ;; default-fragments = 2 default-fragment-size-msec = 5
・tsched が有効な場合、下記の設定は無視される。
default-fragments, default-fragment-size-msec
・バッファ・サイズに関するデフォルト値は、下記の通りである。
default-fragments = 4, default-fragment-size-msec = 25
・下記の設定でも結果は同様である。
default-fragments = 2, default-fragment-size-msec = 25
default-fragments = 2, default-fragment-size-msec = 10
default-fragments = 5, default-fragment-size-msec = 2
default-fragments = 4, default-fragment-size-msec = 12
【結果】
ノイズはなくならない。
3-2. alsa-lib 関連のパッケージのバージョンダウンによる対応
下記のパッケージにバージョンダウンする。
(1) CentOS 7.5 のパッケージ
alsa-lib-1.1.4.1-2.el7.x86_64
alsa-plugins-pulseaudio-1.1.1-1.el7.x86_64
alsa-utils-1.1.3-2.el7.x86_64
(2) CentOS 7.4 のパッケージ
alsa-lib-1.1.3-3.el7.x86_64.rpm
alsa-plugins-pulseaudio-1.1.1-1.el7.x86_64.rpm
alsa-utils-1.1.3-2.el7.x86_64.rpm
(3) CentOS 7.3 のパッケージ
alsa-lib-1.1.1-1.el7.x86_64.rpm
alsa-plugins-pulseaudio-1.1.1-1.el7.x86_64.rpm
alsa-utils-1.1.1-1.el7.x86_64.rpm
(4) CentOS 7.2 のパッケージ
alsa-lib-1.0.28-2.el7.x86_64.rpm
alsa-plugins-pulseaudio-1.0.27-3.el7.x86_64.rpm
alsa-utils-1.0.28-4.el7.x86_64.rpm
(5) Fedora 21 のパッケージ
alsa-utils-1.0.28-2.fc21.x86_64
alsa-plugins-pulseaudio-1.0.28-3.fc21.x86_64
alsa-lib-1.0.28-2.fc21.x86_64
【結果】
ノイズ発生までの時間が長くなるケースもあるが、ノイズはなくならない。
(xawtv の起動後、約 120分後までにノイズが発生する。)
3-3. alsa-lib 関連のパッケージの再インストールによる対応
下記のパッケージを再インストールする。
・alsa-lib-1.1.6-2.el7.x86_64
・alsa-plugins-pulseaudio-1.1.6-1.el7.x86_64
・alsa-utils-1.1.6-1.el7.x86_64
【結果】
一時的に状況が改善されるが、運用していると上記の問題が再発する。
また、overrun ではなく、underrun が発生することがある。
コメント 0