您尚未登录,请登录后浏览更多内容! 登录 | 立即注册

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9746|回复: 0
打印 上一主题 下一主题

[swoole] swoole视频直播(记录用 未测试)

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
8 R# G. \* E9 r+ y
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);0 k- Q+ t" H# ]7 Y
  2. $client=array();) w+ X# f# w5 Z% J
  3. $serv->on("open",function($serv,$req)use($client){
    4 C0 K6 F# q4 Q; S' M! G
  4.         //echo 'connect'.$req->fd;
    * J0 O0 s$ X1 f) c' u' F8 O  I$ c6 T
  5.         $client[]=$req;; R. ^" X: x7 [3 c
  6.         //var_dump($client);
    5 L) J" g% c0 w6 ^- @2 p/ h( \
  7.         $serv->push($req->fd,'aa');
    # q( i( B. G& q: _
  8. });$ p7 y# Y2 F6 R9 v) }
  9. 2 d3 ?: E% {0 q: o: k, z
  10. $serv->on("message",function($serv,$frame)use ($client){
      ]" t' Y/ R) ?( ~% C. j
  11.         /*var_dump($frame->data);
    3 E' b# D# b3 ^& a9 m( J
  12.         foreach($client as $key =>$val){
    7 |, w/ g5 C5 i% D. t4 M
  13.                 $serv->push($val->fd,'aa');5 p9 P2 W% b& Y' y; M0 o! X
  14.         }*/3 W8 l' J5 r1 t$ l: ~0 l/ Z' O
  15.         $client=$serv->connection_list();  n. @  N  L0 e9 V; n% C
  16.         var_dump($client);" L% F0 p8 Y0 y$ c" \5 w; q
  17.         foreach($client as $key =>$val){
    4 q8 Y9 p* W1 P. u
  18.                 if($val!=$frame->fd){7 q' N1 C. L9 G0 W2 Y) a/ ^) f# |
  19.                         $serv->push($val,$frame->data);
    ) g% X& ]4 }% N! D4 {% M! p
  20.                 }) q& Y5 M: _7 Z
  21.         }
    & p; @8 v- l$ W/ q8 p$ y# r) h
  22.           R6 u* K1 }& W
  23. });
    , k1 o: d2 @5 _" b# `
  24. 4 B) G0 Y4 p; `# Q$ k( x
  25. $serv->on("close",function($serv,$fd){4 S) T" {/ E. z- g$ [! ~
  26.         echo 'close';
    / B- Y. O) D( }0 ]& n
  27. });# R' p5 L1 W% y

  28. , [: A4 e# |, ?
  29. $serv->start();
    2 w" |" M$ m2 o
  30. ( Q) o) J# h, a
复制代码
主播客户端0 U) _! j: \9 k; c" X8 }. _' ?
  1. <!doctype html>, Y$ L1 ~" S5 \3 ~) D6 s# ^
  2. <html>2 _! e. j4 C0 ], Y& Y/ s1 b
  3. <head>
    7 J" r/ Y) l# x  f* z: R% B
  4. <meta charset="utf-8">
    5 c5 m+ k" }! }- d! u" Q7 a
  5. ' N) p% h. V: c1 x/ p
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    % y. n6 o9 k1 t' L, Y
  7. <title>404</title>! I' B: w- Q+ G$ Y  V) F
  8. <style>
    " g; P# N1 B2 s% }4 p) M
  9.         body{
    % J7 r1 X, ?! I1 V. @/ U
  10.                 background-color:#444;/ \( Z* i5 r0 `; h  J; L
  11.                 font-size:14px;- c8 e8 z7 P: b3 d% {; z$ ~
  12.         }
    % W% J" E* q( ^" e1 B
  13.         h3{
    ! V; y- d/ G; d2 u( ~# D- ?, c
  14.                 font-size:60px;
    # `" z* L, t' u3 H6 E
  15.                 color:#eee;
    7 l; E5 g+ N- e6 x+ J9 x# L
  16.                 text-align:center;
    4 K# s# S& I. y2 _2 U, M4 }8 J! f
  17.                 padding-top:30px;7 g" k* ]! }6 \$ J7 O  m( G
  18.                 font-weight:normal;
    2 o, J2 x8 S, U0 r! J
  19.         }
    ) Q" e; D3 G1 t* J( h) i; b
  20. </style>8 }& t- l6 b9 M- @* ?
  21. </head>
    ) `7 I1 q* ^" Q" I

  22. # e6 `: n* N1 N1 u0 i3 E
  23. <body>
    , U( Q: D4 B0 G  w5 f: C
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    - i. o( w9 T# z% @1 L0 f2 f* H
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas># T/ ~4 l. f& W
  26. <canvas width="400" id="canvas2" height="400" ></canvas>9 a4 Y7 X: ^# {/ s0 w0 t! `0 }0 {
  27. <script>9 J+ l0 k3 r( v0 k  E$ {
  28. var video=document.getElementById('video');2 }8 X/ Z$ D2 }2 r. n1 Y4 C
  29. var canvas=document.getElementById('canvas');# a$ S. [- |' p$ c
  30. var canvas2=document.getElementById('canvas2');' l3 M6 d0 G! Q/ p! `! w# x
  31. var context=canvas.getContext('2d');) @! F. r- y2 o' p' h! X
  32. var context2=canvas2.getContext('2d');
    $ Z! S- g% }$ q, ?
  33. function draw(){" `- b: o/ o$ T- A, G0 Y
  34.         context.drawImage(video,0,0,400,400);
    + U  Z/ D) R  S" Y! {
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
      r2 M1 t- B: r9 y
  36.         setTimeout(draw,800);
    . z5 z/ f$ R  P& A
  37. }
    7 F; i9 _  V4 ?9 W

  38. & m- b+ Q8 a6 p' X. V' F& `
  39. //客户端跟服务端通讯
    - T8 U0 g- M$ ]- E* Z9 x
  40. if (window.MozWebSocket)4 g) T! d" l6 v/ l' V- ~' m  g3 {4 U
  41. {; L  T0 R7 S/ n0 l
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    % K+ ~) l$ T$ x! K1 \
  43. } else
    1 r+ {3 I5 j; ^
  44. {( [' z, Y6 t; z* Q: \
  45.         ws = new WebSocket("ws://182.61.42.187:9501");; F8 j( G7 N7 k/ W
  46. }
    9 t4 }- U2 I* J  p3 S) q5 o
  47. ; j$ Q5 B% {8 `6 q: n
  48. ws.onopen=function(event){2 Z+ z# R0 L) `( U0 q
  49.         alert('连接成功');
    , v( u1 |+ j$ Z8 R" t, G/ F( x. S
  50.         ws.binaryType = 'arraybuffer';
    : d9 k$ [( Y, r; |
  51.         draw();
    9 X, h+ C: s  c* ?. {
  52. }! e% |2 h3 Z2 z! A. I
  53. ws.onmessage=function(event){
    : O  M& Q: o1 H; k2 b$ i
  54.         //alert(event.data);
    ! K6 r) H+ d+ {* u, _
  55.         //ws.send(event.data+"client");  E4 {$ \# D6 Z* t* O
  56.         qrCodeImg = new Image();5 o  k5 a+ q3 E+ i! M
  57.         qrCodeImg.src = event.data;
    6 k% u: |6 k5 F1 _1 D
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);3 _: n( m2 k0 `8 G" p
  59.         0 d/ j, P4 R; t3 N- P. |
  60. }
    6 y3 L, J% O, K# D9 V0 j
  61. ws.onclose=function(event){+ I' b) g, U( z/ Z* `$ ]
  62.         alert('close');  b9 B9 J& R$ K9 S" N
  63. }
    4 B. ^. ]& b( x# }
  64. ws.onerror=function(event){* [, Y+ d/ c* [+ k7 b
  65.         alert('error');
    " q. L- J/ a  z. S
  66. }
    8 ?! J4 A- _* g' v* A
  67. //video,标签模拟视频
    9 h2 X2 p# H/ p. t1 @
  68. 5 b0 d+ ~) z9 @
  69. </script>
    ' k% `' R) ]+ I* U. W
  70. </body>
    ' R& ]2 a" _; r9 a1 i8 @4 e" t. `
  71. </html>- w" V2 y1 f  S6 E+ U7 @7 i
  72. % H- B- T1 s% `$ v) E! ^
复制代码
客户端:
' {5 `; T, K- e" D( [# J* Q
  1. <html>: X- |* H& t' L
  2. <head>
    + R; b0 Z' \; A; n8 q3 j
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">3 c7 m% t& @2 l9 L! Y
  4. <title>客户端直播页面</title>0 g; ~4 A2 d+ ~( s3 L
  5. </head>/ x- F* V4 X4 E! j
  6. <body>& Z7 \/ B0 g; P" x/ g/ O) e
  7. <img id="receiver" style="width:720px;height:480px">  _+ r" R/ S: N2 \8 A

  8. 8 i3 b% o4 N7 S
  9. <script type="text/javascript" charset="utf-8">1 d, Q) @9 R& H. x5 c" T! E
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    $ J2 g% z  ?! ?6 ]7 v' }
  11. var image = document.getElementById('receiver');  @  p; ~: T' U- H1 d; J( G, a" b$ C
  12. receiver_socket.onmessage = function(data) {/ U+ O% x  J7 l- P" J$ ^
  13.         console.log(data.data);
    1 t: y9 p! M* b. ?
  14.         image.src = data.data;8 W7 r4 |8 i, j0 H$ U7 x! \
  15. }
    5 R8 h5 I$ \% q
  16. </script>
    - J8 y' J6 l1 F4 J
  17. </body>
    * ^8 F; `) A3 O& T
  18. </html>
    , w/ Z! Y5 _/ T1 M( X. Q9 v
  19. 2 g5 C5 Z" G6 y; K
复制代码

( G1 c( e7 \  I( t, p
% J) W* h- \* g, o5 u2 U
* ?! l. H6 F/ y2 M: i; [# D+ N: T- J( R

- c5 @9 g, l' F9 P" ~  j: P, i0 Y( ~( N3 v" N  V
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-20 05:22 , Processed in 0.118055 second(s), 19 queries .

Copyright © 2001-2024 Powered by cncml! X3.2. Theme By cncml!