So-net無料ブログ作成

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 の画像に関しては、問題は発生していない。
・下記のような関係にあると思われる。
 xawtv -> saa7134_alsa モジュール -> alsa-lib


2. 対処方法


現時点では、根本的な解決方法は不明である。
また、取り敢えず、下記の手順により対応可能である。

(1) ~/bin/xawtv-patch の作成


下記の処理を行うスクリプトを作成する。

(a) xawtv の機能により、mute の状態を取得する。

% v4lctl show mute


(補足)
xawtv-remote に同じ引数(同じコマンド)を指定しても何も出力されない。


(b) xawtv の機能により、mute の状態を再設定する。

[mute されている場合]
% xawtv-remote volume mute off; xawtv-remote volume mute on

[mute されていない場合]
% xawtv-remote volume mute on; xawtv-remote volume mute off


(補足)
v4lctl に同じ引数(同じコマンド)を指定しても求める効果が得られない。


(2) cron への ~/bin/xawtv-patch を実行する設定の追加


(例)
20 分毎に ~/bin/xawtv-patch を実行する。


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 関連のパッケージのバージョンダウンによる対応


=> 結果: 上記の問題を解決できない。

 ・ノイズ発生までの時間が長くなるケースもあるが、ノイズはなくならない。
  (xawtv の起動後、約 120分後までにノイズが発生する。)

当該パッケージをバージョンダウンする。

(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


3-3. alsa-lib 関連のパッケージの再インストールによる対応


=> 結果: 上記の問題を解決できない。

 ・パッケージの再インストールにより、状況が一時的には改善される。
 ・運用していると上記の問題が再発する。
 ・overrun ではなく、underrun が発生することがある。

下記のパッケージを再インストールする。

・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



nice!(1)  コメント(0) 
共通テーマ:パソコン・インターネット

nice! 1

コメント 0

コメントを書く

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

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

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