raspberry pi2初期導入記録+FFmpegによる音声ストリーミングサーバ

Raspberry Pi2にFFmpegを導入し、音声のストリーミングサーバを構築した際の記録です。

apt-get -y install nmap vim telnetd telnet

useradd USER

default editorをvimに変更
update-alternatives --set editor /usr/bin/vim.tiny

visudo

vi /etc/network/interfaces

iface eth0 inet static
 address 192.168.21.100
 netmask 255.255.255.0
 gateway 192.168.21.1

iface eth0 inet static
address 10.0.0.233
netmask 255.255.255.0
gateway 10.0.0.251

startup script(rc.local/autoexec.bat)

2015/05/26 ---------------------------------------------
startup script(rc.local/autoexec.bat)

touch /etc/init.d/local
chmod 700 /etc/init.d/local
update-rc.d local start 99 2 3 4 5 .

cat /etc/init.d/local

# Add secondary IP Address 2015/05/25
/sbin/ifconfig eth0:0 192.168.21.200 netmask 255.255.255.0 broadcast 192.168.21.255
/sbin/ifconfig eth0:1 10.0.0.200 netmask 255.255.255.0 broadcast 10.0.0.255
#/sbin/ifconfig eth0:2 192.168.11.200 netmask 255.255.255.0 broadcast 192.168.11.255

# Start ffserver 2015/05/25
/usr/local/bin/ffserver -f /home/USER/ffserver.conf &

# -ar 8000 引数にて、endcode が ffmpeg の bufferを超えないようにする。
#ffmpeg -ac 1 -f alsa -ar 8000 -i "hw:0,0" -acodec mp2 -ab 32k -ac 1 http://127.0.0.1:8090/feed1.ffm >/dev/null 2>/var/log/ffmpeg.log &

/usr/bin/amixer sset Mic 0

date > /home/USER/startup.date.log

xrpd

apt-get install xrdp

RTX1100
nat descriptor masquerade static 1000 36 192.168.21.100 tcp 28090=8090,21000=10000,3389

SRT100
ip filter 1 pass-log * * tcp,udp * 22,telnet,514,3389,5900,8090,10000
ip filter 2 pass-log * * tcp,udp 22,telnet,514,3389,5900,8090,10000 *

chrome 導入
su -pi

sudo apt-get install chromium chromium-l10n
sudo apt-get install gnash browser-plugin-gnash

FFmpeg 導入(音声ストリーミング)

ストリームURL http://サーバIP:8090/rpi2.ra

配信状況確認 http://サーバIP:8090/stat.html

2015/05/19 FFmpeg 導入 ---------------------------------------



apt-get install -y libasound2-dev 

cd /usr/src
git clone git://source.ffmpeg.org/ffmpeg.git

./configure
sudo make && make install

1.Add the following lines into /etc/apt/sources.list
 deb-src http://www.deb-multimedia.org sid main
 deb http://www.deb-multimedia.org wheezy main non-free

 sudo apt-get update
 sudo apt-get install -y deb-multimedia-keyring

2.Remove or comment the second line from /etc/apt/sources.list

 #deb http://www.deb-multimedia.org wheezy main non-free

 apt-get source ffmpeg-dmo

 cd ffmpeg-dmo-2.6.3
 ./configure
 sudo make && make install

ffmpeg-dmo-2.6.3にて運用中

# 2015/05/29 ForeGourndで動作
ffmpeg -ac 1 -f alsa -ar 8000 -i "hw:0,0" -acodec mp2 -ab 32k -ac 1 http://127.0.0.1:8090/feed1.ffm 

ffmpeg -ac 1 -f alsa -ar 8000 -i "hw:0,0" -acodec pcm_s16le -ab 32k -ac 1 http://127.0.0.1:8090/feed1.ffm >/dev/null 2>/var/log/ffmpeg.log &

# 2015/05/26 バックグラウンドで動作OK(ログあり)
ffserver -f ./ffserver.conf &
ffmpeg -ac 1 -f alsa -ar 8000 -i "hw:0,0" -acodec mp2 -ab 32k -ac 1 http://127.0.0.1:8090/feed1.ffm >/dev/null 2>/var/log/ffmpeg.log &

