NetBSD上のmplayerで、audioデバイスとvideoデバイスを指定して表示させる

この記事は、NetBSD Advent Calendar 2025の14日目の記事です。

はじめに

mplayerで出力するオーディオデバイスを指定する方法は、pkgsrc/multimedia/mplayerをpulseaudioオプションを有効にして使っている私には有用です。 OSSしか使っていない場合にも、HDMIコネクターの内蔵されたマシンを利用している場合には、内蔵スピーカーとHDMI出力を切り替える必要があると思いますので、 有用かもしれません。

一方で、webcamの画像を画面に表示させるというのは、Video4Linux2サポートの確認をする以外には有用ではないかもしれません。 ですが、それ故に、デバイスを選択し、いろいろなモードを指定できることは重要かもしれません。

オーディオデバイスの初期設定

mplayerの設定の前に、私のマシンに特有かもしれませんが、初期設定をしておきます。 私のマシンは、以下のようにオーディオデバイスが認識されています。

hdaudio0 at pci3 dev 0 function 1: HD Audio Controller
hdaudio0: interrupting at msi1 vec 0
hdaudio0: HDA ver. 1.0, OSS 4, ISS 0, BSS 0, SDO 1, 64-bit
hdafg0 at hdaudio0: ATI R6xx HDMI
hdafg0: HDMI00 2ch: Digital Out [Jack]
hdafg0: HDMI01 2ch: Digital Out [Jack]
hdafg0: 2ch/0ch 32000Hz 44100Hz 48000Hz PCM16 AC3
audio0 at hdafg0: playback
audio0: slinear_le:16 2ch 48000Hz, blk 1920 bytes (10ms) for playback
spkr1 at audio0: PC Speaker (synthesized)
wsbell at spkr1 not configured
(snip)
hdaudio1 at pci3 dev 0 function 6: HD Audio Controller
hdaudio1: interrupting at msi4 vec 0
hdaudio1: HDA ver. 1.0, OSS 4, ISS 4, BSS 0, SDO 1, 64-bit
hdafg1 at hdaudio1: Realtek product 0245
hdafg1: DAC00 2ch: Speaker [Built-In]
hdafg1: DAC01 2ch: HP Out [Jack]
hdafg1: ADC02 2ch: Mic In [Jack]
hdafg1: 2ch/2ch 44100Hz 48000Hz 96000Hz 192000Hz PCM16 PCM20 PCM24
audio1 at hdafg1: playback, capture, full duplex, independent
audio1: slinear_le:16 2ch 48000Hz, blk 1920 bytes (10ms) for playback
audio1: slinear_le:16 2ch 48000Hz, blk 1920 bytes (10ms) for recording
spkr2 at audio1: PC Speaker (synthesized)
wsbell at spkr2 not configured

一方で、/dev以下は、このようになっています。 audio0はHDMI出力なので、このままでは内蔵スピーカーからは音を出すのが面倒です。 しかも、DRMKMSのサポートがないマシンなので、そもそもHDMI経由でオーディオ出力はできません。

$ ls -l /dev/audio* /dev/sound*
lrwxr-xr-x  1 root  wheel       11 May 11  2025 /dev/audio -> /dev/audio0
crw-rw-rw-  1 root  wheel  42, 128 May 10  2025 /dev/audio0
crw-rw-rw-  1 root  wheel  42, 129 May 10  2025 /dev/audio1
crw-rw-rw-  1 root  wheel  42, 130 May 10  2025 /dev/audio2
crw-rw-rw-  1 root  wheel  42, 131 May 10  2025 /dev/audio3
lrwxr-xr-x  1 root  wheel       14 May 11  2025 /dev/audioctl -> /dev/audioctl0
crw-rw-rw-  1 root  wheel  42, 192 May 10  2025 /dev/audioctl0
crw-rw-rw-  1 root  wheel  42, 193 May 10  2025 /dev/audioctl1
crw-rw-rw-  1 root  wheel  42, 194 May 10  2025 /dev/audioctl2
crw-rw-rw-  1 root  wheel  42, 195 May 10  2025 /dev/audioctl3
lrwxr-xr-x  1 root  wheel       11 May 11  2025 /dev/sound -> /dev/sound0
crw-rw-rw-  1 root  wheel  42,   0 May 10  2025 /dev/sound0
crw-rw-rw-  1 root  wheel  42,   1 May 10  2025 /dev/sound1
crw-rw-rw-  1 root  wheel  42,   2 May 10  2025 /dev/sound2
crw-rw-rw-  1 root  wheel  42,   3 May 10  2025 /dev/sound3

