From 4726e8226c660bd398feb14d0a5d333661d9ddfa Mon Sep 17 00:00:00 2001 From: Jeremy West Date: Wed, 26 Jun 2013 17:10:41 -0500 Subject: [PATCH] Updated RTMP provider. fixes #8 --- bin-release/VideoJS.swf | Bin 11129 -> 14329 bytes src/VideoJS.as | 26 ++++-- src/com/videojs/VideoJSModel.as | 14 ++- .../videojs/providers/RTMPVideoProvider.as | 81 ++++++++++++------ src/com/videojs/structs/ExternalEventName.as | 1 + 5 files changed, 89 insertions(+), 33 deletions(-) diff --git a/bin-release/VideoJS.swf b/bin-release/VideoJS.swf index 1f7e989573b5890f3c22375e8e4be7feb5282390..d15fbc3f141003f05a6da2dbae118705e19827c9 100644 GIT binary patch literal 14329 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 literal 11129 zcmV-1wUDC67u8iMCcb`N%b9g-k<&^`IIGQn|<8*No2BCjIsyNOmHGm zyLgUgeDkl*=_FX~5Hh*Y>dAEByXi0^WeqfgbB;!-eCBypDsu4e_NX zIqje~DTa==bOKCRi5w#yMwbJuhT{Lg6g)dm#G9);VZER`C!V7)OdE5Srhv)mE~)Kw_sz9Uq``Z5Ky*$vM2-66Xr860JJk^+eT>-|=OCmZd>V>k|yDb;k+h8CfBf!4>4M{+M#?MU5)q89VSY+f6fu!q8( zSdh*mksn}`&&}7~Hm;mw)wj2nc6x43x_-I>=S6oTVMRvIjAs(63AGKb+6=-(VFI3t zh+;%Dq@RoyqC!`x1U6n$NwoiN?KqtB%BOP~XT0`YmylwJ`mdQpD+wMjG39xFrV$}R zN8a)2lPm7u>_ZuVY;3k}`Fj4=<{0xTh?8pWye;2c3QR(jOTn9b%fIymen-%yAV+j zQ3U#VRRj;fe4{>?V8=l1;C5UH?i1&$`JVRZe@;ti;b4c9J?q z^Any(adePn-gh%k>JzRWZ75&~IKVCUcEBQLd?$oNSvK2Yu4hlvtTy+*-86I5Yq%0z z;OO##k-8LH4US?9L*^4}e&foh*v*ixkPrDuU#c$??y0(OW+{W6)XaaTi9t;$%rXDJ z#B~n}V2j39;y$%clP^o$h<+Zt*ylYnW6yLCYC2)_f`3xDPrfbb0us``22&xj7TBz< z{nyrS@!v%TcJHhfOx3tWtULzOug%OgKY9N_Z}4BgD}HXj^U^No>3*jZNWxsxtJd0X zN643J_9u|+)Xx^T&br6;f!jQK1do~Djn^DKa^j)JyWq(6w_HS@9Q+STGOO|I=CIx@ z%A&2nwBx`y(bMfEPER+q6K~#Oq{%DS(}MZ2-I~{jN8o8;9n&n zDL{}~)Cz6-!*}R|6SJt=Yb=pj`I=$09BWn6QxnB$rAhU zhgBLk0LZ7(`)O|rpFkcPdY|cK@XKR-w9ZWJ5rMx{+LrsT0CloM%CxyS8^_(M;$69+ zVoBqh1kdOaNm)ChHrV&65d=$duY)oTW9=A}T|^HhcUrq2@~;AO1{9j{%4C-)V%z}?d#is#o+*6;uTacd_9CZR%RjaXZw&;a9IZATFN zjT7hf5lHiLsV~HFs4g(=vZ7cN07bgPdgsS%H@Nx(oi8s}y)%DA>U0y}8E*}%Tcvnx z>5HVdMkRZAwS;tID;sX#yp4#|hukzr2IuX!oic`_rV>2mPtA(QI7&6C@hu&QlKjr$ zusEm{s}BA^nC5Tc?>|bc*rKh4OsPswQLG%IEfqq9P6wj#Kwn1Uxk27ticlE#G{&(v z-6=c%^Ez1%Gn_(w6(iU3XF*Ds{*aP{W6e7)j5N;k&|0e@kI^qlCqzl5On9>O?>u=+ zuooTF)9Rq2}6nz4vk2o^9`8ILQ5iY zm@(-w-$WifGH)FSfG4)7fN>nmHP!RYv8044PNmoP{MrNCYC?a+)T5<)-_g3lQh96l zDs?O-q6hpe{>l>{F?0usblnty5`-K8iBN30l1tEhunP}syN(2IEQaSAZ?g`}_L+Y{-3Zcu7|1UlQ#9|f>7zN(a?_Iu|*3RS4pnMiQM`qtgs8z#*lGu1s&XuonQ9mdv|}x+mWb zKP>nn2hN(f$SWnRwyMe zeIgtg&$lU{L+u$0G`$@GFh^!K9OxVq_rj+&+RlJVOm#cR5^y9C?9^%fhSO{TRiwNW z{AIrovPj~2e-Nk_HkaVRr+;gs$A*I`I-u702b=uNFaMk#yTYBdA%luc*Gsoyh~G{I z=oXaw=Z-0(dnaJyIYnSy&+jMZbW>G-EsyaaZ+_NgQHEb0GxjOuf znfKqjTS~yd9cXM{5Myj68OTBO#vP>-8{O&- zS!HqDoa7h;hy+uLVHMtcmP^dVIb}BTnc2^k0=7rIE%FcTfsW{itFVh0Y}gUYfBQ`Z zCoqHH=lbo{?Bu}02dx(7zR}6WSbBy*D*9VD#Lftbxi*m$Yk6@_Eq~{q{^s$?4M5}< z?3q3^w)HtQp3X$WME zs{+WLdhoS0Pj+6SnmC}>M(<{0y;JZyz%vkQMrvTgW;~@=ALf3V9?ALvo#(NEU40Md zA^|xQZfgZT8!`}E*ZC}ZLT1H6)M;&ds#WjpEhC0~QJJp^wpF{4kFTE3@vzT~d4DLG zTa$^d{D_=xyI}B>(qEwg2%`<}Z{SG+*J18j{#Fzay^!f&JpSHMgn_w-UObZdSQ@(6 z2oIn>eyq$FsX<`S z_Wu;Ck&D2%Pm4o!M#e4m(`SlHmt5vghvi8?`zw>1DhUP|<3r$QiD_oMAw4){<7O~z zC~bbPd!>^GC%O9GE3Z0lh{fa05H{({{mdW*7$8E!)g)LQDDL*mVar#^5c*IVgQS^> z?Ih~=Ks#39;28fAE6>ABaypn@Qe9K@?pnQ;-}!7Vvu$kBe;vD)a>s0;8T2_ZEkN7j zJwaT2;=b^L4tzw{wJd44)_1v z8p`z(U-ywzv+CNg%-U4Zh?fkgILHibZ zDQ~4rNr&C9OEeG|9Se9q{xKKj^q&Gx;=Xy3>vsiIyfiTM_D1Hc%rZ z1(xuG-X;<00%?c4Vhckj+~~l;JP>QRB(d^W;~)0bRPD9&9tG{W zIDPG72MP@?)%azKM!17I4Ut7UW+LgaxJv#e&Qj0D!@wXPWRz57+sD1m3SQUyv0f3& zxsUKHH!vm!j3;}czkfJ!cca~KWwS48X)@N{mOit)Ea#?sb)LA6vLpi;`^!Q$0Ca5} zSup$5$$os(S$c+;*=+!<1ktN7Ef$s-{Nub463C$z#yx!f4pw0s%B$;sj`&3Jfo4c) z@#ad0<2F;#G3TzaIQ~Vk0dDYSl4;)J9$JH8b3wt)9M7mjuQ)MCyeAAQZa*f7hJ-z$ zacE{*=iOy_*O&QC^7h)>t|CNAhRa+j9R{anvg{kSNJkRqy=kFX{lXz%)&}`SMVije zN`Uo`UClIPoLJV2w}Xt13z6!KF^~kFfXr(eWNO*m4Wj@t6X!|3(4`h z{v$2TUMMT*l*H@bCW+Ot#^+kiTJ`1kJ)gDlP%V<}1D-T~!MuYS3!vJ7>hcOZ(#zd8 zGzlB;rq)7A2r3jgkVHBga}@Zc1#t_@>WsM9F;P`lMgKC7#I)lP3nxQU-%S4k`ljyx zE0dR^%Iu>c#+;VZa!g*=cg|humV=Lm#YqvA=bQcV+PZW0Sj>l^&QjcR^mg4iwsdX( za2l+RZ5@7+B@lO^%ieD_L63o zJkz1hv@_-NhD*2b4honZHMH$$M{d$^VjxFTi>xda`YpXevJo`_UhArf|o=4sJpMBe7)~g zn=>FH`_Kv4ZrRdD#Yzlri=boHru|(UPFk}-hcHuQ&%1+>u?=&Qpv&<>W{Jnjs>NHE z*48M0-x)9Pt-v>tLY|xLD8z4zEW1J6;}tb=!C6bml4Wy0J5a1-aDvkF9}fIS$yCp{jdEldv^TN6O^e)ec)9sS|6?bmOH-GU6XmOA?$+e2qq}*WuR|+_>mO zHb6>CtfXW-qz{i4F%6bxVS@5j9BZ*3m@AV9)Vm-Unx~oZ zAKyCdV3r~Z23VyFZ1|BX`&&;4&*@+z14*$tQ`4WsltV$dFn&ywoVK>s)|c=b#p_7u7!NNpt% z#eKd$LqekK#>-#Me}Kx_XlKtE)9`MZ5U;S;?vbOrEByyIS`sImeDH5L5Lz_?B za4?e@Ies=fVvJL@G~ymbf1hG4&-xb79we}43)TprcjMpQ2g4{VqYk=QrN!?R-^(#( zt9d%{Az-!kH*|jpop%&?|~1a`{Jn0QmBua z(?}>LQ38V~m@Cs&(>(0HzTu9zqXN099*gV_-UhG(iuK%K$^tY4xy0%ar*dTSja&fx zOJ0=PI!^bKbMa4Q#%_2YR}LL1{ep1t3EYJehKAlNv_4(@Oa%`NR2nJ-0$<5bzYy1~hz?@dU|%${3> zbrLZ4^A~)o#e2$!R)X3XOocrC&Ug}tOdS|^ek@Bo%#KvSl~m{}auLSU$TOHhV$KpD z5S~qTsOig*Lv=g+0%`dNE^p-nn=5mDjG*Q|nWgs+QP^|*`WcN^7pkgs&6}82uAn^O z=!CctrMRPiN{f}O#<-*_(AMQi=%NT}M=o?~hL_Zb{LI^9+4$Zj%r|o#nKww>NC$5P z+Ib9BCowPkQBSkJ)RlY8Qytmc^>%#9EL>5MoTB2{5$%?dOS^R02}bW<3^b~jrEb9X z!;V*hYAgQ(qpTd^EE3~7f;YjH#%Y2m3CEpn3(o#={7}>-UT)FydiHAIyO9OM|FNav zW#BgdiLQ1VI<~Cty3970fDK5RJUkZSMPZ{iG=~ZLAFr*Ume?{nUsqsWI2)H}gd&#~ z;nbpRiP2C7h{{BKA0%rs>2mFL-Ib|1KV!{=7Nu*UNyP3G5%dCZR_A!E{bXHvnCY!* zx!v8-Te*SIW6;X=vvR#isd;*vkRjsWKM-4q;36Id!3J(`1PZ**NSj(Ou#ppJCv(_4 z%{5MPHfwWpH5i^VTP|h+Zlx$^3UXQXX_T(6jo}d+43hiIN}GJRoEXoz4q0t`pc8W3>?5{MP73eZqyDQk$o=CB&egulBtHuSj9@2ls?MEO?@G6#% z6_T5sYPl#*P@?3D$Kq#u_!-YUT)cU!QSn1D5OWJ)C@Q7qNT`;mNo{&2EyPVzZ5OeB z1CrINYE4{tHrzrD)!8>otOneTOp@nb@>*1F1N4d;>z-Y6Jy$WB$$W)TQzIS!kL`_p z>}+q5Fp$BJj6cF8a>fn}*9I^}EGFVNK@(!c!9lKGW=M{>yDmo96ay^gfJnn{s8%&k zv8+|jTj6DJ!@NI?>_7K*j zAK|Y$cHQg64NAg>XR0_?9N3804sa*X^x#fm!?8t?rtyoZ<6~%;uY0yvql06kkR}(u zFzw@~;97?pop1jf0i+$Qitm0$()6Syabm(CDAfAsPi#Bl-)odrVC zV2d#cVHcU-+nrtYOPy!idn~BxjsUCz5oP%Tcmg7vJb@|Bp=N^VlxRZ&tbL9muq|8S zjwDh&+Q!hc&YqdXK4=kJ^pq0yPH8qGEj4)=#KUL&EsmfNTBgjtq@1UV8v&^Xo>kT` zm_MqLR-1_OK^z_`LkUNl$D*%>n0C?fGziPU9VAbnO5{GGOz#FreWMKEL{B5BXRxt8 zM{Y7WQMKLU+7m+|(3V6|ZR5^q%QRNP##;K39P(`&2#;eJj;sua1_e{Z(WFy&DVlW) z%4ur+3o8CE^TFok9rAbLnXe3GO=wm?X0uomUHl>ehF~yHS6Xx9g$emHMXufQ&R4i|_7v>$Cj6l$6$(rervKd9@`*}I34=V9x zSbj!J6(dXRxR?B!U zbwhHzZI1|nn>7uT1I}<+aeY|o_4f1+0>(t8jM#SP?CdSH+!Agc)?JYY3e&0ov^KU8 zehcI4adPZuXjPRGQ-_vsx4ap}RF6Fuw;U3#mRRUjlNrYC6S)miqGG_k2jg3!*sGO) zGk`==xr;2<2)x-Y1sp#St}ZE07hncvL;AP4AWfu;+TNfiy;tDswr8n0_`KrIOV*nG zV#H!3!68cJqYSg%&=mk%CZ->3ZzyvHX2x7~-#`SU?J^U*q|52%X6(8`M6gC$tMMi` zgl>knvbE59!RI!0y4L6c{(ExIRqywb7>;al=9K93HMCwnHTuwY$K^&+Sm9p^z8Vaz zxvx4ri7vtw?JLy+@{Khqvsy+K!@xAdp$)CE(Q34aycinjdc$f`8py#Nc`N)jHsKcB zOhB(wN?o8Q!ad8zp_R@RU&IA!@CQ!vL}HP-p5o4K<6!TVV5I&E93HR`A4=j(nq;W- zZ}|8+YAF4&ANp#ebD$zXa zt^8)}C@`Kir+FBn9~C9Iym4+*=Ji%A8`ciIc+f5<;8u{oYYh{7<({+?%t`xiRM}|? zEuVv~H-TZGYi&P59vhB=Tze9iy(jhY&h*w^sT^MM2_@5sF^sWQWLSQDI!IfM#0+J8 z=3L}Fg^~XM^5cpa@p3QEu^6Mg|DM}xvI}+wPIpvK?c;KIER=ss7kpm0CqYpkYfcL- zlW!=R@+^_t*z*?lb2Wf&cz@)HhOO@Eg9v7MXvi@oHf1-cVA#87+QG#ZgY)`HwB zAc&Ce97$ZEGi>OUK73d%Bm01YnD*Jj5<3FCsogk*hIE3#)*1H?AuS8OiE=eAW45s# za_AdmX%@RA+`1nF2OIRROW$V+W5w;{*V9>i3h$5oy5QJZb5?UV^on>v;FO6` zc)wooRhNT2jT>+SKZF=5MfWpXNU3$V8(aTXo7!Ck9=(5x7ph|Fgc%7ovaVqz;>2Wo z$I&0RS?c>d=sWBMeu6b%sJ}8HxQOWnA@5d*S*un9Ip2}A^s!2@Cxy@T$Z;!Cb)K<0=VH?{*^Z~IoSENmvbzbBO#I>3VlpWKet}K5f5PVWJ z+z}(ne5<&?8@WCh98X;NX;PQr^t5YP4Nc&P)jF2_%Npxhu)?KT0qQ#*GrIzM3pAtm zRA8y7Sul{5Fz=M*R9-zqzOeq0IS5)u98TkjoTQG!uVeuz@#{ef^>)P&3FH#oVEY{c z!2Y=0wsnvpD4B}7l}_5At!rl?UJ0psRV}Kd6vkxeA!U7&Z=&{xo?KS;`o)VGUDf(m z6HhvcKiZ2fE~vG|1rS6ej{;mLBmsh;^6Er~(O0NIBw)n1)O-Y$CF1!_k)6fo5B?Jc zpw4sO&tv%T?jXdCq4CNPS%u2=SF>o9vMIMW+!hz=df+k2{^OfCq1g_OG)equ36-Fo zQv)CFvhbCi^uZ?>71I*xrF7x zN_O~M{5uX${)U?_k@z5OxJV zj)U52dnOC|@0q}dj_S0XfB5)%QerYG&xB2A(Nbo*X({z8H+GKH?q3|3I<$M80l)V` z8K^U10$msc6Z--ywsl85cX_|#hl2G>Kl^uC4L?jhMML zy7}=m-0^YFX(u~ok;pxlOLrhPR#z%V8=#di;a&V=V37W}<^*oktP}B}PQxG}9vR5f z6re)w7)X?nwdbaZ>={qwj!AxSS*H*(1n7%4cya6%`KO+qCK3`B`iXuS`<^u4u&1MG z3FsgPp6ZsTUS!UT$ww*0aBf$u{uSffW1|W3N&|8ws+0LZY*SzCi;#vJ(ATZng?{db z|Ik7)rDqX`f@&vvi)Y(@0!Ygkc6rJAH^EL{RtY*^@KVso(n??*R`07mV8xA>i=UQZ z>$|Y0FPJVT$d-za_t|6wkc>{bd-TL(c~(qQcoVaD7|VMxBD5Qypq3|}(Vn&M%SPKC zJpX__r^c@=- zEVE9b%hx2!FbFL7)te$C__7UcQ9TRF7%eMK{M1xA2Izyz6`Gcdp^vv|5h^&U#@%(v zjQ`v^dJ3!T7|MlCd3`+(76vL5hZGG3gYykBP80q$1-}ucD*zNpD7w4D0gKwokUtw$ zBMv)*UHvi3Xw~!@vGui7jK_xURNMmE*H%^rj}6kw^3gNCLy$Y&22ivilTiq5T;2D5 zwMj*-4J=0gme7d2!zM9)$X)8nup?-CzAro7m}ckyxrGOr5FE=V z?(c>^Xdx@0{wVZ>g{ype6-xfp(-gO1hjkrwyKqY)`h=-_#sKjJ!Ljgy?BvczI~uMI z?cj2}kD}637NPPZq|uTC*U{E=qBcYK*PWw9OO?2k7<5i`3n8B?=+cT?nF?2F`7;zx zP*tFQ$EtO9#cvL$9f{tqNrc+~3cGfC44DA$SJb z3Bp($X_P{l{-|*POH0P=_TWt&RT27aoE-wyliR_Yx`wodUB<}L(upZ^YkEc!vb?Xu z0j%p>`m?KXVm*cGb#4Hz4fTd+zjj=gkyAZbt6B^(IgBJtyn_>`EQ)NG78mfOAX41? zx!{3IEn2StgW*M^OHz1Cz(jAog?AA8ICm)l_w^1bOfbql+@l4gNw4i?!KYJF_lJ+G zGKhv0%F0V+)7Z#b1=PD8p*zFZ;Hwi9%8Da`TF?`;xWy)-6r`~)ViN4-gLudpP2^$A zR5Yia&nnx1PqFCY z@D(&+Ux=PIFzf6hFtsdQPuC~d3<{GCL5b0No*YDD(F3jK!0)O$5d21J@0df6Mwm7;3x~zwIG1*8DTM`O= z;=T>zDP-p@xDKzjzm_JV7#;QMojZzRV6#`WajCl)D z{26R)Ky&2VCLVZtG_Y#p=;#8p4fcL(0kIi9!W3zVura^oDd|UCd=X$jtX#~3Omq?s~lOq0}nT`jx=;DxyfW1trezDR2Do$O#C3^Im z954)ZXd0ehxOml(3MO-Yx|emH4TTb93UG@aI$*i6t~(s-RvF~>&1s#|@k)YnAS?qA zhYd80Prqn&_RzN`s(vjY?1yeN4TQ>!10hsN-0@t=H}x+&ZQqWNWm9Nlcomj?dR z@nH+N&-WNnDNcFRp1D52>rwgC(3-et(;~t<5ZSVGyx0>{T@gT@;}<674}pMLRUWR? zd+eO*mK?HJ$sm(ofika4^5_mmhP|0u@UDJuv@YE}sxaRrhWF!H12ChKNsyONDvaO_ zMtC~1f8d6Kh9*%bwE~7%T~q_0M^=4eV)KJ`nAsGbem|A}u%*`ZEKCCj3-1nV%44Ws zkdV|pbVk=mdu}9>G-FvtICfn*B??&W(fKn}KFnHlCx;}XG5Nn>aRZw)g&BRC zM0Jq42N7^R2{HB4hLc{m5|n?MX-;iTxuTOIW+ZCXpQELf{W;e`-17< zg~VrN0(sU-u;(d&2(%yHE<-@%TBp@vENt;cm|TGXqa{^YW+rX^+PQOEHtogL0Vwo# z!DIL3LdLb{yun1^#o@`MBG~3c6UrZ`2CiETkQZf(AKtEfGL}NV=&(OFHV?(j@4nwD zpCmh{k5aBwqKQxI81JdjRYnJaa&SV0^J$w7QE*I_cvmd7^AWH&Yi-d8Co0Rm{nZw* L7g%Ti{G8Krp&qMa diff --git a/src/VideoJS.as b/src/VideoJS.as index 723bff80..6cef897c 100644 --- a/src/VideoJS.as +++ b/src/VideoJS.as @@ -2,12 +2,14 @@ package{ import com.videojs.VideoJSApp; import com.videojs.events.VideoJSEvent; + import com.videojs.structs.ExternalEventName; import com.videojs.structs.ExternalErrorEventName; import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; + import flash.events.MouseEvent; import flash.events.TimerEvent; import flash.external.ExternalInterface; import flash.geom.Rectangle; @@ -120,10 +122,10 @@ package{ _app.model.srcFromFlashvars = String(loaderInfo.parameters.src); } else{ - if(loaderInfo.parameters.RTMPConnection != undefined && loaderInfo.parameters.RTMPConnection != ""){ - _app.model.rtmpConnectionURL = loaderInfo.parameters.RTMPConnection; + if(loaderInfo.parameters.rtmpConnection != undefined && loaderInfo.parameters.rtmpConnection != ""){ + _app.model.rtmpConnectionURL = loaderInfo.parameters.rtmpConnection; } - if(loaderInfo.parameters.RTMPStream != undefined && loaderInfo.parameters.RTMPStream != ""){ + if(loaderInfo.parameters.rtmpStream != undefined && loaderInfo.parameters.rtmpStream != ""){ _app.model.rtmpStream = loaderInfo.parameters.rtmpStream; } } @@ -141,6 +143,7 @@ package{ } private function onAddedToStage(e:Event):void{ + stage.addEventListener(MouseEvent.CLICK, onStageClick); stage.addEventListener(Event.RESIZE, onStageResize); stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; @@ -244,12 +247,17 @@ package{ case "videoHeight": return _app.model.videoHeight; break; + case "rtmpConnection": + return _app.model.rtmpConnectionURL; + break; + case "rtmpStream": + return _app.model.rtmpStream; + break; } return null; } - private function onSetPropertyCalled(pPropertyName:String = "", pValue:* = null):void{ - + private function onSetPropertyCalled(pPropertyName:String = "", pValue:* = null):void{ switch(pPropertyName){ case "mode": _app.model.mode = String(pValue); @@ -288,10 +296,10 @@ package{ case "volume": _app.model.volume = Number(pValue); break; - case "RTMPConnection": + case "rtmpConnection": _app.model.rtmpConnectionURL = String(pValue); break; - case "RTMPStream": + case "rtmpStream": _app.model.rtmpStream = String(pValue); break; default: @@ -331,6 +339,10 @@ package{ private function onUncaughtError(e:Event):void{ e.preventDefault(); } + + private function onStageClick(e:MouseEvent):void{ + _app.model.broadcastEventExternally(ExternalEventName.ON_STAGE_CLICK); + } } } diff --git a/src/com/videojs/VideoJSModel.as b/src/com/videojs/VideoJSModel.as index bb58bffb..d5afcbf8 100644 --- a/src/com/videojs/VideoJSModel.as +++ b/src/com/videojs/VideoJSModel.as @@ -205,9 +205,19 @@ package com.videojs{ public function set rtmpStream(pValue:String):void{ _src = ""; _rtmpStream = pValue; - _currentPlaybackType = PlaybackType.RTMP; broadcastEventExternally(ExternalEventName.ON_SRC_CHANGE, _src); - initProvider(); + if (_provider != null && _currentPlaybackType == PlaybackType.RTMP) { + var __src:Object = { + connectionURL: _rtmpConnectionURL, + streamURL: _rtmpStream + }; + _provider.src = __src; + } + else { + _currentPlaybackType = PlaybackType.RTMP; + initProvider(); + } + if(_autoplay){ play(); } diff --git a/src/com/videojs/providers/RTMPVideoProvider.as b/src/com/videojs/providers/RTMPVideoProvider.as index ed05de42..f02374fc 100644 --- a/src/com/videojs/providers/RTMPVideoProvider.as +++ b/src/com/videojs/providers/RTMPVideoProvider.as @@ -35,6 +35,7 @@ package com.videojs.providers{ private var _src:Object; private var _metadata:Object; + private var _hasDuration:Boolean = false; private var _isPlaying:Boolean = false; private var _isPaused:Boolean = true; private var _isBuffering:Boolean = false; @@ -42,6 +43,7 @@ package com.videojs.providers{ private var _isLive:Boolean = false; private var _canSeekAhead:Boolean = false; private var _hasEnded:Boolean = false; + private var _reportEnded:Boolean = false; private var _canPlayThrough:Boolean = false; private var _loop:Boolean = false; @@ -169,8 +171,7 @@ package com.videojs.providers{ } public function get ended():Boolean{ - - return false; + return _reportEnded; } public function get seeking():Boolean{ @@ -186,6 +187,7 @@ package com.videojs.providers{ } public function set src(pSrc:Object):void{ + _hasDuration = false; if(_isPlaying){ _ns.close(); _loadErrored = false; @@ -232,15 +234,24 @@ package com.videojs.providers{ _metadata = {}; initNetConnection(); } - // if the asset is already loading - else{ + // if the asset is paused + else if(_isPaused && !_reportEnded){ _pausePending = false; _ns.resume(); _isPaused = false; _model.broadcastEventExternally(ExternalEventName.ON_RESUME); - _model.broadcastEventExternally(ExternalEventName.ON_START); _model.broadcastEvent(new VideoPlaybackEvent(VideoPlaybackEvent.ON_STREAM_START, {})); } + // video playback ended, seek to beginning + else if(_hasEnded){ + _ns.seek(0); + _isPlaying = true; + _isPaused = false; + _hasEnded = false; + _reportEnded = false; + _isBuffering = true; + _model.broadcastEventExternally(ExternalEventName.ON_RESUME); + } } public function pause():void{ @@ -252,6 +263,10 @@ package com.videojs.providers{ _pausePending = true; } } + else if(_hasEnded && !_isPaused) { + _isPaused = true; + _model.broadcastEventExternally(ExternalEventName.ON_PAUSE); + } } public function resume():void{ @@ -259,7 +274,6 @@ package com.videojs.providers{ _ns.resume(); _isPaused = false; _model.broadcastEventExternally(ExternalEventName.ON_RESUME); - _model.broadcastEventExternally(ExternalEventName.ON_START); } } @@ -274,7 +288,9 @@ package com.videojs.providers{ _ns.seek(pTime); _isPlaying = true; _hasEnded = false; + _reportEnded = false; _isBuffering = true; + _model.broadcastEventExternally(ExternalEventName.ON_RESUME); } } @@ -301,6 +317,7 @@ package com.videojs.providers{ _ns.close(); _isPlaying = false; _hasEnded = true; + _reportEnded = true; _model.broadcastEvent(new VideoPlaybackEvent(VideoPlaybackEvent.ON_STREAM_CLOSE, {})); _throughputTimer.stop(); _throughputTimer.reset(); @@ -349,6 +366,7 @@ package com.videojs.providers{ _ns.bufferTime = 1; _ns.play(_src.streamURL); _videoReference.attachNetStream(_ns); + _model.broadcastEventExternally(ExternalEventName.ON_LOAD_START); _model.broadcastEvent(new VideoPlaybackEvent(VideoPlaybackEvent.ON_STREAM_READY, {ns:_ns})); } @@ -416,22 +434,23 @@ package com.videojs.providers{ break; case "NetStream.Play.Start": - _metadata = null; _canPlayThrough = false; _hasEnded = false; + _reportEnded = false; _isBuffering = true; _currentThroughput = 0; _loadStartTimestamp = getTimer(); _throughputTimer.reset(); _throughputTimer.start(); - _model.broadcastEventExternally(ExternalEventName.ON_LOAD_START); _model.broadcastEventExternally(ExternalEventName.ON_BUFFER_EMPTY); if(_pauseOnStart && _loadStarted == false){ _ns.pause(); _isPaused = true; } else{ - _model.broadcastEventExternally(ExternalEventName.ON_RESUME); + if (!_isPlaying) { + _model.broadcastEventExternally(ExternalEventName.ON_RESUME); + } _model.broadcastEvent(new VideoPlaybackEvent(VideoPlaybackEvent.ON_STREAM_START, {info:e.info})); } _loadStarted = true; @@ -451,22 +470,29 @@ package com.videojs.providers{ break; case "NetStream.Buffer.Empty": - _isBuffering = true; - _model.broadcastEventExternally(ExternalEventName.ON_BUFFER_EMPTY); + // playback is over + if (_hasEnded) { + if(!_loop){ + _isPlaying = false; + _hasEnded = true; + _reportEnded = true; + _model.broadcastEvent(new VideoPlaybackEvent(VideoPlaybackEvent.ON_STREAM_CLOSE, {info:e.info})); + _model.broadcastEventExternally(ExternalEventName.ON_PLAYBACK_COMPLETE); + } + else{ + _ns.seek(0); + } + } + // other stream buffering + else { + _isBuffering = true; + _model.broadcastEventExternally(ExternalEventName.ON_BUFFER_EMPTY); + } + break; case "NetStream.Play.Stop": - - if(!_loop){ - _isPlaying = false; - _hasEnded = true; - _model.broadcastEvent(new VideoPlaybackEvent(VideoPlaybackEvent.ON_STREAM_CLOSE, {info:e.info})); - _model.broadcastEventExternally(ExternalEventName.ON_PLAYBACK_COMPLETE); - } - else{ - _ns.seek(0); - } - + _hasEnded = true; _throughputTimer.stop(); _throughputTimer.reset(); break; @@ -482,7 +508,7 @@ package com.videojs.providers{ _throughputTimer.reset(); _throughputTimer.start(); - break; + break; case "NetStream.Play.StreamNotFound": _loadErrored = true; @@ -510,7 +536,10 @@ package com.videojs.providers{ if(pMetaData.duration != undefined){ _isLive = false; _canSeekAhead = true; - _model.broadcastEventExternally(ExternalEventName.ON_DURATION_CHANGE, _metadata.duration); + if (!_hasDuration) { + _hasDuration = true; + _model.broadcastEventExternally(ExternalEventName.ON_DURATION_CHANGE, _metadata.duration); + } } else{ _isLive = true; @@ -531,5 +560,9 @@ package com.videojs.providers{ public function onPlayStatus(e:Object):void{ } + + public function onBWDone():void{ + + } } } \ No newline at end of file diff --git a/src/com/videojs/structs/ExternalEventName.as b/src/com/videojs/structs/ExternalEventName.as index 7cbb49ba..abc82b56 100644 --- a/src/com/videojs/structs/ExternalEventName.as +++ b/src/com/videojs/structs/ExternalEventName.as @@ -21,6 +21,7 @@ package com.videojs.structs{ public static const ON_RTMP_CONNECT_SUCCESS:String = "rtmpconnected"; public static const ON_RTMP_RETRY:String = "rtmpretry"; + public static const ON_STAGE_CLICK:String = "stageclick"; } } \ No newline at end of file