From 8ee8af8b2dea8a4422846215d4f21486cbd14fb6 Mon Sep 17 00:00:00 2001 From: XiaoXinPro 14 IAH5R <568170040@qq.com> Date: Thu, 23 Mar 2023 20:33:51 +0800 Subject: [PATCH] upload --- src/assets/icon/icon-background.png | Bin 0 -> 2403 bytes src/assets/icon/icon-earphone.png | Bin 0 -> 1926 bytes src/assets/icon/icon-folder@2x.png | Bin 0 -> 839 bytes src/assets/icon/icon-loginout.png | Bin 0 -> 1777 bytes src/assets/icon/icon-loginoutwhite.png | Bin 0 -> 1071 bytes src/assets/icon/icon-material.png | Bin 0 -> 2687 bytes src/assets/icon/icon-microphone.png | Bin 0 -> 2639 bytes src/assets/icon/icon-pencil.png | Bin 0 -> 952 bytes src/assets/icon/icon-subtitle.png | Bin 0 -> 2864 bytes src/assets/icon/icon-upload@2x.png | Bin 0 -> 461 bytes src/assets/icon/icon-yes.png | Bin 0 -> 1077 bytes src/assets/img/myVideo.png | Bin 0 -> 814 bytes src/assets/web(1).rar | Bin 0 -> 6692 bytes src/assets/web(1)/web/css/client.css | 70 +++ src/assets/web(1)/web/js/client.js | 503 +++++++++++++++++++ src/assets/web(1)/web/user.html | 196 ++++++++ src/components/MyVideoItem.vue | 91 ++++ src/components/common/head.vue | 16 +- src/components/common/tail.vue | 2 +- src/main.js | 2 + src/router/index.js | 18 + src/styles/index.scss | 16 + src/styles/reset.scss | 284 +++++++++++ src/utils/request.js | 5 +- src/views/chat/chat.vue | 100 ++++ src/views/login/login copy.vue | 441 +++++++++++++++++ src/views/login/login.vue | 467 ++++++++++++------ src/views/model/chooseModel copy.vue | 312 ++++++++++++ src/views/model/chooseModel.vue | 89 ++-- src/views/model/editModel.vue | 649 +++++++++++++++++++++++++ src/views/model/previewModel.vue | 98 ++++ src/views/myPage/myPage copy 3.vue | 489 +++++++++++++++++++ src/views/myPage/myPage copy.vue | 520 ++++++++++++++++++++ src/views/myPage/myPage.vue | 163 +++++-- 34 files changed, 4302 insertions(+), 229 deletions(-) create mode 100644 src/assets/icon/icon-background.png create mode 100644 src/assets/icon/icon-earphone.png create mode 100644 src/assets/icon/icon-folder@2x.png create mode 100644 src/assets/icon/icon-loginout.png create mode 100644 src/assets/icon/icon-loginoutwhite.png create mode 100644 src/assets/icon/icon-material.png create mode 100644 src/assets/icon/icon-microphone.png create mode 100644 src/assets/icon/icon-pencil.png create mode 100644 src/assets/icon/icon-subtitle.png create mode 100644 src/assets/icon/icon-upload@2x.png create mode 100644 src/assets/icon/icon-yes.png create mode 100644 src/assets/img/myVideo.png create mode 100644 src/assets/web(1).rar create mode 100644 src/assets/web(1)/web/css/client.css create mode 100644 src/assets/web(1)/web/js/client.js create mode 100644 src/assets/web(1)/web/user.html create mode 100644 src/components/MyVideoItem.vue create mode 100644 src/styles/index.scss create mode 100644 src/styles/reset.scss create mode 100644 src/views/chat/chat.vue create mode 100644 src/views/login/login copy.vue create mode 100644 src/views/model/chooseModel copy.vue create mode 100644 src/views/model/editModel.vue create mode 100644 src/views/model/previewModel.vue create mode 100644 src/views/myPage/myPage copy 3.vue create mode 100644 src/views/myPage/myPage copy.vue diff --git a/src/assets/icon/icon-background.png b/src/assets/icon/icon-background.png new file mode 100644 index 0000000000000000000000000000000000000000..b158692e29e54fcb0547e81b732837987c497ef9 GIT binary patch literal 2403 zcmV-p37qzcP)Px;9Z5t%RA@uJT78UMRTV$yzFD{1g-FSkkp5#LWE1>jP248_K@-0UNK|Ookkx3b zl#eyVAkg4PFvggwAy{q1RJ&`zcA@Pm6cx<|-Nj&*f5>|fkw8MwM2%b1rKQb&PG{~t z=G?D$@0*#O?VHsm%}(CDdGkBJ^ER)L)ha!Q$8W+#2OHgs z2L~hH>fu zjvt|IQpza+>gEg4muj|R<_&|vH49P$vzg-8vXBuDz&|_8Mv&F;^FDBUFKGh!yRj;} z#P$<6^vod3MpWgSMAV#l1{z8rlv9IjtjvnnHKS-GSO_wdqi6?|S3h_hX| zu^*3*$_FH<1CeZuM$b!tzY`LLY%+tA-xtiVl>;+q*_H^`5YiPnFe?XvZz+HaIxB*O zWS^6Nj-O^_=4)(=LbzH2NCK+llD2gua34M~R-YlF>-m9Bn}B%eVm-NUWCUwrk+*xj z|3q~s5ltwBu8?gKcY@br-ILXU#DdRpp;8=#&V;Ey5_k^B$LdNEp>YVEx|i>|qie7o+u{43 zc>!In2<;b?V18jhN}N_meO`u69mY~IuN5FXI##1XVP$vkdDqsp1`x|8Un|PVhQY(M z0_bzhd)*6|BY>I&;<_+v3ESx7J^<2%NeJ1Q{B@^j9Ba|$h^Z0{NZXv(~?x014fX@!u>Cb!}_NwEFtn=gBH#~&6_ z;sAn06~~TT)HWIDD!b>4t7jl)-gH?k9{F9?KT4En0W@zlD>6nK2-#R-r*1c zM<2ULg~cShca;E|%BCdvJ14E?8<=kd&jEaLYCa_}5^}YHKjQ$x<_sYF$`_hvV10eQ zMZvP1F=pNw$|pDjT0(h4iH9C{0r)z|?%&nj;6e_(MCb~a`Z8{_`!@>%NdnUnpf76d zOv~XlUv$EcPtThgaP17c&`*BB5{f#+Y+oUOras@HY$QTou~Q|0mf$&p|vOXWOPY6-LHd}{oe11Nas0PEv5Dy-$Hn`AN zZ2+!dSvFw{T}n3A=Ot3kyt7Kt9y|y1u|KhdR9pi;I#!Kbh!?W2f3ACLtogi6F5~mg zDkItC);*`J&$nCsKl;K2Yomb+9T?98u5LMm+ljtqSG z2@W8bL7PlW1??1Uh(VXh$PhVh{-rKOx ziwaIDqRmC{3UN*a?ZH}@XYf7C{U;UBkjW$ggVzCk@5vRv5=Yx7C4Jt52iojqV|OIl z`FyirLhw#D20WMm_MccWF68!o>?&7EHZ7UgZF*auF9r~UH+AZm_W^vz1)zHnH%yn4 zO;W)r88V;m2bGr%(U8IAz%%p8WIzz$w@=y(_yF*&v*)_scPRsSQ8r%prs-O<&$|qG z=81;1!C1K%)&uY?p>LgB)-{mN1eiU1+lDodlp1`3Qwm{ov~8$&4LT@T4L&GX0X2cN zD3Gqu+DC$f|9*2~Icg;oVD`uw18By)`_fh|aXYKb-G=nOAp;c%wMqiRNa`UJG?>=` z0X{TgGLX*%l>Ok-8{1}}rEK)BS_jO78sc3zZI9d~nkoA01=66`KWE~>r#J)Ac6RpT76CL}r1EjJBcEpy!AYYDcsBf_XpGzjE43NC?|X+;?gz*jnW6I?8^!qu0AoGoLs8xY_zx zx5lgucn;!If0@-T6xry#E&#jYNrY_l78Af~KHr&DUK;Z*1Gm2VZyP|qBIB2z;S2=3 z5&+rQExlV?Y2Mu13G=OezFlj*^RFC$D`G35y}w>0g=kJk?5;#j(H`B;b7NLK>RAWy z?cAnSAVaVHD-{SYbJgWe%^t;mn>Jlhn za|`xNOM&08+<%g+&og-4MGC4_M01~CEdzI_Y1jN^o6jJaZj}Eg37o?_ez!EEh_3gA zY|fsR6wn5V++g7U&F5PMput~$)jda+n+O=Q}uA`BL`|bO*a-s zLwd}v9c1zm()K=D`vR&caQo?9w;DsM2Nq~AM5%7jc;MB^7g~Q`lzu*7d=D(ug V0`2sOqI3WN002ovPDHLkV1ic(ft3IN literal 0 HcmV?d00001 diff --git a/src/assets/icon/icon-earphone.png b/src/assets/icon/icon-earphone.png new file mode 100644 index 0000000000000000000000000000000000000000..5ce33fe62b96306ce87216a61b972b030d0f4b00 GIT binary patch literal 1926 zcmV;12YL93P)Px+KuJVFRA@uhnt9On)f~n@mn~TmBeZC|8fDOoC8i;jvNTaNLb5a(BEyWO$Zjl2 zC^XSVsYpncF~m#KP{xF;StdrzAcIk(te3g&IrlTa=e)oBzR&M|eox-_`_D7;+-Lco z>vzugT;J<^#4TX9Zv{LA*th)M6}TsGXTZP>!0&;d1K$O{4qPoMzpbljJx8~_0XQ0X zCa}}Mxqc0N3^+~Fbp!i0H(wV3Y~LF=9ykoRO|v)s4gU$82fSWVcFCwVDgd@K-YbDO z19u$NQ}`S3T1lslIqqlx*uER^ao}+S9Q;>ld)onhJ_kHUQUF=AjRHV9>t6(Ro8!@+ zfzJS61HKPjE9s`Rw|xg-ml7cN2c8VvWzJYX01lM&yR{;)W&ms_xLpq1XNEIB1>ON% zC@JT8q1nDY@GRgp1(?1*KLhrb^v8t*&S|hF0Bq+PyApUn&m39o>wx!4`u8$U+P)p| zD&UPk-!Zug*h|vQ%Z#5sYX#twz@a^pCt4pW>6^@VrJ%R1H9&-VR*FV8q?2TS_=GV?73fb9gRUjW-xlP1vZDJj2=Znk#^ zva53Rx)!3e+cc;SnRr z>u1|)vXdl*1g*Q-J_C3`HBsWu&XT6wqREeC07$_3P|w!iFcvvko!r{6PTN4&r|Tw(5-dUm#!q zH-lHPh7PtL2>hrTBJ_B>R>GCOLjib9p|ah1uadOK8rHIOSKHV0(CWO&bL{R+UA0KjxP9}b0<6z(#y8i0=ihtFAjbozSN zY;FMb`Pg03>5^Ww2>`Z_0#2W?_%8t`lw(oT;9dX{T0|%()E+=Y`c%(B&~d+q_1=)Yysf7 zB7#o4Wt<%(C5ISfwvPec)#((?VJAs{XaS(KiGC0e6WqHtAxtWIeiW5R(_K4G(mT8V zXxstWTB!(iZ68VBs8?@$Z{WVb#y$znb}B;8uKKMIuSGkc^WolBj&HpSb_@Vy&7*{Ntab%=F8>_$8JpFv`%7d_XXw0O8RQ+4k+y+vu91)SAIPy z0OWi=ulnKDl0t%3*;oMB-Uj$fC2L(EY1Iuh761i=x2C>WE$Mv$;M>3>svl-W_Ldm1 za0l4FKahe+*DjNk^7)F53_u@i+!z2NEp@9pxktC|yS_%;0sjvGBBNbjf&Rk)kgeDi zIB%Ae>t_=i5rEVXBW85%Qc3%*;|@q=sV>c37XVVg*s*eE8%cS!v0gDCl3K3CuBdsc zq*YqO$VXrYpf09f697_Zcx1KK6dhCWTo(XJP|B;3C^vaWkZkgR`T@kq0EA3^p<2=< z0U!?!UR?dqtMNA;fw0Du&AOIqQG#s^Xm-FoB60V<2eN$*P>UNWhE8gZtvsN#?W-l6 z5CBq(Pu;$2p^CdmN~vqb8UcuS@{vxrl&_;2hZYYq+qo9Q1*Vo`ld-}ZngOt#`#&N{ zP4@N+0O83w8;O!#J5N#;GYEj-D%K0q?RzLyv&JSN9J2zYn}<>n@cBHdm_funaECh1#s+j(_?Ftj{)NX}kANtuolp0NFpYHWkE z%}q*Loh!V4Coml&d?s4v`)56$X{ih)cYkWAD)6v!Q$$|MJ^K8vWY+BYhz(15?1Pcr zfCxCrZWG`lc!rE$^ZZW M07*qoM6N<$f=2$2X#fBK literal 0 HcmV?d00001 diff --git a/src/assets/icon/icon-folder@2x.png b/src/assets/icon/icon-folder@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..41c4999be2eac71a1e0bdca267f759665a81caa7 GIT binary patch literal 839 zcmV-N1GxN&P)Px&0ZBwbR9HvNmrrQZP#njlqIu)kih%q z`~Bp--%H*jR1d>2b`w!QfP(i_Ja4#AD7eUMvR?IJQ@+xFGv{K+)U8vriE6&}*p1<=9F@0aSy zFpLQzN`^FwO(r7!wr$_~2hcRl?*KLiB+rS+(`s=qN{L7Vpoxe^M5>%d!fwbzcKxRf9o**O~d!|A14Ofq;obq9d2f zO)GI{XXiFu*Y^{Vc%J7Gkvc`4YD7KHTez;^WgN$GCX2=5jPDTyIL*u*H6QZ+XJ^|=rIMONNT<_1A~F`%IU-%TQ4c<1=3YN2olXyn$k~X3!`e7? z0g0&3vaFGs`kMl`6+x|w=_?)?0Gd$CyjqJm7*+z#MlM4_Q=i0DZ@z&Fg?RWrPO zB62shb9BPNdVn{X`C`rRJ_K+qy4-M1BGOwA@D($wl{J#di6JV0Q+K1Y|ebnb=~%f ziHRRR;28jSn)8TNeUF(>`U%wC-K|$D6}6Pl#u^*Wypl*HlDS;&!y;gHIn|~%&a1fJ zSPu7>h#a+T`+05S;?BO>lcxZj29OHa%!libV3pdzeI=r2A~Iy#c4_G&e*ulhJjLMm RzgGYN002ovPDHLkV1l2ygx literal 0 HcmV?d00001 diff --git a/src/assets/icon/icon-loginout.png b/src/assets/icon/icon-loginout.png new file mode 100644 index 0000000000000000000000000000000000000000..3d2e498a3590d1603bc98c3a617d3445c98c748b GIT binary patch literal 1777 zcmVPx*t4TybRA@u(S!rloRTMtwHpN(-SW*;Mj9M*{TKn$3lXO~@x}g-6)&&(YZiTA2 zAzBr;y0l7*LS3LB)w-ZyTP>C%iquqVi_JSXW0J;hiuyyTD>lY-CiC8r8{Z2r$xLS6 zWQJ1c{WZ)x+xO0L&p8j_AU}AJ+YeO*ptWAi%y%>M24l<(0N_{pg;foJQfdM-_aLIM zMkAthUAO(90gy_i>a*GGAECiQh*@oIZCefj81@FL7D9(SP-3jb_CP9?I(+Nat(jsK zr5q1Tn>Ou;j*gDr5^WzKivwVsQfe^(+z$Xh`M!T%dwcuOg_OksFnRLi!|LklHX>pQ z0N(BE>$|p(y@r{u4D>NG zUu2BgI9z{T07|J30AOA~ydM##yRN&lRO2fE0F+Wk0YEnZ93SZYmWZYfzkfymkW!ur z09|1h$;^w4F*Yt^opN&^szfPu4FJ3!{>RK$8Ds3r9XuldD5YKlfcch!ng8nT?LB$t z&YeB6tpC5Nl$`@nT~f+4BAy-Cv&9%Qs~~{cvuD@z^z`fnfO<=Wh)Z18jV4pcI4TI> z21I-(%mn~wAflf_Lxy-jYke^@e;PjYeZR52z1_xP>{BTKb}#~f-y#L&J|bG47l2ag zX#jXUc({v*ro^^9V5k%TD^4l(Appz`!f35A=ITNo_=uS=4+!5j#zb$$SXk`Mn#pAT z35$W}c}_Z=w&ghXQA#}w0M7-C-xJYkg*>ne08S48EHuU}i>)ofptWAa%y$961|quI z)`fE9X|3nj#Xy(`eSLkk-QC^Ufjo^0R7(900F#3MZYH8P%TZWq9>;OC5TY%Vo5^I3 z?ds~X#byKmi)ws8IFE?dRoa+xZb8J?gB-}@a=A%yw*=Jys+8IR0O6%NBr=A0Ael^_lMtr zAdtN`kw}~v9clBm(>DRYs)#Wc5Ygw=Fs_(P8xfx8?MB4Ig0Nm@j9D1v%LiaQGw(vg zhJdg$kx0l=2KizJ#eFWNT!V;L1$=z~a2gT)GAaQ3P;1@7%+WUD86t{q3gX%lo8EDp z>x2;RMPh%cG3KG+f(mXWlu~wp9w?*C>tI2=xDu%jKr# ztB3^wIF56&5P~AjT^}OOab35y44X=3X>M*lJ(tUEigX110ATabF4#t#Q8#l^%1aP& zeWby&AX;44T~o3}F$lHRO}_81N5o?yZ1)n;ONGP~-Hl2q?Z>&dB3lakp>FxUefu8S zvuBT8vsdDvQtBQ6cpd<1BXPgj81vX@3W@@-%r>DAaaCB(g1Fo*gm_@Ac_F2oA%u7_ z(t{0%x9deBdbZfxDG7iTqLexZ0Blt_F)Eaqzd^)Tvf1p~&d$!iiYc_ugGKIT0C2mF z?_oUl%jN>tbq6cZm^}~*Xl!h(udS_p8362#bU1iB41Em%n-OsbBL3+6evc5s_dGAb z%qJk?6#Ef_nP(y5k;4sR=1qur8xeh1%8RfxC3_$$FzC;h0D$#MCC(0JezKeasw@DZ z#nY!xpIK8=Ge20u4)*A!AY$eWB7TgBZ@8{&D_vOw|Cj)ThBh=b)YjM6&lEzO$INyO zXg3?jGV_tPdNH#dRewiB+t+OOeg8{4VG+^arGTwi4vbYkZ+00000NkvXXu0mjf7^gTi literal 0 HcmV?d00001 diff --git a/src/assets/icon/icon-loginoutwhite.png b/src/assets/icon/icon-loginoutwhite.png new file mode 100644 index 0000000000000000000000000000000000000000..1f3dd87e99f9ee7b1d524e89a07e52cce60f354a GIT binary patch literal 1071 zcmV+~1kn45P)>lXf00001b5ch_0Itp) z=>Px&=}AOER9Hvtn0x5ma~Q{8Z~Wmh*G!hh#84(}qDi}uXcLX*8j_|+OoJJS=lMvqmEH0Zr1G6Q) z)ehz#Ahz@QDPVpbcmh}`>Cavz*#t;S*Y;JwP4)aaFr)nswgXuN+*b$Vl{u3B=+_rE z2S_!*+uA&{T++EM`y)VX?*x1b><0V*Oq2A*pyo6NAPLjUz!A9?m?bIC8>`0l)xeE) z@nT6yuz|9de${TwFUjq9M3Q1es2lkO3)wUv~Twa+f>5~9S zX|5@S>m=PU&=qxHEFLMZ%&iuY$7>}m36SgaP__?|^xl5}BvJSpNaI{1X>NdIjHd-} zkhFVK5cSUz-)BqbL`fv;aw!91OfE>F^=#H&(ZuL3nv7Obn2Rfir+)@2*XoS>qdf9JKv>n19Mx z(xd>n47jz%&JX9VScqt_37Hl3a=0E9t`V0%AM-H9R(QkEDz8p#>zp|BXWV z7m%&(=`9V$_C7@c_5eZ|50I3J|1XQTozScULS90Sj+FGlmI6}=8WMD9*}PKH%`N+# za(+GpbB38nWAFi%pr$SCQx>E-*-|B$8ti~LsG zU#e@Zq?Gz7u^l=v9XJ)p08LW1B%w*qh?h5!zON;0hi%^t9M+-vJMbZp{Uq6+={*TJ z2*|G6F7e_Ok{;~m&4KSnYVleCWE9NmwJ&$MB;EQhAl*7(`^rEd?b^1d6s^oso+R88 p$lQpB^4cnwXI04NpYGXM{sy))qvUZUhO__x002ovPDHLkV1mjn^;rM_ literal 0 HcmV?d00001 diff --git a/src/assets/icon/icon-material.png b/src/assets/icon/icon-material.png new file mode 100644 index 0000000000000000000000000000000000000000..3f2aeb29d041cc4201e2d7474e200ca04aae65fe GIT binary patch literal 2687 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 literal 0 HcmV?d00001 diff --git a/src/assets/icon/icon-microphone.png b/src/assets/icon/icon-microphone.png new file mode 100644 index 0000000000000000000000000000000000000000..60e3fcda88a3a41599fc6150e3ac9cb698554ece GIT binary patch literal 2639 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 literal 0 HcmV?d00001 diff --git a/src/assets/img/myVideo.png b/src/assets/img/myVideo.png new file mode 100644 index 0000000000000000000000000000000000000000..d7693d09c210fc4f070fbb1629fab94273b137c3 GIT binary patch literal 814 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 0) { + flag = false; + break; + } + } + return flag; +} + +/** + * 功能: 判断是Android端还是iOS端。 + * 返回值: true,说明是Android端 + * false,说明是iOS端。 + */ +function IsAndroid() { + var u = navigator.userAgent, app = navigator, appVersion; + var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; + var isIOS = !!u.match(/\(i[^;]+;( U;) ? CPU.+Mac OS X/); + if (isAndroid) { + //这个是Android系统 + return true; + } + if (isIOS) { + //这个是iOS系统 + return false; + } +} + +/** + * 功能: 向对端发消息 + * 返回值: 无 + */ +function sendMessage(roomid, data) { + console.log('send message to other end', roomid, data); + if (!socket) { + console.log('socket is null'); + } + socket.emit('message', roomid, data); +} + +/** + *功能: 与信令服务器建立socket.io连接;并根据信令更新状态机。 + *返回值: 无 + */ +function conn() { + //连接信令服务器 + socket = io.connect(); + //joined'消息处理函数 + socket.on('joined', (roomid, id) => { + console.log('receive joined message!', roomid, id); + //状态机变更为joined' + state = 'joined'; + /** + * 如果是Mesh方案,第一个人不该在这里创建 + * peerConnection,而是要等到所有端都收到一个'otherjoin'消息时再创建 + */ + //创建PeerConnection 并绑定音视频轨 + createPeerConnection(); + bindTracks(); + //设置button状态 + btnConn.disabled = true; + btnLeave.disabled = false; + console.log('receive joined message, state = ', state); + }); + + //otherjoin消息处理函数 + socket.on('other_join', (roomid) => { + console.log('receive joined message:', roomid, state); + //如果是多人,每加入一个人都要创建一个新的 PeerConnection + if (state === 'joined_unbind') { + createPeerConnection(); + bindTracks(); + } + //状态机变更为 joined_conn + state = 'joined_conn'; + //开始“呼叫”对方 + call1(); + console.log('receive other_join message, state = ', state); + }); + + //full消息处理函数 + socket.on('full', (roomid, id) => { + console.log('receive full message', roomid, id); + //关闭gocket.io连接 + socket.disconnect(); + //挂断“呼叫” + hangup(); + //关闭本地媒体 + closeLocalMedia(); + //状态机变更为 leaved + state = 'leaved'; + console.log('receive full message, state = ', state); + alert('the room is full!'); + }); + + //leaved消息处理函数 + socket.on('left', (roomid, id) => { + console.log('receive leaved message', roomid, id); + //状态机变更为leaved + state = 'leaved' + //关闭socket.io连接 + socket.disconnect(); + console.log('receive leaved message, state = ', state); + //改变button状态 + btnConn.disabled = false; + btnLeave.disabled = true; + }); + + //bye消息处理函数 + socket.on('bye', (room, id) => { + console.log('receive bye message', roomid, id); + /** + * 当是Mesh方案时,应该带上当前房间的用户数, + * 如果当前房间用户数不小于 2,则不用修改状态, + * 并且关闭的应该是对应用户的PeerConnection。 + * 在客户端应该维护一张PeerConnection表,它是 + * key:value的格式,key=userid,value=peerconnection + */ + //状态机变更为 joined_unbind + state = 'joined_unbind'; + //挂断“呼叫” + hangup(); + offer.value = ''; + answer.value = ''; + console.log('receive bye message, state=', state); + }); + + //socket.io连接断开处理函数 + socket.on('disconnect', (socket) => { + console.log('receive disconnect message!', roomid); + if (!(state === 'leaved')) { + //挂断“呼叫” + hangup(); + //关闭本地媒体 + closeLocalMedia(); + } + //状态机变更为 leaved + state = 'leaved'; + }); + + //收到对端消息处理函数 + socket.on('message', (roomid, data) => { + console.log('receive message!', roomid, data); + if( data === null || data === undefined) { + console.error('the message is invalid!'); + return; + } + //如果收到的SDP是offer + if (data.hasOwnProperty('type') && data.type === 'offer') { + offer.value = data.sdp; + //进行媒体协商 + pc.setRemoteDescription(new RTCSessionDescription(data)); + //创建answer + pc.createAnswer() + .then(getAnswer) + .catch(handleAnswerError); + //如果收到的SDP是answer + } else if (data.hasOwnProperty('type') && data.type == 'answer') { + answer.value = data.sdp; + //进行媒体协商 + pc.setRemoteDescription(new RTCSessionDescription(data)); + //如果收到的是Candidate消息 + } else if (data.hasOwnProperty('type') && data.type === 'candidate') { + var candidate = new RTCIceCandidate({ + sdpMLineIndex: data.label, + candidate: data.candidate + }); + //将远端Candidate消息添加到PeerConnection中 + pc.addIceCandidate(candidate); + } else { + console.log('the message is invalid!', data); + } + }); + + //从url中获取roomid + roomid = getQueryVariable('room'); + + //发送'join'消息 + socket.emit('join', roomid); + + return true; +} + +/** + * 功能: 打开音视频设备成功时的回调函数 + * 返回值: 永远为true + */ +function getMediaStream(stream) { + //将从设备上获取到的音视频track添加到localStream中 + if (localStream) { + stream.getAudioTracks().forEach((track) => { + localStream.addTrack(track); + stream.removeTrack(track); + }); + } else { + localStream = stream; + } + //本地视频标签与本地流绑定 + localVideo.srcObject = localStream; + + //创建PeerConnection 并绑定音视频轨 + createPeerConnection(); + bindTracks(); +} + +/** + * 功能: 错误处理函数 + * + * 返回值: 无 + */ +function handleError(err) { + console.error('Failed to get Media Stream!', err); +} + +/** + *功能: 打开音视频设备 + *返回值: 无 + */ +function startLocalMedia() { + if (!navigator.mediaDevices || + !navigator.mediaDevices.getUserMedia) { + console.error('the getUserMedia is not supported!'); + return; + } else { + var constraints; + constraints = { + video: true, + audio: { + echoCancellation: true, + noiseSuppression: true, + autoGainControl: true + } + }; + + navigator.mediaDevices.getUserMedia(constraints) + .then(getMediaStream) + .catch(handleError); + } +} + +/** + * 功能: 获得远端媒体流 + * 返回值: 无 + */ +function getRemoteStream(e) { + //存放远端视频流 + remoteStream = e.streams[0]; + //远端视频标签与远端视频流绑定 + remoteVideo.srcObject = e.streams[0]; +} + +/** + * 功能: 处理Offer错误 + * 返回值: 无 + */ +function handleOfferError(err) { + console.error('Failed to create offer:', err); +} + +/** +*功能:处理Answer错误 +*返回值:无 +*/ +function handleAnswerError(err) { + console.error('Failed to create answer;', err); +} + +/** +*功能:获取Answer SDP 描述符的回调函数 +* +*返回值:无 +*/ +function getAnswer(desc) { + //设置Answer + pc.setLocalDescription(desc); + //将Answer显示出来 + answer.value = desc.sdp; + //将AnswerSDP发送给对端 + let req = new Object; + req.cmd = 'CMD_WEBRTC'; + req.data = desc; + let str = JSON.stringify(req); + console.log(str); + conn.send(str); +} + +/** +*功能:获取Offer SDP 描述符的回调函数 +*返回值:无 +*/ +function getOffer(desc) { + //设置Offer + pc.setLocalDescription(desc); + //将Offer显示出来 + offer.value = desc.sdp; + offerdesc = desc; + + console.log(offerdesc) + + //将 OfferSDP发送给对端 + let req = new Object; + req.cmd = 'CMD_WEBRTC'; + req.data = desc; + let str = JSON.stringify(req); + console.log(str); + conn.send(str); +} + +/** +* 功能: 创建PeerConnection对象 +* 返回值: 无 +*/ +function createPeerConnection() { + /* + * 如果是多人的话,在这里要创建一个新的连接 + * 新创建好的要放到一个映射表中 + */ + //key=userid, value=peerconnection + console.log('create RTCPeerConnection!'); + if (!pc) { + //创建PeerConnection对象 + pc = new RTCPeerConnection(pcConfig); + //当收集到Candidate后 + pc.onicecandidate = (event) => { + if (event.candidate) { + console.log("candidate" + JSON.stringify(event.candidate.toJSON())); + //将Candidate发送给对端 + let req = new Object; + req.cmd = 'CMD_WEBRTC'; + req.data = { + type: 'candidate', + label: event.candidate.sdpMLineIndex, + id: event.candidate.sdpMid, + candidate: event.candidate.candidate + }; + let str = JSON.stringify(req); + console.log(str); + conn.send(str); + } else { + console.log('this is the end candidate'); + } + } + /** + * 当PeerConnection对象收到远端音视频流时 + * 触发ontrack事件,并回调getRemoteStream函数 + */ + pc.ontrack = getRemoteStream; + } else { + console.log('the pc have be created!'); + } + return; +} + +/** +* 功能: 将音视频track绑定到PeerConnection对象中 +* 返回值: 无 +*/ +function bindTracks() { + console.log('bind tracks into RTCPeerConnection!'); + if (pc === null && localStream === undefined) { + console.error('pc is null or undefined!'); + return; + } + + if (localStream === null && localStream === undefined) { + console.error('localstream is null or undefined!'); + return; + } + + //将本地音视频流中所有的track添加到PeerConnection对象中 + localStream.getTracks().forEach((track)=>{ + pc.addTrack(track, localStream); + }); +} + +/** + * 功能: 开启“呼叫” + * 返回值: 无 + */ +function videoCall() { + var offerOptions = { + offerToReceiveAudio: 1, + offerToReceiveVideo: 1 + }; + /** + * 创建Offer, + * 如果成功,则回调getoffer()方法 + * 如果失败,则回调handleofferError()方法 + */ + pc.createOffer(offerOptions) + .then(getOffer) + .catch(handleOfferError); +} + +/** + * 功能: 挂断“呼叫” + * 返回值: 无 + */ +function hangup() { + if (!pc) { + return; + } + + //发送“挂断”消息 + let r = new Object; + r.cmd = "CMD_HANGUP"; + let str = JSON.stringify(r); + conn.send(str); + + /* + offerdesc = null; + + //将PeerConnection连接关掉 + pc.close(); + pc = null; + */ +} + +/** + * 功能:关闭本地媒体 + * 返回值:无 + */ +function closeLocalMedia() { + if (!(localStream === null || localStream === undefined)) { + //遍历每个track,并将其关闭 + localStream.getTracks().forEach((track) => { + track.stop(); + }); + } + localStream = null; +} + +/** +*功能:离开房间 +*返回值:无 +*/ +function leave() { + //向信令服务器发送leave消息 + socket.emit('leave', roomid); + //挂断“呼叫” + hangup(); + //关闭本地媒体 + closeLocalMedia(); + offer.value = ''; + answer.value = ''; +} + diff --git a/src/assets/web(1)/web/user.html b/src/assets/web(1)/web/user.html new file mode 100644 index 0000000..da517a9 --- /dev/null +++ b/src/assets/web(1)/web/user.html @@ -0,0 +1,196 @@ + + + + + 用户页面 + + + + + +
+
+ + + + + +
+
+
+
+
+

Local:

+ +

Offer SDP:

+ +
+
+

Remote:

+ +

Answer SDP:

+ +
+
+
+
+ + +
+
+ + + + + + + \ No newline at end of file diff --git a/src/components/MyVideoItem.vue b/src/components/MyVideoItem.vue new file mode 100644 index 0000000..d7db1bd --- /dev/null +++ b/src/components/MyVideoItem.vue @@ -0,0 +1,91 @@ + + + + + \ No newline at end of file diff --git a/src/components/common/head.vue b/src/components/common/head.vue index e3bead7..861da08 100644 --- a/src/components/common/head.vue +++ b/src/components/common/head.vue @@ -5,15 +5,20 @@
用户名
- - --> + +
@@ -100,14 +105,15 @@ export default { font-weight: 600; font-size: 13px; margin-right: 15px; + margin-top: 3px; } .userModel { position: relative; top: 3px; margin-right: 10px; .userImg { - width: 30px; - height: 30px; + width: 24px; + height: 24px; margin-right: 2px; } } diff --git a/src/components/common/tail.vue b/src/components/common/tail.vue index 1c90849..afdb33e 100644 --- a/src/components/common/tail.vue +++ b/src/components/common/tail.vue @@ -1,5 +1,5 @@ + + + + diff --git a/src/views/login/login copy.vue b/src/views/login/login copy.vue new file mode 100644 index 0000000..521e62f --- /dev/null +++ b/src/views/login/login copy.vue @@ -0,0 +1,441 @@ + + + + + diff --git a/src/views/login/login.vue b/src/views/login/login.vue index 521e62f..40b6a96 100644 --- a/src/views/login/login.vue +++ b/src/views/login/login.vue @@ -1,4 +1,5 @@ diff --git a/src/views/model/chooseModel copy.vue b/src/views/model/chooseModel copy.vue new file mode 100644 index 0000000..e520905 --- /dev/null +++ b/src/views/model/chooseModel copy.vue @@ -0,0 +1,312 @@ + + + + + diff --git a/src/views/model/chooseModel.vue b/src/views/model/chooseModel.vue index e520905..e8a6f91 100644 --- a/src/views/model/chooseModel.vue +++ b/src/views/model/chooseModel.vue @@ -2,14 +2,15 @@
- + + + + + -
选择模板
-
+ + + +
item==title) + this.loadModeList(this.type); + }, globalWatcher(e) { console.log(e, "e"); }, @@ -90,10 +96,10 @@ export default { this.phase = num; }, - chooseType(num) { - this.type = num; - this.loadModeList(num); - }, + // chooseType(num) { + // this.type = num; + // this.loadModeList(num); + // }, selectModel(id) { if (this.currentId != id) { @@ -115,13 +121,20 @@ export default { Toast.fail(error.message); } }, - + // 根据id获取模板详情 async getModeDetail(id) { try { const res = await getModeDetailById(id); console.log(res, "根据id获取模板详情"); const modelDetail = res.data; - this.goSetPaperWork(modelDetail); + this.$router.push({ + path: '/previewModel', + query: { + imgUrl: res.data.coverImg, + modelId:res.data.id } + }) + + // this.goSetPaperWork(modelDetail); } catch (error) { console.log(error, "error"); Toast.fail(error.message); @@ -132,13 +145,13 @@ export default { try { const res = await saveOrUpdateUserVideo(data); console.log(res, "保存或修改用户作品"); - this.$router.push({ - path: "/getPaper", - query: { - modelDetail: JSON.stringify(modelDetail), - saveID: res.data.id, - }, - }); + // this.$router.push({ + // path: "/getPaper", + // query: { + // modelDetail: JSON.stringify(modelDetail), + // saveID: res.data.id, + // }, + // }); } catch (error) { console.log(error, "error"); Toast.fail(error.message); @@ -173,6 +186,10 @@ export default { diff --git a/src/views/model/previewModel.vue b/src/views/model/previewModel.vue new file mode 100644 index 0000000..d9c6593 --- /dev/null +++ b/src/views/model/previewModel.vue @@ -0,0 +1,98 @@ + + + + + diff --git a/src/views/myPage/myPage copy 3.vue b/src/views/myPage/myPage copy 3.vue new file mode 100644 index 0000000..e6c1a3b --- /dev/null +++ b/src/views/myPage/myPage copy 3.vue @@ -0,0 +1,489 @@ + + + + + diff --git a/src/views/myPage/myPage copy.vue b/src/views/myPage/myPage copy.vue new file mode 100644 index 0000000..053734c --- /dev/null +++ b/src/views/myPage/myPage copy.vue @@ -0,0 +1,520 @@ + + + + + diff --git a/src/views/myPage/myPage.vue b/src/views/myPage/myPage.vue index 41adec8..27f0f9e 100644 --- a/src/views/myPage/myPage.vue +++ b/src/views/myPage/myPage.vue @@ -2,25 +2,34 @@
+ +
-
我的视频作品
- +
+ + 我的视频作品 + 草稿箱 +
+ +
+
-
+ > + +
草稿
视频生成中
视频生成失败
-
+ +
{{ item.title || "暂无" }}
@@ -36,13 +45,31 @@ }}
+ +
+
+
+
+
+ + +
   编辑
+
    删除
+
+ +
+
您还没有视频作品
- -