ffmpeg -ac 1 -f alsa -ar 8000 -i "hw:0,0" -acodec mp2 -ab 32k -ac 1 http://127.0.0.1:8090/feed1.ffm >/dev/null 2>/var/log/ffmpeg.log &

# ログなし
ffserver -f ./ffserver.conf &
ffmpeg -ac 1 -f alsa -ar 7000 -i "hw:0,0" -acodec mp2 -ab 32k -ac 1 http://127.0.0.1:8090/feed1.ffm >/dev/null 2>&1 &

0.ffserver_ffmpeg.start_by_screen.sh

ffmpeg 起動スクリプト

0.ffserver_ffmpeg.start_by_screen.sh

USER@rpi2 ~/ffserver $ cat 0.ffserver_ffmpeg.start_by_screen.sh
#!/bin/sh
#/usr/bin/screen -O -S screens -c ~/.screenrc-startscreens
/usr/bin/screen -O -S FFserver -c /home/USER/ffserver/ffserver_screenrc




USER@rpi2 ~/ffserver $ cat ffserver_screenrc

USER@rpi2 ~/ffserver $ cat ffserver_screenrc
startup_message off
chdir
autodetach on
hardstatus alwayslastline
hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{=kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B}%Y-%m-%d %{W}%c %{g}]'

#screen -t shell0 0
#screen -t shell0 0
#screen -t tail 1 tail /var/log/syslog
#screen -t uname 2 uname -aa

screen -t FFserver 1 /home/USER/ffserver/1.start-ffserver.sh
screen -t FFmpeg 2 /home/USER/ffserver/2.start-ffmpeg.sh

USER@rpi2 ~/ffserver $ cat /home/USER/ffserver/1.start-ffserver.sh

USER@rpi2 ~/ffserver $ cat /home/USER/ffserver/1.start-ffserver.sh
#!/bin/sh

/usr/local/bin/ffserver -f /home/USER/ffserver/ffserver.conf >> /var/log/FFserver_streaming.log

USER@rpi2 ~/ffserver $ cat /home/USER/ffserver/2.start-ffmpeg.sh

USER@rpi2 ~/ffserver $ cat /home/USER/ffserver/2.start-ffmpeg.sh
#!/bin/sh

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

USER@rpi2 ~/ffserver $ cat /home/USER/ffserver/ffserver.conf

USER@rpi2 ~/ffserver $ cat /home/USER/ffserver/ffserver.conf
# Port on which the server is listening. You must select a different
# port from your standard HTTP web server if it is running on the same
# computer.
Port 8090

# Address on which the server is bound. Only useful if you have
# several network interfaces.
BindAddress 0.0.0.0

# Number of simultaneous HTTP connections that can be handled. It has
# to be defined *before* the MaxClients parameter, since it defines the
# MaxClients maximum limit.
MaxHTTPConnections 2000

# Number of simultaneous requests that can be handled. Since FFServer
# is very fast, it is more likely that you will want to leave this high
# and use MaxBandwidth, below.
MaxClients 1000

# This the maximum amount of kbit/sec that you are prepared to
# consume when streaming to clients.
MaxBandwidth 300
#MaxBandwidth 1000
#MaxBandwidth 50

# Access log file (uses standard Apache log file format)
# '-' is the standard output.
#CustomLog -
CustomLog /var/log/ffserver.log

# Suppress that if you want to launch ffserver as a daemon.
NoDaemon


##################################################################
# Definition of the live feeds. Each live feed contains one video
# and/or audio sequence coming from an ffmpeg encoder or another
# ffserver. This sequence may be encoded simultaneously with several
# codecs at several resolutions.

<Feed feed1.ffm>

# You must use 'ffmpeg' to send a live feed to ffserver. In this
# example, you can type:
#
# ffmpeg http://localhost:8090/feed1.ffm

# ffserver can also do time shifting. It means that it can stream any
# previously recorded live stream. The request should contain:
# "http://xxxx?date=[YYYY-MM-DDT][[HH:]MM:]SS[.m...]".You must specify
# a path where the feed is stored on disk. You also specify the
# maximum size of the feed, where zero means unlimited. Default:
# File=/tmp/feed_name.ffm FileMaxSize=5M
File /tmp/feed1.ffm
#FileMaxSize 200K
FileMaxSize 10000K

