Streaming-Server
Maxdata silber, Intel P4
openSUSE 11.3 32-Bit
-
2GB RAM
Für Maturaball
Videokammerl: Raum 114, Netzwerkdose auf A gepatcht
Strom für Kamera: Steckdose hinter Scheinwerfer 1. OG auf Höhe Chemiekammerl
Vorbereitungen
zypper ar -f http://packman.inode.at/suse/11.3 packman
zypper in ffmpeg vlc mplayer flash-player x11vnc xawtv
- /etc/init.d/boot.local
modprobe bttv card=54
Bild testen
xawtv
Beim ersten Mal funktioniert xawtv nie, mit q beenden. Dann beim zweiten Mal die Videoquelle und das Bildformat umstellen (rechte Maustaste, PAL, S-Video)
LIVE Video und Audio
- view.sh
#!/bin/bash
mplayer tv:// -tv fps=25:buffersize=64:driver=v4l2:width=800:height=600:device=/dev/video0:forceaudio:adevice=/dev/dsp:norm=pal:input=2 -vo x11
Video und Audio aufnehmen
- view.sh
#!/bin/bash
# Aufnahme 1:1 (große Dateien!)
# -ovc copy
# -oac pcm
nice -n 20 mencoder tv:// \
-tv fps=25:buffersize=64:driver=v4l2:width=800:height=600:device=/dev/video0:forceaudio:adevice=/dev/dsp:amode=1:norm=pal:input=2 \
-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=4000:vhq:vqmin=2:vqmax=31 \
-oac mp3lame -lameopts cbr:br=256:q=0:aq=0:mode=0 \
-o filename.avi
Streamen
- stream.sh
#!/bin/bash
cvlc v4l2:// :v4l2-dev="/dev/video0" :v4l2-input=2 :v4l2-adev=/dev/dsp :input-slave=alsa:// \
--sout '#transcode{vcodec=wmv2,vb=800,scale=0.5,acodec=mpga,ab=512,samplerate=44100,channels=1}:duplicate{dst=std{access=http{mime=video/x-ms-wmv},mux=asf,dst=:8080}}' \
:no-sout-rtp-sap :no-sout-standard-sap :ttl=1 :sout-keep
#cvlc final.wmv \
#--sout '#transcode{vcodec=mp1v,vb=2600,scale=0.75}:duplicate{dst=std{access=http{mime=video/x-ms-wmv},mux=asf,dst=:8080}}' \
#:no-sout-rtp-sap :no-sout-standard-sap :ttl=1 :sout-keep --no-sout-audio
Bildschirm freigeben über das Netzwerk
- x11.sh
#!/bin/bash
x11vnc -display :0 -ncache 10 -viewonly
Streaming-Server (alt)
Port 31337
BindAddress 0.0.0.0
MaxClients 1000
MaxBandwidth 100000
# Comment the following, on production use
NoDaemon
<Feed feed1.ffm>
File /tmp/feed1.ffm
FileMaxSize 100M
#Launch ffmpeg -y -v 9 -f video4linux2 -vc 2 -tvstd PAL -s 480x384 -b 512000 -r 10 -an -i /dev/video0
Launch ffmpeg -y -v 9 -f video4linux2 -vc 2 -tvstd PAL -s 480x384 -b 256000 -r 15 -an -i /dev/video0
#Launch ffmpeg -r 10 -s 320x240 -f video4linux2 -i /dev/video0 -vcodec flv http://localhost:31337/feed1.ffm
</Feed>
#<Stream stream.flv>
# Feed feed1.ffm
# Format flv
# VideoCodec flv
# VideoFrameRate 2
# VideoBufferSize 80000
# VideoBitRate 256
# VideoQMin 1
# VideoQMax 5
# VideoSize 480x384
# PreRoll 0
# Noaudio
#</Stream>
## SWF output
#<Stream stream.swf>
# Feed feed1.ffm
# Format swf
# VideoCodec flv
# VideoFrameRate 15
# VideoBitRate 200
# VideoQMin 5
# VideoQMin 5
# VideoSize 320x240
# PreRoll 0
# Noaudio
#</Stream>
# ASF compatible
<Stream stream.asf>
Feed feed1.ffm
Format asf
VideoFrameRate 15
VideoSize 352x240
VideoBitRate 256
VideoBufferSize 40
VideoGopSize 30
AudioBitRate 64
StartSendOnKey
Noaudio
</Stream>
# SWF output
<Stream stream.swf>
Feed feed1.ffm
Format swf
VideoCodec flv
VideoFrameRate 15
VideoBitRate 512
VideoQMin 5
VideoQMax 9
VideoSize 480x384
PreRoll 0
Noaudio
</Stream>
ffserver &
killall ffserver
EINSTEIN
<html><head>
<title>Live-Streaming</title>
<meta http-equiv="refresh" content="1200" />
<link rel="stylesheet" href="../style.css" />
</head>
<body style="background-color: #000000; text-align: center">
<h1 style="color: #ffffff;">Flash Live Stream</h1>
<p><a href="/">zurück</a></p>
<p><a href="http://193.170.221.1:31337/stream.asf">Windows Media Player Stream</a></p>
<p>
<object classid="CLSID:D27CDB6E-AE6D-11cf-96B8-444553540000" width="480" height="384"
codebase="http://active.macromedia.com/flash2/cabs/swflash.cab#version=4,0,0,0">
<param name="movie" value="http://193.170.221.1:31337/stream.swf">
<embed src="http://193.170.221.1:31337/stream.swf" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" width="480" height="384">
</embed>
</object>
<!--
<object class="playerpreview" type="application/x-shockwave-flash" data="player.swf" width="480" height="384">
<param name="movie" value="player.swf" />
<param name="allowFullScreen" value="true" />
<param name="FlashVars" value="flv=http://193.170.221.1:31337/stream.flv&width=480&height=384&showstop=1&showvolume=1&showtime=1&showfullscreen=1&bgcolor=003d7e&bgcolor1=003d7e&bgcolor2=003d7e&autoplay=1" />
<p>Bitt Flash installieren.</p>
</object>
-->
</p>
</body></html>
Client
mplayer http://193.170.221.1:31337/stream.asf
Servervoraussetzungen
openSUSE 11.1
root, uS….
Kartenname: Bt878
Treiber bttv
Soundkarte: Intel ICH6
-
dmesg | grep bttv => card=54
rmmod bt878 bttv
modprobe bttv card=54
options bttv card=54
Video Kanäle
0 = Television
1 = Composite
2 = s-video
Port-Weiterleitung
- iptables.sh
#!/bin/bash
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -F -t nat
iptables -t nat -A PREROUTING -p tcp --dport 31337 -j DNAT --to 192.168.100.40:31337
iptables -t nat -A POSTROUTING -j MASQUERADE
Alter Gentoo-Server (2008)
bttv card=54
emerge ffmpeg
Port 8090
BindAddress 0.0.0.0
MaxHTTPConnections 1000
MaxClients 1000
MaxBandwidth 2000
CustomLog -
NoDaemon
##################################################################
<Feed feed1.ffm>
File /tmp/feed1.ffm
FileMaxSize 50M
ACL allow 127.0.0.1
</Feed>
##################################################################
# JPEG
<Stream test.jpg>
Feed feed1.ffm
Format jpeg
VideoFrameRate 2
VideoIntraOnly
VideoSize 480x384
#NoAudio
Strict -1
</Stream>
#Flash
<Stream stream.swf>
Feed feed1.ffm
VideoBitRate 256
VideoFrameRate 25
VideoBufferSize 80000
Format swf
VideoFrameRate 25
VideoSize 480x384
VideoQMin 3
VideoQMax 5
VideoCodec flv
#NoAudio
PreRoll 0
</Stream>
##################################################################
# Special streams
# Server status
<Stream stat.html>
Format status
# Only allow local people to get the status
ACL allow localhost 192.168.100.0
#ACL allow 10.0.0.0 10.0.0.255
#ACL allow 0.0.0.0
#FaviconURL http://pond1.gladstonefamily.net:8080/favicon.ico
</Stream>
<Redirect index.html>
URL http://www.ffmpeg.org/
</Redirect>
ffmpeg -y -v 9 -f video4linux2 -vc 2 -tvstd PAL -s 480x384 -r 25 -i /dev/video0 -vcodec flv http://localhost:8090/feed1.ffm
Stream speichern
ffserver und ffmpeg ganz normal wie oben erwähnt ausführen
In den Ordner wechseln, in den man den Stream speichern will
w3m http://localhost:8090/stat.html
Streaming mit ffmpeg (Ausgabe = Flash-Film = gute Qualität)
Port 31337
#8090
# bind to all IPs aliased or not
BindAddress 0.0.0.0
# max number of simultaneous clients
MaxClients 1000
# max bandwidth per-client (kb/s)
MaxBandwidth 10000
# Suppress that if you want to launch ffserver as a daemon.
NoDaemon
<Feed feed1.ffm>
File /tmp/feed1.ffm
FileMaxSize 50M
</Feed>
<Stream stream.swf>
Feed feed1.ffm
Format swf
VideoCodec flv
VideoFrameRate 24
VideoBufferSize 80000
VideoBitRate 256
#VideoQMin 1
#VideoQMax 5
VideoSize 352x288
PreRoll 0
Noaudio
</Stream>
nb02:/etc # ffserver
nb02:/etc # ffmpeg -r 24 -s 352x288 -f video4linux2 -i /dev/video0 http://localhost:31337/feed1.ffm
- stream.html
<file>
<html>
<head><title>Live-Übertragung - Maturaball BG/BRG Weiz</title></head>
<body>
<embed src="http://84.119.8.108:31337/stream.swf" width=352 height=288 type="application/x-shockwave-flash"></embed>
</body>
</html>
mplayer http://ip-adresse:8080
oder im Internet in
HTML eingebunden:
- stream.html
<html>
<head><title>Live-Übertragung - Maturaball BG/BRG Weiz</title></head>
<body>
<object id="Player1" width="426" height="305" classid="CLSID:6BF52A52-394A-11D3-B153-00C04F79FAA6" type="application/x-mplaye
r2">
<param name="url" value="http://localhost:8080" />
<param name="FileName" value="http://localhost:8080" />
<param name="ShowControls" value="1" />
<param name="ShowDisplay" value="0" />
<param name="ShowStatusBar" value="1" />
<param name="AutoSize" value="1" />
<param name="stretchToFit" value=0 />
<param name="AutoStart" value="1" />
<embed type="application/x-mplayer2" pluginspage="http://www.microsoft.com/Windows/Downloads/Contents/Products/MediaPlayer/"
src="http://localhost:8080" Name="NSPlayer1" ShowControls="1" ShowDisplay="0" ShowStatusBar="1" AutoSize="0" AutoStart="1" wi
dth="426" height="305" />
</object>
<a href="">Windows Media Player</a> bzw. <a href="">VLC</a> werden benötigt.
</body>
</html>