cncml手绘网

标题: swoole视频直播(记录用 未测试) [打印本页]

作者: admin    时间: 2020-3-29 18:53
标题: swoole视频直播(记录用 未测试)
服务器代码4 ]# B* N  I0 {
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    $ L8 n0 {( l* X; l( p4 V/ s, D9 S/ l
  2. $client=array();, f( a' v  V$ e7 V$ A
  3. $serv->on("open",function($serv,$req)use($client){
    7 c# ?4 k1 R4 S
  4.         //echo 'connect'.$req->fd;9 C* h+ \; \# ~$ R8 ~- x& K
  5.         $client[]=$req;
    ) A# K1 n; n# b, W0 s
  6.         //var_dump($client);
    % j3 p/ ?" A* S& D" a/ Z! t' J" x9 `
  7.         $serv->push($req->fd,'aa');1 P+ s4 y+ m. A' w3 Y1 i& o
  8. });
    " I; U% _1 J$ G2 _: k9 H
  9. 4 @% e  J+ p$ M# k: W
  10. $serv->on("message",function($serv,$frame)use ($client){
    , O2 w  k& D5 W0 w& I( v, k. V
  11.         /*var_dump($frame->data);
    3 o% w/ X' T* d; U& W1 V
  12.         foreach($client as $key =>$val){
    ! h8 k6 ^5 o# W. ], B
  13.                 $serv->push($val->fd,'aa');/ L* Q/ q4 o0 `" r% T
  14.         }*/2 `0 N  B" @7 a
  15.         $client=$serv->connection_list();5 F1 r  F( p; u3 u$ d( s+ M
  16.         var_dump($client);
    ' i6 z% L7 S8 {' c1 X
  17.         foreach($client as $key =>$val){- J- r  C5 V! U2 Z) }3 l* L5 l
  18.                 if($val!=$frame->fd){
    4 d7 q2 [0 D) u+ L$ X8 {
  19.                         $serv->push($val,$frame->data);
    3 k$ M6 }5 w- a8 g( p+ [
  20.                 }9 N' |' x7 e0 k/ G+ G
  21.         }
    ' V/ ~5 r7 T2 o( a1 {/ V
  22.         8 R. `: a; ?. g
  23. });2 n  B: ^# d- d3 v9 _; |+ i
  24. ) K" ^4 c1 k" W/ p
  25. $serv->on("close",function($serv,$fd){/ D0 g6 i4 o+ o- Y: e4 V
  26.         echo 'close';$ _6 n$ V2 _! @& K. d5 E0 s4 k
  27. });
    , \! h% W3 z; b$ @6 r6 j
  28. 6 I% U3 C7 ~6 X  M3 I/ y8 W% V" j6 T
  29. $serv->start();
    * j( w/ X; j* @" }5 a# T; I1 Q
  30. " F% _* _# l' e6 w
复制代码
主播客户端
, W, @; M$ }' k7 p$ H- n, i
  1. <!doctype html>
    : X& G& I; W6 s+ A% p$ J6 i
  2. <html>
    ! |1 E; ^  t0 U  \3 T7 d
  3. <head>2 s  |% l, v$ J5 u1 N
  4. <meta charset="utf-8">- H2 r" [& }9 x3 o% y/ s  M

  5. ! W4 r5 ~7 X5 `* N+ L
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">! p. f) f0 a& A. N* X, D4 S9 ^! \, I
  7. <title>404</title>( c; r! k6 {4 g% d
  8. <style>
    3 f/ z1 h* d. o) ?) Q& R9 F2 G
  9.         body{5 c7 z: h3 z0 t$ j3 d7 D9 _
  10.                 background-color:#444;
    # A) B% }) g1 b5 _( y  g4 w' j
  11.                 font-size:14px;
    - a2 W+ v% A0 d/ L0 C& N
  12.         }
    - F+ c# m: F$ ?, i, w+ L
  13.         h3{8 v4 l4 V% {5 Q/ p* [1 l# |
  14.                 font-size:60px;
    ! ?3 z3 t$ ?  ]0 @( _5 k6 L
  15.                 color:#eee;
      `- s6 M; m' y4 }) w. ]! w* d& g& G2 B
  16.                 text-align:center;
    . `9 p) g( x' L6 E+ \/ k
  17.                 padding-top:30px;7 W: u3 M9 g: u) w. R6 }' ~" d
  18.                 font-weight:normal;3 c! x* ?. a  O2 J6 O
  19.         }6 _4 X  W% O- ]& e* F& v4 S5 w
  20. </style>: I, O* Z5 F$ S1 L0 F7 K
  21. </head>
    % D# C% C/ _' v  c. S" u$ b. v
  22. ( n2 N9 x( a& i* i$ f2 L
  23. <body>
    ! g4 t6 T1 U5 c8 r9 p
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>& b/ U1 O0 p  z+ v4 x6 Y
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    . `5 \0 e- B8 z2 {6 c6 i3 y
  26. <canvas width="400" id="canvas2" height="400" ></canvas>6 h/ Z  {  ^' C2 P+ i: ?  s2 _* \
  27. <script>9 j7 {+ V+ s7 b$ v5 f4 c7 r! T- J9 d
  28. var video=document.getElementById('video');
    5 U5 B+ ?, H5 @2 Y8 g/ E+ m7 p' ^
  29. var canvas=document.getElementById('canvas');8 O% F) |" a0 R* ^$ ^
  30. var canvas2=document.getElementById('canvas2');
    $ e! b5 D" _3 l2 T  z& D" [
  31. var context=canvas.getContext('2d');
    4 R5 z& G" B0 O5 A: f
  32. var context2=canvas2.getContext('2d');
    : f7 |/ P1 i. |  }9 J0 }6 Q
  33. function draw(){
    7 e& v+ H, B/ }& X; m
  34.         context.drawImage(video,0,0,400,400);
    $ w* x( H4 k- C& \2 H8 b
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    . b6 _$ H' d! O2 `
  36.         setTimeout(draw,800);# r/ i6 u& d4 s/ K' r
  37. }% h  p6 F. D. [. v  Q- b+ o

  38. 2 K1 c6 a4 o" V& O0 x0 R* L/ M+ {
  39. //客户端跟服务端通讯+ b1 E9 u4 e6 _2 P, \! P6 v: S, }
  40. if (window.MozWebSocket)
    $ a2 `8 W2 u0 w* l* Z$ v9 e3 F
  41. {
    1 C3 y8 g  Z2 [* K  k; s
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    5 W0 k2 Q2 f2 h, g# d
  43. } else$ \3 ]" ], i& R8 g6 r
  44. {
    " ^6 _# i# _8 w! l2 I; M
  45.         ws = new WebSocket("ws://182.61.42.187:9501");  H+ X* B- w$ Q; T: k1 D
  46. }
    1 O, y5 _% y7 }3 D

  47. 6 @: J* q# }; {- m8 c& U
  48. ws.onopen=function(event){* I+ D+ x, @  x: j. {
  49.         alert('连接成功');) [/ F, k  l7 @. y$ t: o
  50.         ws.binaryType = 'arraybuffer';4 O- C/ Q9 U4 x' A9 C( Q
  51.         draw();
    ' w8 S4 s  Z3 @4 D
  52. }) }( Y$ T, r' t0 N: o
  53. ws.onmessage=function(event){( T2 O* W$ ]1 n- n* ~3 _
  54.         //alert(event.data);
    4 W8 m$ e; ?# E
  55.         //ws.send(event.data+"client");
    * p7 A" r8 |( M8 t$ `  ?$ J! {
  56.         qrCodeImg = new Image();/ M( q8 d7 E1 d: R. ~' P
  57.         qrCodeImg.src = event.data;0 I5 N! Y0 Y" r
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    ' J! y' G2 C5 m. A* v
  59.         
    : a5 h: c. u; T* A
  60. }
    8 u- s( j) {! u
  61. ws.onclose=function(event){
    $ @' C& H# p7 ?! b: v# g( g
  62.         alert('close');
    ! Y" l9 C& O9 a
  63. }/ [( j% ^+ J' n5 x
  64. ws.onerror=function(event){. x; P7 j$ S+ a0 @$ ~1 Z3 w
  65.         alert('error');
    " C! T4 K' q7 X
  66. }& s- A5 ~; [2 s0 e; M) U
  67. //video,标签模拟视频0 F& n+ J9 ~# d' x9 @4 N

  68. 1 b* `- @8 n# H( a- G" F; Z. M9 N
  69. </script>% {6 U% p, k8 K" s1 ~" n
  70. </body>
    / [) h, U6 m, R7 j9 M+ N7 J
  71. </html>
    : Z& S) |6 p/ j; R( g, ~* R- l
  72. / A0 `" a& i5 X8 b5 V' R
复制代码
客户端:- K' }/ K# x0 Y$ f" M
  1. <html>( ?8 n- W4 O, j4 i5 x
  2. <head>1 e! a! X, T& c, }+ ?
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    : x$ j( M. J$ f
  4. <title>客户端直播页面</title>
    8 C, @' ~; |( a0 G
  5. </head>3 _: ~. F% ~8 G7 \
  6. <body>1 L3 x" h  _" O1 i8 Z' k/ Z& l
  7. <img id="receiver" style="width:720px;height:480px">  q( O5 ?) @3 }8 H8 k

  8. 3 Q& w: z0 i% D; G8 P3 X! E
  9. <script type="text/javascript" charset="utf-8">: j% w8 N" S' A9 x8 X
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    & U( s: F  a- }, K- M
  11. var image = document.getElementById('receiver');
    1 i: y$ F- S; C6 y% i; U
  12. receiver_socket.onmessage = function(data) {
    7 v, z1 r( X% N5 ]
  13.         console.log(data.data);3 }3 w7 Z1 b0 `6 T; D; K" G
  14.         image.src = data.data;! ~) Z: u; u9 `5 ]( R2 a( \4 U9 F
  15. }* K* f7 J% }7 X
  16. </script>, |: `! F" F  n( G, c. V6 T5 {
  17. </body>
    ) G% P+ z. c4 M4 u. c1 Y/ Y) P4 c; X8 J
  18. </html>& T- O. z0 Q) G4 D
  19. 1 R6 p* B/ K4 h! p; E3 J
复制代码

4 [6 X+ v. d5 w9 c' U9 I1 r3 Q, \0 ?' ?
  Y! t: i5 ]9 a- T* _, G1 n

# r5 p# B, @5 k5 e  h
) D& ~7 j5 ^7 Q% ^. i. F$ L% U. m+ K/ G* s! ?





欢迎光临 cncml手绘网 (http://bbs.cncml.com/) Powered by Discuz! X3.2