Stickam, Flash Media Live Encoder en ffmpeg

Alle zin en onzin dingen kun je hier posten.

ModeratorCOLON Moderators

BUTTON_POST_REPLY
Gebruikers-avatar
dracozna
Spammer
Spammer
BerichtenCOLON 959
GeregistreerdCOLON Do Mrt 10, 2005 2:52 pm

Stickam, Flash Media Live Encoder en ffmpeg

Bericht door dracozna »

Er zijn verschillende sites waarop je live je webcam kan streamen voor degene die geïnteresseerd zijn. Een van deze sites is stickam. Deze site werd ook gebruikt bij het streamen van live beeld tijdens lanpunt1 en tijdens een paars lan's bij mij thuis.

Stickam kent twee twee methodes om video te ontvangen. Een daarvan is de flash-applicatie die je standaard draait als je op de “Go-live” knop drukt. Deze applicatie werkt prima alleen is de configuratie beperkt, kan je alleen een webcam gebruiken en zit je vast aan een lagere resolutie.

De tweede manier is door het streamen van een RTMP stream naar een speciale url die voor elke gebruiker uniek is.

Stickam zelf adviseert hiervoor Adobe's “Flash Media Live Encoder” en levert daarvoor zelfs configuratie-bestanden aan die je kan laden in het programma. Het programma is hier te vinden en je kan het downloaden als je eerst een (gratis) account hebt aangemaakt. Je krijg daarna wel geregeld wat reclame in je mailbox maar dat is makkelijk te verhelpen. Verder is installatie makkelijk te doen en is de configuratie vrij simpel. Je kan met behulp van dit programma ook meerdere camera's gebruiken (HD-camera anyone?)

Helaas werkt het programma niet onder linux. Om alsnog te kunnen streamen kan je gebruik maken van de tool ffmpeg. Ffmpeg is samen met mplayer een van de meest gebruikte (en naar mijn mening de beste) tools om video's te encoden en af te spelen. Deze tools hebben alleen het nadeel dat ze vanaf de command-line werken wat de meesten of snel afschrikt of een weekend laten puzzelen (zoals ik).

Om het enigszins behapbaar te maken zal ik stap voor stap uitleggen wat ik heb gedaan. Om te beginnen maak ik gebruik van 2 onderdelen namelijk video4linux2 en alsa. Video4linux2 is het onderdeel wat linux gebruik voor het aansturen van webcams en tv/dvb-kaarten.
Alsa is een van de geluidsinterfaces waarmee je onder linux je geluidskaarten aanstuurt (ok het ligt wat ingewikkelder maar ik heb nu geen zin om dat uit te leggen).

Voor video4linux2 zit mijn webcam op /dev/video0 omdat ik maar 1 camera heb aangesloten.
Voor alsa zit de microfoon van mijn webcam op 2.0.
Ik heb 3 “geluidskaarten”
0 = asus xonar
1 = intel hda onboard ding
2 = webcam-microfoon

de syntax van ffmpeg is vrij “simpel”(gejat uit de man-page):
ffmpeg [[infile options][-i infile]]... {[outfile options] outfile}..

Ik begin met het invoeren van het geluid van de webcam:
ffmpeg -f alsa -i hw:2,0
Met -f geef ik aan dat die alsa moet gebruiken en na -i komt de inputbron (microfoon van mijn webcam)

daarna voeg ik de webcam toe:
ffmpeg -f alsa -i hw:2,0 -f video4linux2 -r 25 -s hd720 -i /dev/video0
na de -f video4linux2 geef ik met -r de framerate op (25 frames per seconde) en met -s de resolutie van de webcam (in dit geval 720p)

Tot zover hebben we alleen nog maar de inputs gehad. Om de film te verzenden wordt gebruik gemaakt van flash en een lagere resolutie. De instellingen heb ik gejat uit het configbestand die stickam geeft voor “Flash Media Live Encoder”
Voor de instellingen van de output wordt het commando dus:
fmpeg -f alsa -i hw:2,0 -f video4linux2 -r 25 -s hd720 -i /dev/video0 -f flv -s 512x288 -b 250k

-f flv geeft aan dat die een flashcontainer moet maken (zelf kiest die daarvoor de juiste codecs).
Met -s 512x288 krijgt de uiteindelijke filmp een resolutie van 512 bij 288. Als laatste geeft -b 250k aan dat de bitrate ongeveer 250KB moet zijn.

Tot zover de configuraties van ffmpeg. Nu moet ffmpeg alleen nog weten waar de stream heen moet. Als je op de help-pagina kijkt zie je twee velden staan genaamd “FMS URL” en “Stream”. Deze twee velden vormen samen de link waarheen je moet streamen. Dit is overigens maar een voorbeeld. De daadwerkelijk URL staat onder "broadcast quality" in je account-preferences
Voorbeeld:
FMS URL = rtmp://fme.stickam.com/sk_hd/[userkey]
Stream = blargh
Deze twee waarden wordem samen: rtmp://fme.stickam.com/sk_hd/[userkey]/blargh

Hiermee word dan het uiteindelijke commando voor ffmpeg:
fmpeg -f alsa -i hw:2,0 -f video4linux2 -r 25 -s hd720 -i /dev/video0 -f flv -s 512x288 -b 250k rtmp://fme.stickam.com/sk_hd/[userkey]/blargh

Op deze manier is het mogelijk om je kop te laten zien op Stickam met behulp van ffmpeg. Je kan ook nog meerdere dingen instellen (settings van geluid heb ik niet behandelt) maar ik wou het deze keer nog "simpel" houden :pint:

BUTTON_POST_REPLY