Home> Archives > 2008年5月アーカイブ

2008年5月アーカイブ

ffserver(ffmpeg)+UVC対応USBカメラでストリーミング配信 続き...

  • 2008年5月18日 20:58

ffserver(ffmpeg)でストリーミング配信をいましたが、時間が経つと動画が止まるという症状が発生。

いろいろサイトとかを調べたらffmpegの起動オプション-r と -bをつけることがわかりました。

昔はffserver.confだけ、いじればだったんですけどね..

で、今のところ

ffmpeg -f video4linux2 -s 640x480 -r 16 -b 512k -i /dev/video0 http://localhost:8080/feed1.ffm

の起動で現象を回避することができました。

ついでに.rmでの配信はやめて.swfと.flv配信にしました。

.asfはいまだにうまくいきません。

いちおう.flvの現在の設定をメモ

今のところ一番折り合いがつく設定かも...ffmepgの起動オプションの値と合っていないのは気のせいです(笑


Feed feed1.ffm
Format flv
VideoCodec flv
VideoFrameRate 10
VideoBufferSize 80000
VideoBitRate 200
VideoQMin 1
VideoQMax 5
VideoSize 640x480
PreRoll 0
NoAudio

ffserver(ffmpeg)+UVC対応USBカメラでストリーミング配信

  • 2008年5月11日 20:58

ffserver(ffmpeg)でUVC対応USBカメラでストリーミング配信ができたので、そのメモです。

まずはUSBカメラのドライバインストール

#svn checkout svn://svn.berlios.de/linux-uvc/linux-uvc/trunk
#cd trunk
#make
#make install
以上でUVCドライバがインストールされます。
所有している2つのUVC対応USBカメラで認識されていることを確認。
ELECOM UCAM-DLM130HWH マニュアルフォーカス
シグマ UVCA130AFWH オートフォーカス(Linux上でフォーカス機能動作確認ス機能動作確認)
ちなみに2つのカメラは同じチップを使ってました。

次にffmpegのインストールです。

最新のffmpegでは起動時にUSBカメラの認識をしてくれないのでリビジョン9778をインストールしました。SVNでオプション-r 9778をつけてダウンロードします。

#svn checkout -r 9778 svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg
# cd ffmpeg
# ./configure
# make
# make install

設定ファイルffserver.confをコピーします。

cp /usr/local/src/ffmpeg/doc/ffserver.conf /usr/local/etc/ffserver.conf

ffserver.confを編集します。

今回配信できたのは.swf .rm形式のみ.jpgはサポート外と表示され以前は配信できていたasf形式は表示されませんでしたので引き続き設定ファイルの調整を行う予定です。

・Flash


Feed feed1.ffm
Format swf
VideoFrameRate 8
VideoSize 320x240
VideoBitRate 200
VideoQMin 1
VideoQMax 5
PreRoll 0
VideoIntraOnly
NoAudio

・RealPlayer

Feed feed1.ffm
Format rm
#AudioBitRate 32
VideoBitRate 128
VideoFrameRate 15
VideoGopSize 25
VideoSize 320x240
NoAudio

ffserverとffmpegの起動をします。

/usr/local/bin/ffserver -f /usr/local/etc/ffserver.conf &

/usr/local/bin/ffmpeg -f video4linux2 -s 320x240 -i /dev/video0 /tmp/test.ffm

ffmpegの起動に関してはffmpeg-0.4.8の時と少し違ってます

起動後に動作チェックを行います。

.swf(Flash)に関してはffserverを起動して時間が経過をしても配信ができるのですが、.rm(RealPlayer)に関しては起動後3時間ほどで2秒ほどしか配信されなくなります。

SyslogやMaillogを毎日定期的にもっと簡単に監視できるようにしてみましょう。(改訂版)

  • 2008年5月 5日 21:01

サーバーのログをメールで配信する方法です。

昔作ったこれの改定版です。

前のは、ログローテーションとか関係無しにとりあえずログを引っ張ってくるだけであまり機能的ではなかったのでGW中の時間のあるときに作り直しました。

内容としては前回と同じでシスログ・メールログ・ウェブ鯖のログをメールで毎日配信するってやつです。

昔作った部分の不具合部分を修正しました。

  • シスログ・メールログ1日から9日までが出力されない。
  • apacheログの検索結果が不完全な状態。
  • 月末(30日31日)の出力がされない。
  • 月初(1日)が表示されない。

 

下記スクリプトはログローテーションのタイミングが月単位の場合です。

週/日単位でログローテーションをされている方は変更が必要です。

定期的に実行させる為にcronを使うことになりますが、実行時間はログローテーションの実行後に行ってください。

 #!/bin/sh

LANG="en_US"   <-- 英語表示
declare -i day

##############################
#月日取得処理
##############################
m_flg="0"   <-- 月フラグ
m_mon=$(date "+%b")  <-- 今月の月取得
day=$(TZ=JST+15 date "+%e")  <-- 前日の日取得(取得形式:2桁)
mon=$(TZ=JST+15 date "+%b")  <-- 前日の月取得
a_day=$(TZ=JST+15 date "+%d")  <-- 前日日取得(取得形式:1桁)

##############################
#月日形式出力
##############################
if [ $day -gt 9 ]; then
    sys_day="$mon $day"   <--10日以上であれば月と日の間のスペースは1つ
else
    sys_day="$mon  $day"  <--10日未満であれば月と日の間のスペースは2つ
fi

apa_day="$a_day/$mon"  <--apache用月日出力

##############################
ログローテーションの一世代目のファイルを検索するかどうかの判定
検索の条件として当日と前日の月が違う場合は前日は前月の最終日となるので
ログローテーションされ対象日付けは一世代目ファイルに書き込まれる為。
前日が1日の場合は対象となる日付けの一部が一世代目ファイルに書き込まれる為。
※ログローテーションのタイミング:月単位の午前4時

if [ $m_mon = $mon ]; then
    m_flg="1"  <-- 当日と前日の月が同じであれば検索しない
fi
if [ $day = "1" ];then
    m_flg="0"  <-- 前日が1日であれば検索する
fi

#以下メールで送信される内容

(echo ""

echo "---Syslog----------------------------------------------------------"
if [ $m_flg = "0" ]; then  <-- 一世代ログを検索するかどうかの判定
    grep "$sys_day" /var/log/messages.1
fi
grep "$sys_day" /var/log/messages
echo "---Syslog_End------------------------------------------------------"

echo ""
echo "---Maillog---------------------------------------------------------"
if [ $m_flg = "0" ]; then
    grep "$sys_day" /var/log/maillog.1
fi
grep "$sys_day" /var/log/maillog
echo "---Maillog_End-----------------------------------------------------"

echo ""
echo "---Apache access_log-----------------------------------------------"
if [ $m_flg = "0" ]; then
    grep "$apa_day" /usr/local/apache2/logs/access_log.1
fi
grep "$apa_day" /usr/local/apache2/logs/access_log
echo "---Apache papanda.jp_End-------------------------------------------"

echo "" ) | mail -s ServerLog_Infomation[www.exsmple.jp] info@exsmple.com

Continue reading

Index of all entries

Home> Archives > 2008年5月アーカイブ

カテゴリ
アーカイブ
購読
Powerd By

Return to page top