# You could specify
# ReadOnlyFile /saved/specialvideo.ffm
# This marks the file as readonly and it will not be deleted or updated.

# Specify launch in order to start ffmpeg automatically.
# First ffmpeg must be defined with an appropriate path if needed,
# after that options can follow, but avoid adding the http:// field
#Launch ffmpeg

# Only allow connections from localhost to the feed.
ACL allow 127.0.0.1

</Feed>


##################################################################
# Now you can define each stream which will be generated from the
# original audio and video stream. Each format has a filename (here
# 'test1.mpg'). FFServer will send this stream when answering a
# request containing this filename.

<Stream rpi2.mpg>

# coming from live feed 'feed1'
Feed feed1.ffm

# Format of the stream : you can choose among:
# mpeg       : MPEG-1 multiplexed video and audio
# mpegvideo  : only MPEG-1 video
# mp2        : MPEG-2 audio (use AudioCodec to select layer 2 and 3 codec)
# ogg        : Ogg format (Vorbis audio codec)
# rm         : RealNetworks-compatible stream. Multiplexed audio and video.
# ra         : RealNetworks-compatible stream. Audio only.
# mpjpeg     : Multipart JPEG (works with Netscape without any plugin)
# jpeg       : Generate a single JPEG image.
# asf        : ASF compatible streaming (Windows Media Player format).
# swf        : Macromedia Flash compatible stream
# avi        : AVI format (MPEG-4 video, MPEG audio sound)
#Format mpeg
Format mp2
#Format ogg -> NG
#Format swf -> NG

# Bitrate for the audio stream. Codecs usually support only a few
# different bitrates.
AudioBitRate 32
#AudioBitRate 16

# Number of audio channels: 1 = mono, 2 = stereo
AudioChannels 1

# Sampling frequency for audio. When using low bitrates, you should
# lower this frequency to 22050 or 11025. The supported frequencies
# depend on the selected audio codec.
#AudioSampleRate 44100
AudioSampleRate 22050

# Bitrate for the video stream
#VideoBitRate 64

# Ratecontrol buffer size
#VideoBufferSize 40

# Number of frames per second
#VideoFrameRate 3

# Size of the video frame: WxH (default: 160x128)
# The following abbreviations are defined: sqcif, qcif, cif, 4cif, qqvga,
# qvga, vga, svga, xga, uxga, qxga, sxga, qsxga, hsxga, wvga, wxga, wsxga,
# wuxga, woxga, wqsxga, wquxga, whsxga, whuxga, cga, ega, hd480, hd720,
# hd1080
#VideoSize 160x128

# Transmit only intra frames (useful for low bitrates, but kills frame rate).
#VideoIntraOnly

# If non-intra only, an intra frame is transmitted every VideoGopSize
# frames. Video synchronization can only begin at an intra frame.
#VideoGopSize 12

# More MPEG-4 parameters
# VideoHighQuality
# Video4MotionVector

# Choose your codecs:
AudioCodec mp2
#VideoCodec mpeg1video

# Suppress audio
#NoAudio

# Suppress video
NoVideo

#VideoQMin 3
#VideoQMax 31

# Set this to the number of seconds backwards in time to start. Note that
# most players will buffer 5-10 seconds of video, and also you need to allow
# for a keyframe to appear in the data stream.
Preroll 30

# ACL:

# You can allow ranges of addresses (or single addresses)
#ACL ALLOW <first address>

# You can deny ranges of addresses (or single addresses)
#ACL DENY <first address>

# You can repeat the ACL allow/deny as often as you like. It is on a per
# stream basis. The first match defines the action. If there are no matches,
# then the default is the inverse of the last ACL statement.
#
# Thus 'ACL allow localhost' only allows access from localhost.
# 'ACL deny 1.0.0.0 1.255.255.255' would deny the whole of network 1 and
# allow everybody else.

</Stream>


##################################################################
# Example streams


# Multipart JPEG

#<Stream test.mjpg>
#Feed feed1.ffm
#Format mpjpeg
#VideoFrameRate 2
#VideoIntraOnly
#NoAudio
#Strict -1
#</Stream>


# Single JPEG

#<Stream test.jpg>
#Feed feed1.ffm
#Format jpeg
#VideoFrameRate 2
#VideoIntraOnly
##VideoSize 352x240
#NoAudio
#Strict -1
#</Stream>


