FFmpeg でデータの変換, FFserver でストリームを配信可能にし, MediaTomb で配信をする.
FFserverの設定
FFserver の設定の中にLaunch を書いておくことで,
FFmpeg を呼び出すことが可能.
フォーマットやコーデックを下記のように指定すると, Viera で再生することができる.
Port 9999 RTSPPort 9990 BindAddress 0.0.0.0 MaxClients 1000 MaxBandwidth 100000 CustomLog - <Feed feed1.ffm> File /dev/shm/feed1.ffm FileMaxSize 100M Launch /usr/local/bin/ffmpeg -f video4linux2 -i /dev/video0 -f alsa -i hw:0 </Feed> <Stream mpegts.mpeg> Feed feed1.ffm Format mpegts VideoCodec mpeg2video VideoBitRate 2048 VideoFrameRate 29.97 VideoSize 720x480 VideoGopSize 12 PixelFormat yuv420p AudioCodec mp2 AudioBitRate 64 AudioChannels 2 AudioSampleRate 44100 </Stream> <Stream teststat.html> Format status </Stream>
MediaTomb config.xml
MediaTomb から CURL を呼び出し, FFmpeg の配信するストリームを MediaTomb に渡す.CURLを呼び出すため, まずはシェルスクリプトを実行可能にする. 拡張子
.shをvideo/scriptというMIMEtypeにマップする.
video/scriptは, bashというプロファイルでトランスコード.
最後に, プロファイルbashを定義する. -xオプションを付けておくことで, どのようなスクリプトが実行されたのか分かり, デバッグに役立つ.
...
<map from="sh" to="video/script"/>
...
<transcode mimetype="video/script" using="bash"/>
...
<profile name="bash" enabled="yes" type="external">
<mimetype>video/mpeg</mimetype>
<accept-url>yes</accept-url>
<first-resource>yes</first-resource>
<accept-ogg-theora>yes</accept-ogg-theora>
<agent command="/bin/bash" arguments="-x %in %out"/>
<buffer size="14400000" chunk-size="512000" fill-size="120000"/>
</profile>
...
CURLを実行するスクリプトを用意し, MediaTomb に追加する.
引数$1が%outになるので, これへ出力する. 実際には名前付きパイプになっているようだ.
#! /bin/bash exec curl -s -o "$1" http://localhost:9999/mpegts.mpeg
0 件のコメント:
コメントを投稿