SSブログ

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 が発生することがある。



nice!(1)  コメント(0) 

nice! 1

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。