Resum Recepta | |
---|---|
Corba aprenentatge | Alta |
Movilitat | Baixa |
Realització | No |
Dificultat | Alta |
Calitat transimissió | Normal |
Hardware | Ordinador, Handicam, Capturadora de video |
Pas a pas
Per a realitzar streams a varies fonts a la vegada nosaltres utilitzem gstreamer i ffmpeg directament des del intèrpret de comandaments en bash, això ens permet tenir major control del video i poder enviar fonts de stream a varies fonts, així com no dependre del plugin de flash.
Pas 1 creació de dispositius video
Creem els dispositius virtuals a partir de un dispositiu de video existent(en aquest cas video1):
Script :
sudo rmmod v4l2loopback sudo modprobe v4l2loopback devices=4 echo "Duplicant dev video1 a /dev/video2 /dev/video3 /dev/video4 /dev/video5" gst-launch v4l2src device=/dev/video1 ! \ tee name="vdev1" ! queue ! ffmpegcolorspace ! v4l2loopback device="/dev/video2" vdev1. ! \ tee name="vdev2" ! queue ! ffmpegcolorspace ! v4l2loopback device="/dev/video3" vdev2. ! \ tee name="vdev3" ! queue ! ffmpegcolorspace ! v4l2loopback device="/dev/video4" vdev3. ! \ queue ! ffmpegcolorspace ! v4l2loopback device="/dev/video5"
Pas 2 nom de tarjeta d'audio
Hem de saber també el nom de la tarjeta d'audio d'on volem capturar amb
pacmd list-cards | grep name
i agafem l'entrada que volguem. Si no detecta la tarjeta usb fem un
killall pulseaudio
i tornem a veure si la detecta amb
pacmd list-cards | grep name
En cas que no detecti bé l'entrada usb cal fer:
pactl load-module module-alsa-source device="hw:1,0" #(subsituint hw:1,0 pel dispo que toqui es pot mirar: cat /proc/asound/cards ).
Script stream-audio-sources.sh:
#!/bin/bash echo "==============================================" echo "pots triar entre aquestes entrades : \033[1m \n" LANG=C pactl list | grep -A2 'Source #' | grep 'Name: ' | cut -d" " -f2 echo '\033[0m' echo "==============================================" echo "falta usb?? (y/n) (sortira de nou la llista de tarjetes)" read usb if [ $usb == "y" ] then pactl load-module module-alsa-source device="hw:1,0" fi
Hem de tenir en compte amb quin dispositiu volem treballar, sempre fem ús dels virtuals (loops) per video i pulseaudio per audio (per bloquejar els dispositius) |
a més...
Pels propers scripts s'han de substituir elements com v4l2src device="_____" o pulsesrc device="_____" així com contrassenyes, usuaris i mountpoints o ips que fem servir, (a seguit podem veure alguns scripts en format "____exemple") |
Monitoratge
- Video:
gst-launch v4l2src device=/dev/video2 ! autovideosink
- Audio:
gst-launch pulsesrc device="alsa_input.hw_1_0" ! autoaudiosink (aqui hem de saber el nom del dispositiu que ens dóna LANG=C pactl list | grep -A2 'Source #' | grep 'Name: ' | cut -d" " -f2
Per Giss
Script emetent a giss:
#usage: # app.sh "/dev/videoX" "audiodevicepulsename" #example: # app.sh "/dev/video3" "alsa_input.usb-Burr-Brown_from_TI_USB_Audio_CODEC-00-CODEC.analog-stereo" videodev="$1" audiodev="$2" echo "emetent a giss.tv" gst-launch v4l2src device=$videodev ! queue ! ffmpegcolorspace ! ffdeinterlace ! videorate ! video/x-raw-yuv,framerate=25/2 ! videoscale add-borders=TRUE ! video/x-raw-yuv,width=640,height=360 \ ! theoraenc quality=16 ! queue \! oggmux name=mux pulsesrc device="$2" ! audio/x-raw-int,rate=44100,channels=1,depth=16 ! queue ! audioconvert ! vorbisenc ! queue ! mux. mux. \ ! queue ! shout2send ip=____giss.tv port=____8000 password=____hackme mount=____mountpoint.ogg
Script per baixa qualitat(només audio):
#usage: # app.sh gst-launch pulsesrc device="____alsa_input.usb-Burr-Brown_from_TI_USB_Audio_CODEC-00-CODEC.analog-stereo" ! audio/x-raw-int,rate=22050,channels=1,depth=8 ! queue ! audioconvert ! vorbisenc quality=0.01 ! queue ! oggmux ! queue ! shout2send ip=____hack.org port=____8000 password=____hackme mount=____mountpoint.ogg
PER BAMBUSER (gstreamer+ffmpeg) (Lamentablement aquesta opció només és possible amb usuaris de pagament de la plataforma)
Hem de saber La url de la api de bambuser. Això ho podem saber al panell de control de bambuser http://bambuser.com/encoder/fme/profile
<output> <rtmp> <url>rtmp://0000.fme.bambuser.com/b-fme</url> <backup_url></backup_url> <stream>socunafrasemoltllargasende</stream> </rtmp> </output>
Si ajuntem la url/stream tenim la direcció on podrem enviar l'streamin en aquest cas seria:
rtmp://0000.fme.bambuser.com/b-fme/socunafrasemoltllargasende
Creem la tuberia:(si no existeix)
mkfifo outbambuserfif
Primer gstreamer:(cal instalar ' sudo apt-get install gst-entrans ' per lstamp):
#usage: # app.sh gst-launch v4l2src device=_____/dev/video4 ! stamp sync-margin=1 sync-interval=1 ! videorate ! video/x-raw-yuv,width=320,height=240,framerate=20/1 ! ffmpegcolorspace ! x264enc bitrate=368 subme=4 b-pyramid=true weightb=true ! queue2 ! flvmux name=mux pulsesrc device="____alsa_input.usb-Burr-Brown_from_TI_USB_Audio_CODEC-00-CODEC.analog-stereo" ! audio/x-raw-int,rate=22050,channels=2,depth=16 ! audiorate ! queue2 max-size-buffers=600 max-size-bytes=0 max-size-time=0 ! audioconvert ! lamemp3enc target=1 bitrate=40 mono=true encoding-engine-quality=1 target=bitrate ! mux. mux. ! queue2 ! filesink location=outbambuserfif sync=false
Si tenim problemes de mides li posem un plugin de videoscale:
gst-launch v4l2src device=_____/dev/video4 ! stamp sync-margin=1 sync-interval=1 ! videorate ! video/x-raw-yuv,framerate=20/1 ! videoscale ! video/x-raw-yuv,width=320,height=240 ! ffmpegcolorspace ! x264enc bitrate=368 subme=4 b-pyramid=true weightb=true ! queue2 ! flvmux name=mux pulsesrc device="_____alsa_input.usb-Burr-Brown_from_TI_USB_Audio_CODEC-00-CODEC.analog-stereo" ! audio/x-raw-int,rate=22050,channels=2,depth=16 ! audiorate ! queue2 max-size-buffers=600 max-size-bytes=0 max-size-time=0 ! audioconvert ! lamemp3enc target=1 bitrate=40 mono=true encoding-engine-quality=1 target=bitrate ! mux. mux. ! queue2 ! filesink location=outbambuserfif sync=false
Després ffmpeg:(cal instalar ' sudo apt-get install ffmpeg ')
#usage: # app.sh ffmpeg -y -re -i outbambuserfif -s 320x240 -vcodec flv -b 152k -g 150 -cmp 2 -subcmp 2 -mbd 2 -f flv ______rtmp://0000.fme.bambuser.com/b-fme/socunafrasemoltllargasende
I ja podem anar a bambuser dashboard.
Script per bambuser:
#usage: #app.sh if [ ! -e outbambuserfif ] ; then mkfifo outbambuserfif echo "creant tuberia a `pwd`/outbambuserfif ok" ; fi echo "tirant gstreamer , tira 'ffmpeg -y -re -i outbambuserfif -s 320x240 -vcodec flv -b 152k -g 150 -cmp 2 -subcmp 2 -mbd 2 -f flv ____rtmp://0000.fme.bambuser.com/b-fme/socunafrasemoltllargasende' a una altra consola (has de tirar a dins del mateix directori per la fifo)" gst-launch v4l2src device=_____/dev/video4 ! ffdeinterlace ! stamp sync-margin=1 sync-interval=1 ! videorate ! video/x-raw-yuv,framerate=20/1 ! videoscale \ ! video/x-raw-yuv,width=320,height=240 ! ffmpegcolorspace ! x264enc bitrate=368 subme=4 b-pyramid=true weightb=true ! queue2 \ ! flvmux name=mux pulsesrc device="____alsa_input.hw_1_0" ! audio/x-raw-int,rate=22050,channels=2,depth=16 ! audiorate \ ! queue2 max-size-buffers=600 max-size-bytes=0 max-size-time=0 \ ! audioconvert ! lamemp3enc target=1 bitrate=40 mono=true encoding-engine-quality=1 target=bitrate ! mux. mux. ! queue2 \ ! filesink location=outbambuserfif sync=false
gst-launch-1.0 pulsesrc ! audio/x-raw, format=S16BE, channels=1, rate=8000 ! queue ! audioconvert ! vorbisenc ! oggmux !