自分メモ:ubuntu 20.04LTSにffserverを導入して音声配信を実施した記録。on ThinkPad x200 with systemctl

初期設定

ThinkPad X200のubuntu 20.04LTSにffserverを導入し、音声配信サーバを構築しました。自分メモとして残します。

まずはubuntuの初期設定(ffserverの構築時には不要です)

# 必要ソフト導入
sudo apt install pm-utils lv nmap ssh net-tools vim

# コンソール表示を英語にしたい 
setting → region → 表示設定を変更

# 以下の設定では、gnome-terminalが起動しなくなる。
vi ~/.bashrc
export LANG=en_US

# 2023/02/24 ubuntu 20.04 LTS
# プロンプトを英語表示させる
vi ~/.bashrc
export LANG=ja_JP.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_TIME=en_US.UTF-8
export LC_MESSAGES=en_US.UTF-8

# 時刻がUTCになっている時は、以下のコマンドを実行
sudo timedatectl set-timezone Asia/Tokyo

1.ffserverを導入する

ffmgegの最新のリリースではffserverは付属していないので、以下のバージョンを導入しました。

Warning:ffserver has been removed on 2018-01-06. If you still need it checkout commit 2ca65fc or use the 3.4 release branch. 

http://blog.oscarliang.net/webcam-streaming-video-raspberry-pi-via-browser/

# git alsa driver install
sudo apt update
sudo apt install -y git libasound2-dev 

cd /usr/src
sudo wget https://ffmpeg.org/releases/ffmpeg-3.4.13.tar.gz
sudo tar -zxvf ffmpeg-3.4.13.tar.gz
cd ./ffmpeg-3.4.13/

sudo ./configure

ここで以下のエラーが出たので、optionの変更をする。
$ sudo ./configure
nasm/yasm not found or too old. Use --disable-x86asm for a crippled build.

If you think configure made a mistake, make sure you are using the latest
version from Git.  If the latest version fails, report the problem to the
ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.libera.chat.
Include the log file "ffbuild/config.log" produced by configure as this will help
solve the problem.


sudo ./configure --disable-x86asm
sudo make && sudo make install

2.生成されたファイルを確認(ffserver)

-rw-r--r--  1 USER USER       418 Nov  5  2022 CONTRIBUTING.md
-rw-r--r--  1 USER USER     18092 Apr 28  2020 COPYING.GPLv2
-rw-r--r--  1 USER USER     35147 Apr 28  2020 COPYING.GPLv3
-rw-r--r--  1 USER USER     26526 Apr 28  2020 COPYING.LGPLv2.1
-rw-r--r--  1 USER USER      7651 Apr 28  2020 COPYING.LGPLv3
-rw-r--r--  1 USER USER       277 Jun 12 18:32 CREDITS
-rw-r--r--  1 USER USER    143997 Jun 12 18:32 Changelog
-rw-r--r--  1 USER USER       595 Jun  5 01:50 INSTALL.md
-rw-r--r--  1 USER USER      4368 Jun  5 01:50 LICENSE.md
-rw-r--r--  1 USER USER     28985 Jun 12 18:31 MAINTAINERS
-rw-r--r--  1 USER USER      5250 Jun 12 18:31 Makefile
-rw-r--r--  1 USER USER      1893 Jun 12 18:31 README.md
-rw-r--r--  1 USER USER         7 Jun 12 18:32 RELEASE
-rw-r--r--  1 USER USER       838 Jun 12 18:31 RELEASE_NOTES
-rw-r--r--  1 USER USER         7 Jun 12 18:32 VERSION
drwxr-xr-x 13 USER USER      4096 Jun 12 18:31 compat
-rw-r--r--  1 root root     73350 Aug 25 21:58 config.h
-rwxr-xr-x  1 USER USER    236727 Jun 12 18:32 configure
drwxr-xr-x  4 USER USER      4096 Aug 25 22:22 doc
drwxr-xr-x  2 USER USER      4096 Aug 25 21:58 ffbuild
-rwxr-xr-x  1 root root  16684552 Aug 25 22:22 ffmpeg
-rwxr-xr-x  1 root root 107266696 Aug 25 22:22 ffmpeg_g
-rwxr-xr-x  1 root root  16602632 Aug 25 22:23 ffprobe
-rwxr-xr-x  1 root root 106859920 Aug 25 22:23 ffprobe_g
-rwxr-xr-x  1 root root  14386216 Aug 25 22:23 ffserver
-rwxr-xr-x  1 root root  95630248 Aug 25 22:23 ffserver_g
drwxr-xr-x  2 USER USER      4096 Aug 25 22:23 fftools
drwxr-xr-x 14 USER USER     77824 Aug 25 22:20 libavcodec
drwxr-xr-x  3 USER USER      4096 Aug 25 21:59 libavdevice
drwxr-xr-x  4 USER USER     36864 Aug 25 22:01 libavfilter
drwxr-xr-x  3 USER USER     36864 Aug 25 22:05 libavformat
drwxr-xr-x  6 USER USER      4096 Jun 12 18:31 libavresample
drwxr-xr-x 12 USER USER     12288 Aug 25 22:22 libavutil
drwxr-xr-x  2 USER USER      4096 Jun 12 18:31 libpostproc
drwxr-xr-x  6 USER USER      4096 Aug 25 22:21 libswresample
drwxr-xr-x  7 USER USER      4096 Aug 25 22:21 libswscale
drwxr-xr-x  2 USER USER      4096 Apr 28  2020 presets
drwxr-xr-x  7 USER USER      4096 Jun 12 18:31 tests

