Recepta 4: multisources

gst-launch-1.0 pulsesrc !  audio/x-raw, format=S16BE, channels=1, rate=8000   ! queue ! audioconvert ! vorbisenc ! oggmux ! 

shout2send ip=____giss.tv port=____8000 password=____hackme mount=____mountpoint.ogg

Resum Recepta
Corba aprenentatge Alta
Movilitat Baixa
Realització No
Dificultat Alta
Calitat transimissió Normal
Hardware Ordinador, Handicam, Capturadora de video
Foodlogo2.svg

Ingredients:

  • Camera Handicam
  • Capturadora de video
  • Ordinador

 

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