From 34d622ceea137538198da95018563d676e851939 Mon Sep 17 00:00:00 2001 From: Matthew Clark Date: Tue, 3 Apr 2018 22:51:32 +0100 Subject: [PATCH] Add tee examples --- README.md | 4 +++- images/pinwheel_and_ball.png | Bin 0 -> 19747 bytes tee.md | 42 +++++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 images/pinwheel_and_ball.png create mode 100644 tee.md diff --git a/README.md b/README.md index 94d9a85..360cb17 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ A few Python examples are also included for when you need GStreamer to be dynami * [Mixing video & audio](mixing.md) * [Images](images.md) * [Capturing images](capturing_images.md) +* [Sending to multiple destinations (tee)](tee.md) * [Sending/receiving video from shared memory](memory_transfer.md) * [Network transfer](network_transfer.md) (including how to send so that VLC can preview) @@ -29,9 +30,10 @@ A few Python examples are also included for when you need GStreamer to be dynami ## Interacting with the GStreamer pipeline -If you want to interact with GStreamer after it's started (e.g. respond to an event, or dynamically change a pipeline), the command-line GStreamer doesn't really cut it. Instead you have two options: +If you want to interact with GStreamer after it's started (e.g. respond to an event, or dynamically change a pipeline), the command-line GStreamer doesn't really cut it. Instead, here are some options: * *[GStreamer Daemon (gstd)](https://github.com/RidgeRun/gstd-1.x)* - allows setting and updating via a TCP connection +* *[Snowmix](http://snowmix.sourceforge.net/) - an open-source live video mixer * *Develop using the GStreamer library*, in either [C](https://gstreamer.freedesktop.org/documentation/application-development/basics/helloworld.html), [Python](https://github.com/GStreamer/gst-python), or [C#/.NET](https://github.com/GStreamer/gstreamer-sharp) ### Python with GStreamer diff --git a/images/pinwheel_and_ball.png b/images/pinwheel_and_ball.png new file mode 100644 index 0000000000000000000000000000000000000000..7328079043a1674bb046264c8edf4afc23796606 GIT binary patch literal 19747 zcmZ_01ys|0_&&Ui0i$GeDGV5mG)ObLrAxX+x|QxmCLkfDw1OzzAvvTJP(nJTyXzg# z^Zb9m|NEZvat?>>yHCe`U-xz0BUbaNA^|QnE&u=^P*#%D1^|Ev^e+|!3;l%jjoKgd zAF#c&x-vsThp2LSw-0f3MQ0N@h+DC92y;LQU7Y+3*Sq8R`HgehUkL(o!!ti008lqqUe{-wqBO7m(ETuo}w=$82%|C zihh0nn41CiPZ2Li2?j%TO_;2!hb>HyOMr`qK@t}RgNb|C*okV(Dg0L*{Z4}6xtEul zC^xsSuP>J`KbNbAJvXn2hzK_iA2%Q0V|0nfp08ZIEMGo$@nrnBk^j?O z$}V2E9_Y^gtIhXc?f?H0|FtE~eLwO4Ya#w!<$s={mst{5ocn*aOcFO<16&0FAOOm8 z(z-8!J2^(kN55Y6jm%{Je69Z@4jzFt1j}&BKrF)#!oEFyxRen>@PH79u;0@x`4fDF zp1VTD%qpGZtw&FNO3zzhxfa|)iR ztNHwShhk@EX9RrJCWP8MMmInszA}&XMcv%>E9TutHc(s$0}m4Voc~*Jt%alGa%CO1p0GCMnadi_B*`khvR z!qnsa5}iM88l`^zF6Jk-=vw&VU?;WxmHw2E+Z3g8o(mm7IAc)tY)JUo;Zy_;$>9EC zSF7eHKYugApPea}mrX-+pN)qqFj&HZY?RCdh?XdN9EU<1Y zfmUo0Jh&Ci&$OO>4CvJ97eIMiH{j#J2x*Ir)I>)X1v2iMR}nF(@BmF z8n3m(ufGy8Dp01<8j%W_9Z~g)WM|pwxpIHL`z$#(7Kkc;c|dk_tC%(TCWQq!$gg@SF@5kduy1(2eZtB3s#3)5 zP>tj=B`AJwj&^L!kw18YWs52tH}rK)Nzab_s=49+9WzDvj>X1 zWpidWB^*bV2+6WJe(aIscdvYBtnJJsM^DSQesCR4XVGQ&&dobX`mR45Q=)%)I5xD_ z^(cCXtlCAW-c)L6A8*?CG~?Bt@4#TxnSSO+^QM6WT+ttMb9P~I;pET0Z0vl_giYCB zO?JNi`)2hKYy7e60rG#e`)1Gb-)l2zrA0x(aBGrD^}~0VZr)&@jv(?1{k&v_U3Hn%o>Lc z6MqYh&IGK>@H@{y#{4glMwge-c55@SYh8jg_$R=w-ltD|XMzf-1mUoS6Js^wbvXZB z(?@SBhpmRenU@16cJo;@>JuB)cB$s@?o-v>Cp()5Ys*Ov{+}+cDO`kD&YXsSwtFV{ zyY-14{oYis+bgKZaA5X5efO-dkS+!$j27>)oT8} zq>SB#yv0u&6lL3$I`-fQujz-9Ps2V)K`j-B()#&!ygDX~3 z>?c{azzg*Zi4o35|H@2>k6i)#Yh`wOv7TI88~loc?`oTeuH{t+bLvf9{T}S`lnL$D z?&M0&Ix3ip4B<;?6ow7`sN^3EC!Ddbpv;w6>${OOtM4-jKKcy&Im{~&UAMBG$IEi& zDlmX?NF%lUtomhtj-B?EbhY~#?^w_+ci{S`Rp7-V!3pk$u9?0Ye=Z zZKr8}hE{&wh%TKZ@%t`X@oyb^j=C!%##z6W--tODXJ9n@WY*Ceyfb#qc0OOG_1(%@ z>&D~G)cNK(zIHjwGT1FrpOvZ8hgpz2JrtHjm{r8#o4E|EB;3P0c6lE~G2hscuqk|o zFD7}qF%a42FHxSWO9j@(L26T2g}}w-FqaOSdawBHhbf2Et3TDJ|Gv|w{Zfm4XA)R4 z7&|6mH;BAlYW=dFpch?h(V($EBotW7F{rej%}c`au5Ku6=;to1Ab3A@L(H?Y<$8NJ zC<$%rc=_#Tct{eW@SiolKmQ{Zl`*%=UtBLVn1G`_)R(=|yZTRXtdNFr1zc;fZI#kHU7{)% z|3o+kCrB4ORQHUrp`}fm8~T9xmc{{C9sbehz)K z<3&wA5Jn}uvrxdAUrwYs%lL?Acf2*Vo4EDak4l5>`#}hnKVfDC%!tnmB~ts60X2G7 zOYnqIG&+l;g3{$QNc3C4f#=aCPD<_q_FxTmxA&=LyU$1~PSt?3v<$tlq{}u>wPPQ% z=XH~^K2u@_&(z>M=y)vcoQpm-OVai_=>stfzNriN} zl)#I{_#K7_`GBNDGSq8cukG21hszKDcOO}%c=o3I*UonZr4yVAM1ns3@yZjmt1Evs zP(J5AuGX^Vr%076wAXT_1tk%;e6aV&Zf<`6VdQ{h2Ssy*W2<`+b4$`#y|JfGvV2HWO<-78A=Huozww_iT z5+G5`(Fv|a$UhSELp>DnLOrbd1N7t(p11#DJ9qo@RpV(_Vsp6t7N6Mf&jQWOe&wBx zTa*sWNi9TldeHosKpQYU;L@e`idqg` z5f}6kP1K()av4vTcY3X@HMjMb=c@+Tv01^Ry54b9 z&AH`=7&o4AjJE$AtKdIM%Hu2h{Y5|w^iovesQ^FoYaT^s!fAraUVhhh+qvMQfO%)E zYo9W^4|mUgxK31^^|U@SH+U2(l=lWE4rbSg?$rC6$IrUEBl)O%^)igO5OzAf@%*9! zgJ!5~FHgYyvNK?eyc^3u%&%cMrdxSoFOy$FI#y|6S|x4#4#yt@(|h`9p51ixxT*8q zmc%gUs8n1YhF0{SErd?HgDYXrPiE@$OQYdszYR#Tt2YXRUjIU$_kgD{3B763(1W1m8@=o~du@j90c_WVN$>4i?|i(UAB>F)p4q z-N%v_Q002GHWYi4;3ss$dEu&ipcQa+z znT8__jd($W%U|Q-L6;jPCm(`sXBOf(DtIQ$gIhC2Jng849B9zsQWFIF2u4XrUjAil ze(TomM*;;IlMx(RbBwt(EMj#P7o#EMFX@hWfL4f;?K@(N%;ztR(bbUHKyJ`Xv#%?U z(Q2Qa0naZ@BcTk4+xJwqwWh5Kew~u1kMSg(710Z!fyrFY?alcmTU_KIyO!tn^3IMvFAt}F|w+t|d4ReQe-)keX2A5e;2gb9u z7nuuu{2kTyBXv{rmDYW0y^7qr==0FafXoDJ3?uYHZS6t?ul`I*nK+vgv0{XpfDP@0 z8dO}|GQp)&^L)4BwFL6-D4@I-~Faf2_$8vwmjGM(fWoB~Ue=Kgri+!xr@ z*GJdPv>;t*3%v3OXQOy=YJmLF%An~C_8@uR4K$)`jUf=gq#RUp#LKHaZ$z0#nw3EW zutR6SD4C5?M9kM1Jth)Pss)CT&RX;VtKQv1!}oZhq6rRA93q?ur5!3nU)`Z2hR;y!+-zNCu<`?F6H`A^7oP z?n@DWT#6^4F!v69Y7*E2)_SdFSCr97$w7MyWYaqiaYV$b7UD%kW?0DD^efYXuVe6~ zX?M)k2S9kwc)UQt1Uq^HBt)g^Swf%pcVHc=A`c7|KytJ5oxuvzAq+pfz%TMH2JLa@ zy}F_Z(g1{XlG)9l^?QNw#0$3Rrgqis6K4L-yXzBpWavY20Wk#GY!>H7fjIL)##Gpx z)ORV{u3Gp58CK=b>5l#6EqLfPo3D18hwP=UraDJV1ZZYnU>d?POwz8dn&)pS_S?gS z?t`&g$T(z9HtcA9sT>boKK7P7cz~(zaM_l#SKjMTfex93C?e10C4h+(`wpi9V|MB51y^KZ2 zbprUIem|*kk)K;zCC-L?c4r(65(a2A93yE=;1~fHtLcBX_w)=*-_lg0A(i2w&Ph6r zOsgglDiM(bC{fF_!uk4KrcjA*MVqmMZ=9|>`YP)QR_2wt+5O=M>aZZbB7n(IHomw1 zZ#**ei7d=|p4D8h{{2~?f8%g!&>kCyaD@I<3@K1dsskIs>8t$DT#N}(l4Z4VfTPkc z{V6QQXTF!m8%A{1L6Y5y+k58+%O@kpk@o{93=IOKoS7K$sa6G*VZMWJm1TzwG z^G5i)HEE*Gaf?+?oOt?{;QeM1gWiCZ{&WN5OFLSo7F0t4@t>snuhWiQONY>5IpQhU z3dikR7-pUDJGQwa!#O9nY8)O7tOlj)q*o-$0p-tX*$K=2644V(jX`h%JqUFz<`Q^h z2Vv4Pt(?D|K!fjq%$xw==!iJhg~Jjfp$EFGrX(m9jJo!LE;!fErfm(snpv>34Lh<6 zp_ejQ5I;Tr=POP^phun^daP6yC_>^v>r$!5 ze#7C}W(5!dtWaH0Hm|jU3$aZhhRgot$rk@f+b8r*t%O?SipsP3&DA;@FmoQ;pfC6H zhxZQUb3ax!!6Q)tPmM#k>?f6wS1EKX8o4#@QhLFecLB#B`S%|nFNt8)x#)|n9JAsc zo+Te*#NY91z+CQTHHWkALojfKo*$AA$gdy&` zYa({Uj|a2mRnp*ZH-e6Nl7+6(FQ|twD!wjn?lfvn*TWPNCCO&N$Tql9{^^P4-1H}p z1MY{&1DXRXNoj^Sq5ag*_+$DG&Sf*2kDw!)kfZK9pY2J@Uv#*d>S*WnDH`oW%74B1 zO*Tx8CwGIy4}}DNRspka5|U;2)NC{1J@czz_z?i+BZAE~FTWP!#IZ9~6?R11WN?P! zjn<{?;qt8Syz_1Qr#UTjb1hJmT1d@17RH3jaIi+6%3V-wSeWIZ)V}%a!o|O$>wowI*SCIw&zG^!bL97covpB7;xG z2md^Ec|a(6-qCwo)o^_hfAY`0APAj~=Wff`vLjWnPsCK=>t2s4f2w$6nX5&iykkEE zSl0`FcAS0u<$WJ%=nI(U)hc&zrsIp^vM+7ZpAc4IZOkq_jEn*0L@sXRCw(XiQgr8z zu5A~^dckP7e9~GNWJWG;+OA}Nf0A6lFWS$0xCigh{1?@HMutC&E_!F2ot=04V!u?E zb|^G_gTCLZj=MZE<)C^Z<@%HV#o1ZV-WhS_Sor;A;Q|Sg^DAP?L>MKqEz%=meoRzB zEy~E=-&fK)#s>x+_OrC5kB?l1OPymJUA5m`ot$0D5V3{<<{uSTH=q1A9?F-GAMA|8 zBdGM(=Y1&TWca2Sd%X6MI6)CLAZlqTKBFfFqwQ?Ye=Wy%ju+owmH)deCAshRByWmP zdHGwg(hyxg;XGC4tK1gvU{)!iTcuy5q2dt43+PO?i02^M^4S{Jy*(G1=Vhnz^YxpY!ZDR{ft9OxZz7Go9t^BRBgxE; zG%tobG6C1Lg5i=GAkKIqS^0~=RSxrhkIdXMh#{C+EyLoxZ7%3)$8N6Wm5`l!faK>F zmV0xpc4#M6$G3cQHvh!6^(5_spXFDh9Kfsn`_-;xhcbZW%)2n708;_Kr{3oO6#&6c zv2YGm^?TLWkB25ChP1EM)OeFFm(!^aucjy3*6?a`OCaM!=hy2}uDgxvv>b?i+9*Og zGpV#wP$Vh}yWV|SLH6)9-F~{6U%%6zy2m?*K+hIBAVX3tri|!4fTI$8kvb86=!k)A z7?rxa7}5D+sq#`6R+y&0#=!m+A9OqfNTQXPzD?%CNJzrDcmqDDMH6*~ON=YXs8H7| zzqtiO$mEql`=y@e-OX7RchEsR^A>c7M`gmqGtsj7Vl9gx_^AD2$Q5g-N$>^&wTSuo zhIDaaF>C(XjEa5@u{cJJF$ufjy+n@_g-dk3CJN_N%fa-?!)aLzx#()ctd6&r} z&7kg^0PBQI>WLI=PSAC0z|EFS<=r+uVl;lI`*7|7u2gMJ% zNralS{G?x#>|a79lca7NUY##Sd)Bx)n0mYcrS9s`#NfjD2f4$O4&uQ$#CU2tPTf=} zERysBEUsY~;!-n;s4N_ul3*?wWNSb4?yc85iKw`qn;~NH;z_F268Co9mnUFsV48I# zk~Z*It7}VvCO8jGFbjF&Q{d~y>xPJLXY$*ZgVz@ODKDsTzp9ZL7K0+3#vnZLR~+8K zZIk<)$;YVbwz$2(XM{=K=X>Y!Yh(HOD)YHbKsf36N zU=BkU&;xFI_X?+8rrQykAD7rT02wB7(& z$@CviVuMOUzKn2oAQ-xC6TyuGKY zDEL+-6)O2R2`3EHiBMqxnJ_wydALnlU3IRi6xNcax+^G^!Qn;tYdWdiIJ&}B9dg+) zOky?aq)B{G;VI796X$O%jE_ zmSn$=?DR1*Ras{Y5e`WCeGjL{l3|klgbD@kuTi&`lrG#^|IQ_XXkjnvpjD68F5Qww zN&o1huO}TPW(3E!4qRP}iJix}sk|otc|VwcUo7bYjtH1BMt?l57b#Me73OL2MFPDg07I)#QoTN^O?6KeP-w6NIDAefl}$K zO0P*+fB{zWFUrHi9oOJLWiA@D+0u6novhz#7#zlF*jd$aiavHQfHR5#^qiy?$&06# z4Q;wvOEsx- ziULbcUaEp3u&T$15eI3gN(|(4rLK^Yy&mP%sN`3EOLy~E(MQ$MJc;lD7?#Cr-K)E6 zxnVFZ*ZX$MOD1~T&|*eM7dAM2I_>y{$;4w3Nvf<<(8rSl?;^8X``f_xPB!|15y-}c zuXqi|xB!C8z`{Wmo-?fUrP;{@8O7z82VK}6nctn5uSwkIh_4i4#xmqaOv+j zludtW5jFy?ETKceXT&xyoSF5Hb7nJ-V2CAq<;ao3BjuQd&7PhnIE{%Akl8k5tg5|C z|8vy}#e_XDSClQ87T@SlaLx2;@9x%BHK+}*_p0vmI$9S(h=RO9E4ndBg)v{n`ybGy zWERqQvK}T2jY2e+LK39#v$AkbKYmNu8e0l>m@@CbR`J*J*DWkK zKwPwl5p&=RjjxZ&(JQy9s%)g@DyaUUB=)^b13u63N4uKcE@{I&`QdiJDZ)Qp%;*;bNM1p`?8_Iy79 z{t7;|sPmMhSAL$53tU=dQI^bmq4?`kmo!ffROnv3^dF z@#^A&rud%FmdDD;QmP+`^ zB|0?wg6F2p#2bc}VH2>3b6fx}NJys9g&9vORm+Aoe6t+L2QBk;h-0r%)FK7Cv4Oos zms&yNR|nxpn}n3KpO2LJXW_LU`mmmW8nPwv5(F`r*ck#8WCRPiZRZM3m+9_=1uNF) zkfKs1mN7gP+495bnT2djv3$BPFy*Q~;|=|{ueS6Z!k95vG)1>DjffC;esg}^A0?BS zQsi1e#&u3OQZn0Dtbz~yt7s`nA%#8pSwN6g)ZRYgn*K}Rp8q`m{LQZK4#s6zKPQ2tJ_DiaxHEP5{h@qAeuT>0Z^(AIOMTi;)!gvO?JT-tYBe^mwP(Y6HwK zN7J?K<*^`kWp0Xz-9WhfD0Cu4L-N&6#0wK;C1k?a=1ywIOzdvcpuMUa`?Y&)p4*>>I|~9} zaU@CS#OBqvZ~#Nt9^o$%wP(o!uC|$_N|3Ez2Ih~er&MZxX<$jq$b@ZQSRD?e*yQBo ztX1~WmQCRD^$LEEq2DKrUc#YJF8Iz``$2d*$A(NVO4Qr&!;G5SXvRY6Ih|bMC0^fM zMp4wQe9<|Z5A!a?+wwQ-*LimrbgDsU+GS*=pj(1h!{9{E;WrvgY<)|k@0e$x;aBc7)1r-SHf^BqBu6&v38qj5@N1u6zF3Z#K)sm4m z1~-8{Spic&0;l!vj0SsROty`pUnY#KK= zmkT*Wlo@=f<6?uOdMSh+-*#|v@x1_RL;Ah}D2P+vFz6Jkz4=3xmLzBU=7o7%z^fb2 zek?^I3vGRN6`(?6JF65i#h-fDFY_rBNKR!!6yaMMp&-_nlY?yT)?@ASefhmtl3Ib= zW!kgBT8by(DvTlN3aGgK2eNvB-LZQZ2NJ=z7wbc=!B@u37iPX}c@(N4;-q5-2*YI9 zo0ocq(v1MO*WF-xNN-1zf}L*aLf-909<|9c-eh_xEQ?gSKu$U0p=3aVq$3_KahM7p z1WLx*%URdZ=JGJlU`H-pDw!53XKSps- zNJLUxH}c|X8yfhZHX|64_WoE@%7I9s0Qf^1uUNU^6bY4Ky|6_ODBou!3?7wAAxnje zlYB`*Le_wevaa4Vba;rrpwkaQ(&7FPB&KUO1;(#55DL>X(&}dD(dmkP*~k6x?PWVY$ymS*)^@ zY?RJg&NANVoBE11^La$Oe>af7*=f3_|C24xtY|uPiZ%Ox$~T;7yOPnuNkW zz0uSb7Ee7f!`Qff-F`jLUK5As`;;_&1S6R_8e$?yNj9l?quC5s`7w0pAyquqS5&0* z?7OrarZzdFyErPvoSjYajj#nN&?C{LuNtA^WYw@zD&^b6@q(IZ7u&K);gkTRcylm7 zWs7Xt+AU^E=ycv6NI2Bf0mm_fjLHhwP(>LX=caF->;Qo`kGfh=+Ew^;Q|jgnD-#ji zkJ}{&iGi_lk3)u2kD#CmdMZv|ZTYryeBW^KB2MtH?ndZal;^FMyCu^k-Z$y#rt=_4xY6C^d3xe_jPco^PMj0+TohKQ!K)7f4+)9{nvyI;HXMtWChP!@aW4eZ}lU zVDsI!A?>m}nl5NE0w>jHDd7j8;CU(2^@c|9r{EfQ#0GllFra_mH)Z29oj4$=3Oi|k zrI4cP*%?GX?R;G>F(0-kg-6l>UA4iB^sc2(6#S4U-UOIzyzQmG8eJM!(?l;~552x5 z`6Z67zOo6w?(DkDuNWJ-*GzaJ<2XN@X$?{mEiLjjBOtSbpZpVBm>U;*v9!FPd6O|j zjGJ%>QS$e`LZxS^us9-y)CfqoB0~g0EiTZ*CG`WKD6dqi|5ke@@sh-L;Doi^t&-ne zIhD?M5<;@C1{J57suPf{4J#-+PyS7oN+UiDV>?OgBo&ov*<-R>%|UNM=y@AZgC369u!P{}nT zF616BKg1)zGE6zjTq%8ujLw38fIPDbgA&Gbr7)#sS_@11?#_tf$S@=mL;-pTeE7e? z6=Bl&ht^%J$8tHi?giIwfwsj|GbZ#>cHi6*uOJ5>ZeQlvRJY?j{{kibhnuwX(08D%DKQ69dT)M_y0P9H2a;rc&TU5C5`! zsn1O^{VsxbSZF$s9xYZCU8UB3RnA6oi@$(scgqvd^tt1Fq_GLt>^>$HNqiEU9dH~Awjqv7Wd&msV`%9IUHb?N+{yxx$c zd3!FN#cG9eegF93vgDUGeJ~a=Xa}f#{iuLGrhakLPB57|;j0CNs)%`2#(Ou`N2Izvo`PYg zBFo}zd?+d`0lvaQs2kQSX`Cu)!|p9OE$TV3R%lHk4ZcX^6=b6-_9}iW{zV~x=1}%V zI=56ym+p+dGE6#d_xXdU)kXz2B$Vq#`h>@4|J)JBD7J$^iybQsD}{R|`dv5z+omV# zAhIMQotxSJOfc`D=!BP)Cd(#?$sJ@F;~%qWGb$fTAY<2k((w8vEF$ic6&%Zjho(|? zIt1VzuI0wcB82ZtzN*w-bS%%;UZXyfB*ZF{MlEHPNg4Q-t*r3DPg=+=_J@4&M%Uyl z?sdf-sz*ypRJ{fYALUHT&=E`=!W#OQ0s{_QBxWcOfk|pb=Hsu%Kct{YsmN!YfO;jH|M1%N3yQKtkGkYO`vl8z>h@R0Ec@6AtU zD)U$z4-I;$iP@f_qV|g9M3rOIQIr2yj3@gfRV1~2k_2M)kN>r8((mbjQLfT%3DxHwfMa^Q(%`A9heT&l*h;WwnAfRBXTWW~c!P`5Mr z6GI4cB*vaNuPbql+C-H(P)<)K$fm^9*WkNt2ZFThnE&IrBF{2aR|DiCG?O?NR^%`L zUKFj6STtmH|BRWhv<&z-%PsN6c3G8>ErP(qDtz0`zNaX{Ni&31nqDS#ibO-)(mD*i z?fhz;kw>xZZy@eCP+|pOvJ-t-{GoL?C)1i@RECTbRlV90rmbS|q})NQ|HB}xIoYo= zZrfd(hBJqyjwk&03Mm%IIn=bpPiweM*}`1ur(QHtPWWSobIhOEQ7b|qZ!*}5WFi&h zG-F|6kjxf*Y9DMjYYKTy#LTLz1Rb?(pviN`myfx$&d7nXPFZPXkQ%Al8KDmwq5YQ) zmZ|6TXFQA2r!t+{#@#UMdqwv715goqngd9X4ShGgzofP2I$>%oNG>pz0se|UB62Al z1=H4ry&xjnw99yvh$|=W@nBu0*Z}hO=ffJzDR;WY60t>$%;y^=s(%A|{e9(B&l}@g z3_zS=xoExFM)v(!I@BS zWyXVfwimE2<}kGBj$SoZoY1-uH79(icI>70_w=#ZBl*?%NAjs!c|Tpov;7wBL%cd8 zQ2tdT-A6Hdm5Pf*&DI}0lOMJ8c}I}G8nSIPE58(&pZAoE=lHj>T@Wn zrt4Sf;9d54+8(Q+N*6N-d{)mNlVNf<+I&n>I_Qs zMD+Bpxcy_~`C7ZLVpgSty1BH15*}KXbE{}dviP6`yRoL4;R@!3&ZoPM>D}kql0^Qx zI%p3O8i_#D%N$Nn=8Cex-A+d#QkXvk=_eI~e@GGzrso)^TSr}ZNcc~$c;25d${C12 zB0vxLU{^{Y&`(B=v`w^NTMxF2PS%+rA8J*AoKI;9|mz93kbv( zAiVtRZ{UO1Qa*ty^00)E*I*GTiu~7LoI8iV{_++JjPI>Oy*c+g?l>k`bir0o*0%s} zp$y7Y{($lndK-YMh8`G~LG$@8Q&bL-l(ko6!Xz?qCLm;VzVrgXhOmQUlf3171*Gvj z;|*o2?$DeZ)HPI7+po^M8T@^xMXK&h7dh~H zi+XtcgwK}DA2;)EXa06*7z08jaj}x(Z2iF`QAB+8a;HzzFw(Y)-Fe4+4MAvz+R&@C9B(uG9||C(~&`oll@7c#In zfXt_H+?9jFOFfCkEH1LJFcnuABaL^||bCx+rj7;OW#Q{y5({49pha&L2n~NG6YRoKED+ebY}p z$%8i6Zp3=q!@|q)rsJ*0_a=-L8?DM4{{G}PD(L&u4TW*SQr6ioQVzntsN}t1i;Bm+ zs0_kp-}(?uTlGDODm#3m8DG`3suvr4j@Ed3lVKA$z$!CtcI1|(>wQfA+|=?n>BZ$l zyNju1Roe`P?ZwSr@H{a+N%<(D5!vgL*Hdmu)fKqd^!YCGi+mi3Wza~{NSL>t@GT}< z$6I6g0R+bKu~l(>{o|~}QJy_xlqEuex&BEq2C)2WMjwS!+b7ypzB<4;JR)(Htrwi# zHxrD6So_(UaD%aN_(<>v?5tGNI4f69mg2dm<=?tR8&T_|!p@|5+pZ4>(!h-+rP7(5 zdBV#WgyKKApF%2S{+euAH>^2T<;KAiIw!Aciq`LCQW1#P^)K@qy;=2e#342RSET?A zlU`vD!><<7IoEFdJq@&n)_)p3OH3&uFcUTXSrtvp(;7`0+!p0`ztjMYDwR8BeiJKv z>;LY7Mqdib32su5ME~2Z_FG3OK@_;$s$sJ&zI{N@-9NK9o(?xbav%vYBY4?(pF|Lk z=<6bsGAWfGr|9m%ibV*h=~LTw_skTr_V344hBUHDO|O{5B;h~)Vnm8Fk=}Ug7T9$l z<)AoYL67)NWEcKC=wiTp+DABgkO%kh&-|^=ER!8Q6MnKce-G;~x4{RigUqUdxEr2% zU$eLaRi~R(gf_(gL9nazKe(|nij1u6cS(-|4wi|*H3QliONaU2P5d{C(w(X>d{cX- zcw^8a3o%2fln@Hx_p8n=;=QAX?$OezL1{9H4b@)O=kbR(6;mGr)pR!9p4nbIt*P&JR<=r_Tl zxDs-b76;->BC7ne5mVrK0}qS|XsW?H)A$W?YaDVHG1K=w_km4-+VO zpn*!N_3KjL<xYy1;*j=g&m>+~J*q1erVm6*1?c%PK$SyM zkxBuCs~`vD>ItuITI!qk5uH&W;zNHlhqM)KG$D)9_`OgR_297UZ4XRJ2w$&v{8S4I zCs{8NMvutF2DNMyXO$Zd9cj9Bov=y_mngm4IOa{}W|dhAYZ%;(^HF^Lu=0kYKEvMj zSSeZhtNF!u15TniVp0>W*nd1BHQGZc<>UsiO_6Yi!vhlaCQN=Qs&P8mD8`;iv)eo~ z?b>15Wsyfcl)X{jPC84zS@qVvP8#7w2Y%>$IC^$9zRp9Zgc(F+{xh~@az>%Qzj3uE zx2Y>N=%uy7ZQiCN!13JG>-LxSt`|!0F|Q}l-;h+8xK=myQ1xKvk8}U^n(($LB`OK z=8;K0Sb5YeOOLtjsp`*%T{mR1iTO~|w}0(|MMk0lMG{(}+Rr)J zp`Dg%lnDo&r3fV?g99&ao;;3Bn3mLoQY8~3Uk}Wf-+g~cvJ%AfLC4bSBU<3^(jCMW zxy71dPEfiPQhPW7OcJ6QRnp(MXk~x#a7p&2kyrA`)xfKVcpQ9Yw%T@~AIzuP#3I zp|Fl+(H;VofRMoY>(3N7^k`_YqMybEqn72nhKbSHLtVNG?w(;QQW@DGm+d4YJ*6N` zotPfmkRpOu;CKJt1(`5b0p=$igEd4icuTU8lRw0xwJh-|LXip?AI)v@CkLn__w_zk&qIP*)8^$WFgmf&xr^p4l zj(_RKdNo%_7hmf0kMn!Z2{HpifQ>8ZYrmx}kaRSg98PLcFedKZ%D}5r)52Tf2N%j0 zczb~mP2KlU*mr#5Yc!#*Lh?HXQ^v~4gBDvebV;E(h2AZ}PrBaX9q*vKLhGV$`<3Yy z`7(95rFH|X;?a!>IxM6PM=$`Bf!?#Gc^$WS+%1|0L0Sd0XwGpWeOhXw`^39sxKkqP zdgkIVc`10577U4%4xp?M{Gw%>Z>D9_(Af6xb;WE4y>)M~0G zAvj!>WmwC^3Lb?2FdxfAF-(ZKDEX5Mto7iNGIOItMq~CVy)z zRj75#lfHE$()Tr8W>w#0LIR@j9ssMH=i73U%H0WlnH|`Y)0WF|me{3D=HSa0x2xv2 zMNcCvXbkvL$6up$CeqMDC_3Zr!V2%8QiEgnZH4B7nh9rl;fk=oyMIC3Iq{X}$hsg{ z3DhZgf6qREOsyXgDItRzTv}`*sP?v~S0BrS&7b!^nUOsebpLsupTVrC88!|srm7xN z3X4$VtxeLBUv}8}`wxbHjgSJhtfm=nuA~dKsJaZ{b0u#pX-l&{PNogm=!$auUe2*d zEv;g%=~&T>61H0MUgYgq6k@{q8x*uT&XxsP4C4Bzy~eN{;r_<7tCfj9jANTzxp}=| zZ2O22L6?&7tn**)Z6%ud#iWHcjh`BN+u|54aFD;|G#LVjrjoJFo9hdG9{8qnOXz&> zqjDFYG3%XFpxR7&?1c7)69MCS*&5803@g;U?%}4O6-peUsJloUq_vB7w|AZhvw{aE z8LF31M)z80_^kw2I}MGOVkhcf8mE{3$2S2jB<*)jljLMCW8Dna_Cht*-JFKDs@|wS zT$N9f=@ylNhIAP#(OEaEO`Kp>_8&~>q_R~W_%oYcs%d#=6{CdmKi}3Vy~AX}NR^}Q z>qUIiDkBHsuP4v7_A{y88CeD$7tsB}D=m8b-zoWfjz-Bxlgg6IF71vJTxHiWS3SQv z`)iSO6<@~Z``4?|2fwtWOW>lD%t643L+E>diRx)YST{yjrBXj68V9*$)T^@;y2#*A zA2^LX=(%@El}i5;tkQxWfe)%FiyoHJ)HVEsj?yv-G_<*Y*G6%_2yoUt zP4|f>hB+@_$%a{i;ERlKB{e=LZMb@veAKVVkwuA5(|TdM)F`d>0ec5`brFrT`}DI1 zpqpfvgL?kEi0jdD+@4`pDG1MZ^fxA*rtsXqe$~p0Mr%(S!rXX31=}!(@bwVDhOD8b zOo;ZwM}pY-4V`d>PWjQA$5@R`yx;bPpa0wF4^i;7!Y1|&qyE|Pn8pMJuF58#GO39< zirZwHbK=8o%p--5w5X(vY?^{)(Ruu@GqP48hi0eatTG`^XeHJv6l$5R1y2+kR2x%P z=!__OV&oM|2fkl{QgXC;i4kL6p;)bGN&-9JTtvp_tcoXNu(p>Da<9wT249HBUoHoz z@qJsLGd*v&3Fi**SR|vegz!{ICI!6*Pvz?_MW!X>Y^o@^{mhr&rT>Rvd8`0?3t*dx zyhiCB_Gs|y(isc4t(l<#yZqa@1)==gxTbcGc44v@Rh9nuK``TbbqVD|G6+#G)q#dx zauj$hfeu9ftx#xe`seb$DSffL9rL%R^(Ps5&0Gp56fgo5_oqpt3d;{nCiA6}bnA$K z#c8QVp(IcOBVt+(lbA5!*`9%lRSb6TV+*-A0`3Y+p$^@>+x*D)HZij&nkyGxU;bf4 zVQGL^Pvy?85>-;Ml;e&Y^{R$^`$p#Bo7I<7;F!2@Z~+8rK&xFKO#N^v!4L*UksH7t zPrRn&?d-*1lHIO|VOjrcc2BBBBMR{b|2~+RE97qb(}R}PMbZa(`;!``rE!atL%NBS zX+a4C;4zlsvQ9F|fb*|jmGiV#g%KVqfF1r}L6YQ)*!{(5x?NwXz=D4U zh-Rv^(F6nC?T_p8KB?0*=%w7LJ^57FClxD7p`TA#RI_~qVbM|x9GlEG#F*yP~n8Eb7PYz-_)EBEpt zk>=V5HL2}#wJC}>%3{el#fe{)Mbu30j2aVP!fX-Bf%ar#M!IYtm8M&z*54d|W5V)Z zt@4n)yKt$3uJgOPDmBHi^Mxj)`D}=|#3MW6$V6U$Xci4t}A% zOd$wFm^?utiH~G&7EhU|Dw}HtxhGh9?u6%*K&ehVXR-Wzoeo7@CaO}gm{mn&%FSn1 zhK~*q|Jet@WLhoR&g3T8ckYkq1J`%LbV^~M+V`sauVyeOl-6Dz!ox-~ctbfGhHIl$ zENuOfPUZ1q`py$5J6MTLi+l_-r3#%i#t!NsD!mxiWvK5Yle@SmC+Up%h%}!;K5^hz zzgZmus9q6cq@HPA)j07?C@Ez4wFy{<8E#&W=1P2iBvJ9N9Ai$UHtoDNoa1OZkCuqL zCXQAWflZFrQD{T7nY8HYt}l0^oRy4|cDC4R6W*2Ayq5_fBR+PIY(#UoG@IK0CLxDB z0rELZR&cNM8BPg=*JuX2%g(L%S;asX(BBweEr>t0g<8DBwTYpHqa^z^I~qFOsjSbQ z^@_@dG;~VJkM7o9KD);XN$7TDf*RVC3m9g0Rkpbw69Fz3K`ci65aiWW!?!^?)(SW6 zyj98p%OzZUw3l}DzQ1mX_X32i-Fk!7q8kO<=TJa_o!)~yybI|tWh`J7r5}-XITt%m ze*grzr4@=?K*w#F<0dy~P{#W0UX1)NNxy~`okN~#W&hnQfZ$NoGtdDK6be{gBS^gx zR0Vp_%~(Lhha$jZ!zs(9h`I*%AOGRCSNHU5nw9+qA28S|SkgO^wO!zZg=!(6x26Uj zb3D&N)!8_{BOL~h3Lqeh;m9shnyz=2&_K_&iV>bgEbk0N{SR|6c&A z96mm-TV=Nm%%86#J-=%P*Mwgn-+!S|^S247mo{HEf}xX-?Stg!eNM#hL25KQ_x`&Q zAv4Cl;M%b4jr?OST9n$3wlnaeQVPjFEj` zvXd=DD8z`7LbhZd5|h1D`k|PiC}kO9A~hkplWiHX)W-5(T&h?3QT908Rl-^G*OKoQUb zurR>i_m-@S^ZUchB z-h{I)9Wh03LiXm!2PM>x1378s=39d=_h_3>^r}=bOOMrLSsSjBbBp-P8B(I^MMw_Y z1zuIrVo)KvvQoXat+mzSyM4Wo;wpg@P>_mPNjL*4-PsnlB1rK$Ge7c#`cJpqBIvpX zfS1TD=-JoSU&&ZKYIj}e72AlJg}mK&vxGht#>EWb2Reviny_^W@*ch+Gh91#h|w6n zav9n?S(pRiwe^!H)y?wOEVgtOXq6y#Ow8szC7UpVQ_*_2t@F*On^gJweQ4zGgt9_X zyu@Mq0Z0w9pm#U091W~1jSqN3(9AjEBy@yg9O~s)6Ip*OmMi-Im zqTnTOKlxF~IyKgB7`5gR^-xV97VH96x6slJfM9VJpb4;Qn83u`R-h`-9B>PEAsm_v z0gVX<>|N;e6AVFByR>ZRn@@`-IUq+TCJIBDh34#c#nx3@g|F2rMc^mp-Zc!nP-MBN zwHPbwwL6$qA*Ky6C}FH$LI7>~RMm2PV&c`Uz>gkju=yZ)apo~6Qc=^NwY#i%P-M^q z*v0KlrRBo1IWLL>%K5_|-_n|0Bt3?urhjbL;gcD-(*ccD^fdz;0rAS;IZOZorfn7P zWXc`Mndi05lncGps#din8 N;Ix#dCdx8m0d>{-XzjWFnwcxIsH_$B6LNRgX z$!q^6Xk2;q^)`OS#!dQHS7^ceO(1o07hOkPFbqIC?+!x=oS`YZ#1?>zG2%(LV6uKEUU3yHC4sQ|k+^XXsksDk$U_SLw|7>y$0n&%hv+-2RdFNpV{Sn}F zdvX-FS?3-I_uhE$o7V9}_%be)Wo&Kq-j-X!QD%7}4;8}d@yYY&J_MmgdJ9eZ$ggJ$ zlG7JCyTTlRNJ6Xk|CsY?B6n?n8OMtTfQb`WJ_4_v=i_hoeJa}ZKze6jRN=ZlFIf1* z=ry)f>9J4C>C%P<{)w7G)75^>mFS=oL~~oufbJYMJcuacbVtG=X@DwHSGk?Ti)oka zM78{UGkN)w9~z1JAJ!ek6n6Tr@KppjlNykryt%G%-6HW<>=JnyPhgy_KRKn2ANpr&wLIu=Z4DNQj-l5){U$C|*1?SW{}4+=!E0naV*!`VmK+bq{&J!`36ZM_Ig-AzhpUQ{z_JD@rS}s( z1%_P`mRbAEjQ`_Sb%ux)QPRmp@){6IAUor0iW-y}^&h-Qa3Ny9x~gL+%{nHHsMPo> z&0_S|4+ ze}b+Ik9o{OZV&fobOlsXDoetgMd&=(=6ZUjsg2!dv$w`hJ^$(;zr-QnM|@>aV#@6= zUKq=6HRpaNu=`GzN;r>`BJ_1%a_pc&(lI2HD#*OB{^L^$g|3ALgQZ}n9$Q4#cXaOI z9G^{S27^g|#lT;Bs-q{ht>OKI$$*SKFWCOB->XpTDx^XV7(1k(>e=ZH4tnc7Ufpt7 zDBmg%1R0zd;0P}6D1&a;?U*Z9#Nz2%jcsgLFtr`{D92P(5$K?miHQPK&v9M{mx|;q z?LHXbW|0FDXy>T_D|cXqV}zMlqKa*L&C-Pr&uG4fxgQ{A$MW}aBXsKM#Jkx*VgUeT zMH0Zc30Qmo*=TNMI6Hy_^vs;!NnHd3h{g%Q=EE4ZcBAlN4LJEHPf4T(g5O5b5RSV# z7JOzq?_i9ZyFq(0Eht&@hi;g|!Bn*Q_4SMIp91_9*mfaA0q@14a?6f}bcY&xne}HR zFUSWBLF37J+gzDi!Nf0*c@RN?Hw_%>JA#X-VD=1az+z|0n)Eic0qn<7^Juy2FDH4b z0~a&w8fh936QyySoI(oZV}kL7j({Rj#Xjm-fU~n3vOEpqyA5}E+{SX*BS)~8x_6tfO1 zMur)Cl7;{~y$?BUAvW#$SU1m+=+1)i2?XPlL*00tIgOe~@-bqY-C{qu0O?yN&%jeh zd$XafSnXWmA1DAo(AUrhoDP literal 0 HcmV?d00001 diff --git a/tee.md b/tee.md new file mode 100644 index 0000000..2b70515 --- /dev/null +++ b/tee.md @@ -0,0 +1,42 @@ +# Multiple outputs (tee) + +The `tee` command allows audio & video streams to be sent to more than one place. + +Here's a simple example that sends shows video test source twice (using `autovideosink`) + +``` +# The two windows may overlay on top of each other +gst-launch-1.0 \ + videotestsrc ! tee name=t \ + t. ! queue ! videoconvert ! autovideosink \ + t. ! queue ! videoconvert ! autovideosink +``` + +Here's an example that sends video to both `autovideosink` and a TCP server (`tcpserversink`). +Note how `async=false` is required on both sinks. + +``` +gst-launch-1.0 videotestsrc ! \ + decodebin ! tee name=t \ + t. ! queue ! videoconvert ! autovideosink async=false \ + t. ! queue ! x264enc ! mpegtsmux ! tcpserversink port=7001 host=127.0.0.1 recover-policy=keyframe sync-method=latest-keyframe async=false +``` + +However, as discussed [here](http://gstreamer-devel.966125.n4.nabble.com/tee-won-t-go-in-playing-state-td4680128.html), `async=false` can cause issues. Adding `tune=zerolatency` to the `x264enc` also resolves the issue. + +``` +gst-launch-1.0 videotestsrc ! \ + decodebin ! tee name=t \ + t. ! queue ! videoconvert ! autovideosink \ + t. ! queue ! x264enc tune=zerolatency ! mpegtsmux ! tcpserversink port=7001 host=127.0.0.1 recover-policy=keyframe sync-method=latest-keyframe +``` + +You can also use `tee` in order to do multiple things with inputs. This example combines two audio visualisations: + +``` +gst-launch-1.0 filesrc location=$SRC ! decodebin ! tee name=t ! \ + queue ! audioconvert ! wavescope style=color-lines shade-amount=0x00080402 ! alpha alpha=0.5 ! \ + videomixer name=m background=black ! videoconvert ! vertigotv ! autovideosink \ + t. ! queue ! audioconvert ! spacescope style=color-lines shade-amount=0x00080402 ! alpha alpha=0.5 ! m. \ + t. ! queue ! autoaudiosink +```