ffserver.conf ストリーミングの定義(/etc/defaultにコピーしました)

$ cat /etc/default/ffserver.conf | grep -v "#"

Port 8090

BindAddress 0.0.0.0
MaxHTTPConnections 2000
MaxClients 20
MaxBandwidth 500
CustomLog /var/log/ffserver.log
NoDaemon

<Feed feed1.ffm>
File /tmp/feed1.ffm
FileMaxSize 10000K
ACL allow 127.0.0.1
</Feed>

<Stream rpi2.mpg>
Feed feed1.ffm
Format mp2
AudioBitRate 32
AudioChannels 1
AudioSampleRate 22050
AudioCodec mp2
NoVideo
Preroll 30
</Stream>

<Stream rpi2.mp3>
Feed feed1.ffm
Format mp2
AudioCodec mp2
AudioBitRate 32
AudioChannels 1
AudioSampleRate 44100
PreRoll 500
NoVideo
</Stream>

<Stream rpi2.ra>
Feed feed1.ffm
Format mp2
AudioBitRate 32
NoVideo
PreRoll 5000
</Stream>

<Stream stat.html>
Format status

ACL allow localhost
ACL allow 192.168.0.0 192.168.255.255
</Stream>

<Redirect index.html>
 URL http://www.ffmpeg.org/
</Redirect>

3.動作を確認する

# ffserver
sudo /usr/local/bin/ffserver -f /etc/default/ffserver.conf &

# ffmpeg
sudo /usr/local/bin/ffmpeg -f alsa -ar 2000 -i "hw:0,0" -acodec mp2 -ab 8k -ac 1 http://127.0.0.1:8090/feed1.ffm

# VLCなどで以下のアドレスを開き、音声が聞けることを確認する



# ブラウザで以下のアドレスを開き、統計情報が表示できることを確認。


“hw:0,0″がPC標準のサウンドデバイスとなります

$ cat /proc/asound/pcm
00-00: ALC233 Analog : ALC233 Analog : playback 1 : capture 1
00-02: ALC233 Alt Analog : ALC233 Alt Analog : capture 1
00-03: HDMI 0 : HDMI 0 : playback 1
00-07: HDMI 1 : HDMI 1 : playback 1
00-08: HDMI 2 : HDMI 2 : playback 1

4a.ffserverをsystemctlへ登録し、OSの起動時に自動起動させる

sudo vi /etc/systemd/system/ffserver.service

# ----------------------------------------------------------------------
[Unit]
Description=Start ffserver for audio stream

[Service]
ExecStart=/usr/local/bin/ffserver -f /etc/default/ffserver.conf 
TimeoutStopSec=15

[Install]
WantedBy=multi-user.target
# ----------------------------------------------------------------------

# サービスを有効化し起動する
sudo systemctl enable ffserver
sudo systemctl start ffserver

# サービスの稼働状態の確認
sudo systemctl status ffserver

4b.ffmpegをsystemctlへ登録し、OSの起動時に自動起動させる

sudo vi /etc/systemd/system/ffmpeg.service

# ----------------------------------------------------------------------
[Unit]
Description=Start ffmpeg for audio stream
After=ffserver.service

[Service]
ExecStart=/usr/local/bin/ffmpeg -f alsa -ar 2000 -i "hw:0,0" -acodec mp2 -ab 8k -ac 1 http://127.0.0.1:8090/feed1.ffm
TimeoutStopSec=15

[Install]
WantedBy=multi-user.target
# ----------------------------------------------------------------------


# サービスを有効化し起動する
sudo systemctl enable ffmpeg
sudo systemctl start ffmpeg

# サービスの稼働状態の確認
sudo systemctl status ffmpeg

5.稼働状況確認URL(以下のような表示が出ればOK)

http://サーバのIPアドレス:8090/stat.html


systemctl コマンド群(@sinsengumi様の記事を引用しました)

操作コマンド
サービス起動systemctl start ${Unit}
サービス停止systemctl stop ${Unit}
サービス再起動systemctl restart ${Unit}
サービスリロードsystemctl reload ${Unit}
サービスステータス表示systemctl status ${Unit}
サービス自動起動有効systemctl enable ${Unit}
サービス自動起動無効systemctl disable ${Unit}
サービス自動起動設定確認systemctl is-enabled ${Unit}
サービス一覧systemctl list-unit-files –type=service
設定ファイルの再読込systemctl daemon-reload

参考にさせていただきました。有用な情報をありがとうございます。

systemctlこの記事は Linux コマンド 全部オレ Advent Calendar 2017 の8日目の記事です。NAME systemctl - Control the system…