cd /dev ; ln -sf audio1 audio ; ln -sf audioctl1 audioctl ; ln -sf sound1 soundと 実行しても良いのですが、audiocfg default 1とすれば、同じことをしてくれます。 結果は、以下のようになりました。 これで/dev/audioを使って、内蔵スピーカーから音を出力できることができるようにします。

$ ls -l /dev/audio* /dev/sound*
lrwxr-xr-x  1 root  wheel       11 May 11  2025 /dev/audio -> /dev/audio1
crw-rw-rw-  1 root  wheel  42, 128 May 10  2025 /dev/audio0
crw-rw-rw-  1 root  wheel  42, 129 May 10  2025 /dev/audio1
crw-rw-rw-  1 root  wheel  42, 130 May 10  2025 /dev/audio2
crw-rw-rw-  1 root  wheel  42, 131 May 10  2025 /dev/audio3
lrwxr-xr-x  1 root  wheel       14 May 11  2025 /dev/audioctl -> /dev/audioctl1
crw-rw-rw-  1 root  wheel  42, 192 May 10  2025 /dev/audioctl0
crw-rw-rw-  1 root  wheel  42, 193 May 10  2025 /dev/audioctl1
crw-rw-rw-  1 root  wheel  42, 194 May 10  2025 /dev/audioctl2
crw-rw-rw-  1 root  wheel  42, 195 May 10  2025 /dev/audioctl3
lrwxr-xr-x  1 root  wheel       11 May 11  2025 /dev/sound -> /dev/sound1
crw-rw-rw-  1 root  wheel  42,   0 May 10  2025 /dev/sound0
crw-rw-rw-  1 root  wheel  42,   1 May 10  2025 /dev/sound1
crw-rw-rw-  1 root  wheel  42,   2 May 10  2025 /dev/sound2
crw-rw-rw-  1 root  wheel  42,   3 May 10  2025 /dev/sound3

オーディオデバイスを指定する

私はpkgsrc/multimedia/mplayerで、ossとSDL-1.2、PulseAudio経由でオーディオを再生できるようにしているので、それぞれを試してみます。 他にも設定できるパラメーターはあると思いますが…。

; OSSでデフォルトのオーディオデバイスで再生する場合
$ mplayer -ao oss ./test.mp4
; OSSで/dev/audio1で再生する場合
$ mplayer -ao oss:/dev/audio1 ./test.mp4
; PulseAudio経由で再生する場合
$ mplayer -ao pulse ./test.mp4
; SDL-1.2経由でPulseAudioで再生する場合
SDL_AUDIODRIVER=pulse mplayer -ao sdl ./test.mp4
; SDL-1.2経由でOSSの/dev/audioで再生する場合
SDL_AUDIODRIVER=dsp mplayer -ao sdl ./test.mp4
; SDL-1.2経由でOSSの/dev/audioで再生する場合
SDL_AUDIODRIVER=dsp mplayer -ao sdl ./test.mp4
; SDL-1.2経由でOSSの/dev/audio1で再生する場合
$ SDL_AUDIODRIVER=dsp AUDIODEV=/dev/audio1 mplayer -ao sdl ./test.mp4

webcamを開く

webcamにもいろいろ設定はあるはずですが、以下のようにすれば、Video4Linux2サポートの確認には良さそうです。

$ mplayer tv:// -tv driver=v4l2:device=/dev/video1:width=1280:height=720:outfmt=yv12 -fps 15

おわりに

とりあえず、これでwebcamやサウンドカードの動作確認をするのには十分そうです。 でも、今日時点のNetBSD/amd64-currentだと、オーディオ出力と入力の組み合わがおかしいような…。 ちゃんと調べた方が良いかもしれません。 勘違いだと良いのですが…。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。

NetBSD上のmplayerで、audioデバイスとvideoデバイスを指定して表示させる

この記事は、 NetBSD Advent Calendar 2025 の14日目の記事です。 はじめに mplayerで出力するオーディオデバイスを指定する方法は、pkgsrc/multimedia/mplayerをpulseaudioオプションを有効にして使...