初期設定
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 |
参考にさせていただきました。有用な情報をありがとうございます。