# Flash -> NG

#<Stream live.swf>
#Feed feed1.ffm
#Format swf
#VideoFrameRate 2
#VideoIntraOnly
#NoAudio
#NoVideo
#</Stream>


# ASF compatible

<Stream rpi2.asf>
Feed feed1.ffm
Format asf
VideoFrameRate 15
VideoSize 352x240
VideoBitRate 256
VideoBufferSize 40
VideoGopSize 30
AudioBitRate 64
StartSendOnKey
</Stream>


# MP3 audio

<Stream rpi2.mp3>
Feed feed1.ffm
Format mp2
AudioCodec mp2
#AudioBitRate 64
AudioBitRate 32
#AudioBitRate 16
AudioChannels 1
AudioSampleRate 44100
#AudioSampleRate 22050
PreRoll 500

NoVideo
</Stream>


# Ogg Vorbis audio

<Stream rpi2.ogg>
Feed feed1.ffm
Title "Stream title"
AudioBitRate 64
AudioChannels 2
AudioSampleRate 44100
NoVideo
</Stream>


# Real with audio only at 32 kbits

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


# Real with audio and video at 64 kbits

#<Stream test.rm>
#Feed feed1.ffm
#Format rm
#AudioBitRate 32
#VideoBitRate 128
#VideoFrameRate 25
#VideoGopSize 25
#NoAudio
#</Stream>


##################################################################
# A stream coming from a file: you only need to set the input
# filename and optionally a new format. Supported conversions:
#    AVI -> ASF

#<Stream file.rm>
#File "/usr/local/httpd/htdocs/tlive.rm"
#NoAudio
#</Stream>

#<Stream file.asf>
#File "/usr/local/httpd/htdocs/test.asf"
#NoAudio
#Author "Me"
#Copyright "Super MegaCorp"
#Title "Test stream from disk"
#Comment "Test comment"
#</Stream>


##################################################################
# RTSP examples
#
# You can access this stream with the RTSP URL:
#   rtsp://localhost:5454/test1-rtsp.mpg
#
# A non-standard RTSP redirector is also created. Its URL is:
#   http://localhost:8090/test1-rtsp.rtsp

#<Stream test1-rtsp.mpg>
#Format rtp
#File "/usr/local/httpd/htdocs/test1.mpg"
#</Stream>


# Transcode an incoming live feed to another live feed,
# using libx264 and video presets

#<Stream live.h264>
#Format rtp
#Feed feed1.ffm
#VideoCodec libx264
#VideoFrameRate 24
#VideoBitRate 100
#VideoSize 480x272
#AVPresetVideo default
#AVPresetVideo baseline
#AVOptionVideo flags +global_header
#
#AudioCodec libfaac
#AudioBitRate 32
#AudioChannels 2
#AudioSampleRate 22050
#AVOptionAudio flags +global_header
#</Stream>

##################################################################
# SDP/multicast examples
#
# If you want to send your stream in multicast, you must set the
# multicast address with MulticastAddress. The port and the TTL can
# also be set.
#
# An SDP file is automatically generated by ffserver by adding the
# 'sdp' extension to the stream name (here
# http://localhost:8090/test1-sdp.sdp). You should usually give this
# file to your player to play the stream.
#
# The 'NoLoop' option can be used to avoid looping when the stream is
# terminated.

#<Stream test1-sdp.mpg>
#Format rtp
#File "/usr/local/httpd/htdocs/test1.mpg"
#MulticastAddress 224.124.0.1
#MulticastPort 5000
#MulticastTTL 16
#NoLoop
#</Stream>


##################################################################
# Special streams

# Server status

<Stream stat.html>
Format status

# Only allow local people to get the status
ACL allow localhost
ACL allow 192.168.0.0 192.168.255.255

#FaviconURL http://pond1.gladstonefamily.net:8080/favicon.ico
</Stream>


# Redirect index.html to the appropriate site

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


USER@rpi2 ~/ffserver $

screen 起動状態の確認等

$ screen -ls
There is a screen on:
	13257.FFserver	(12/26/2020 08:41:14 AM)	(Detached)
1 Socket in /var/run/screen/S-USER.

参考:

参考:screenのコマンドの備忘録

シェアする

  • このエントリーをはてなブックマークに追加

フォローする