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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
服务器代码/ t! b  E. R! K8 U: F+ |
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    6 N% h  C4 h8 r: _5 A& i1 `
  2. $client=array();
    6 c& R; ?* n. q
  3. $serv->on("open",function($serv,$req)use($client){
    6 U# N7 f0 e; H; h
  4.         //echo 'connect'.$req->fd;: J" o; C+ h  U  s
  5.         $client[]=$req;" ^. w  v# d, I, c( X; K
  6.         //var_dump($client);2 A- w' }1 l: z
  7.         $serv->push($req->fd,'aa');
    4 V% C* B: y) `" L- ^( y6 V: M
  8. });
    ( ]6 k( J4 J7 \% W

  9. 4 z& A7 r+ c1 W7 D% C
  10. $serv->on("message",function($serv,$frame)use ($client){" F0 V+ K! V- J' i! _
  11.         /*var_dump($frame->data);
    * T4 O* Z2 n; i6 f' R
  12.         foreach($client as $key =>$val){* v# G: C) r* Z+ n6 [) R7 P
  13.                 $serv->push($val->fd,'aa');
    , a: V0 g, B1 z- R! w( @% o- b3 e7 k
  14.         }*/* n" W$ y( w2 G' j% \
  15.         $client=$serv->connection_list();
    2 k4 \! j) b: _! h% u
  16.         var_dump($client);! K# R8 z$ o' P
  17.         foreach($client as $key =>$val){* H2 e2 i* l. P$ Z* s
  18.                 if($val!=$frame->fd){
    3 u, U. Y) i! t: J
  19.                         $serv->push($val,$frame->data);0 T, U- F0 @& o- {' _- }
  20.                 }1 F) \) h+ ?6 `* n/ P6 E
  21.         }
    ( I4 o3 f2 R3 s/ ^9 x- q  o4 Y7 o
  22.         # j0 `2 _2 |5 S* ~
  23. });
    . V9 k/ o6 P7 [& B% R* V, [& l
  24. 9 e- f7 m# G5 _& S2 d: V
  25. $serv->on("close",function($serv,$fd){
    6 |  L3 m# y$ i0 _
  26.         echo 'close';
    5 x) J8 Z9 J1 _' T
  27. });' `0 W8 a  |; s% {& B8 w1 I

  28. : l3 h: E* t1 g5 R2 J, T, n7 C
  29. $serv->start();2 F# h' V! Z  f- U4 E

  30. 6 c6 {& _1 \- z- [
复制代码
主播客户端
. F" P: s; K. x* p- g
  1. <!doctype html>
    3 G2 ~/ V' |- x9 I2 x
  2. <html>
    & D$ {5 _! ~& W) i
  3. <head>( F' L& H0 o  x
  4. <meta charset="utf-8">
    : W- M. \. q+ L. H9 k

  5. 4 G5 [. \! {5 [( C- d9 o
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">- C" \2 I+ R1 H1 a5 t) U% @
  7. <title>404</title>8 E' b  v8 f2 ^' ]
  8. <style>) W$ u" h6 D9 J3 u' {
  9.         body{
    9 e( C5 P" b& D, t% {1 e
  10.                 background-color:#444;
    # {1 u  ]+ ], L: |
  11.                 font-size:14px;( }! Z: N% N: Z0 N6 h$ p# N. W* f$ i
  12.         }2 q% A* g& E3 h" o
  13.         h3{# m1 F3 _2 M/ a! O- g( P3 F- z
  14.                 font-size:60px;6 L8 z  R9 ^4 L* |  n% s' P
  15.                 color:#eee;, j- y8 i1 w# j7 ^9 N9 H1 b
  16.                 text-align:center;
    - ^9 X5 R$ {8 Z7 X! O
  17.                 padding-top:30px;$ q2 e. Z5 Y3 H7 Q/ d/ f
  18.                 font-weight:normal;
    + N6 V8 i1 y+ @! O( J! f, P  J2 I9 \
  19.         }
    , E; Z( H  ?5 ~' _5 ~% J. [$ H4 O4 x
  20. </style>/ v& F! C4 O& O0 [5 g/ {" A
  21. </head>
    2 m7 @: ~+ J( S; J( S' M0 n6 ~6 p

  22. $ F# @2 O3 J( d
  23. <body>( U; A& y; `! w, `7 [3 V& X) ?' g
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>- X' C5 E: L# v7 e
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    2 L+ n. p0 v5 s" Q9 C& g
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    $ s/ }$ O1 X' L2 C9 q/ u+ T4 ~
  27. <script>
    ) t( P( x5 o5 S2 G2 @
  28. var video=document.getElementById('video');
    ; P8 A2 J5 F8 R, j- C0 T6 g
  29. var canvas=document.getElementById('canvas');
    ! R+ d* L0 f. k
  30. var canvas2=document.getElementById('canvas2');+ `, ]3 A- L: d  j8 f6 D9 P
  31. var context=canvas.getContext('2d');$ _( |$ K9 ]7 j
  32. var context2=canvas2.getContext('2d');
    4 C9 D0 ]: Z# W% J/ g
  33. function draw(){7 q' [' E0 J' X) P: {
  34.         context.drawImage(video,0,0,400,400);
    7 z  N7 q& n5 [9 w) x" d$ t7 x
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    . U' H% r- G8 R' I# f
  36.         setTimeout(draw,800);
    9 [% T9 G0 Z4 H, T6 H; g
  37. }5 }5 t' {3 i% a

  38. + E& D( h2 a& C8 V8 H
  39. //客户端跟服务端通讯
    ! p! M. u  P: y5 V7 }9 g! {
  40. if (window.MozWebSocket)! l8 b" D" w$ i8 i
  41. {# U/ ^8 N+ C0 F% C% a6 g. ^
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");( Y. b* N; `6 M% N/ y
  43. } else* E; [: F- W4 W! F; R: h0 P
  44. {! n# e6 z' Y) Q: O2 J3 J+ d9 r6 l
  45.         ws = new WebSocket("ws://182.61.42.187:9501");5 ~$ j  q/ R3 B" V
  46. }1 f8 ?. }1 b3 B8 x) D

  47. # }, @3 z4 o& ?! B0 n! H/ d
  48. ws.onopen=function(event){$ t$ i$ y5 e, L( x
  49.         alert('连接成功');
    : v7 X# _3 d) D1 U3 U" n
  50.         ws.binaryType = 'arraybuffer';
      d) h3 v( D8 U% r. a- Q
  51.         draw();& O0 S3 T+ E1 a' W" i0 \
  52. }
    - B: a5 U0 r7 n/ y6 {( w- C
  53. ws.onmessage=function(event){
    ( ~6 _+ n2 R; H' Y
  54.         //alert(event.data);5 i4 V8 M" ^# t# j5 n5 [! s
  55.         //ws.send(event.data+"client");
    7 X- }( V. H! ]* A' A* U8 m: a3 @
  56.         qrCodeImg = new Image();, y: H  E# |2 }7 f0 n
  57.         qrCodeImg.src = event.data;
    ! W2 V6 n: r. B0 t' J
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);# H0 ^, o: ?4 ^/ n6 M2 t$ V7 v
  59.         + Y5 z) T; c/ D7 [
  60. }
    & G) L2 ]7 Q" `4 O% k' l" B5 K
  61. ws.onclose=function(event){9 [2 J5 O9 \  Q& ^3 Q2 `9 q. @: f
  62.         alert('close');
    * J3 A+ K: s. v% ^7 H, m) f" n
  63. }3 E8 f) y* E3 z( \1 R: l
  64. ws.onerror=function(event){0 S5 A6 _5 P% R! V
  65.         alert('error');3 \$ g. y8 w, [9 Y3 t, n& k7 ^
  66. }
    - I# o' V4 }$ i) v4 @2 y+ d! w
  67. //video,标签模拟视频9 p: ^: z! F6 ~! a; ]/ E0 t1 r

  68. : l' P6 j3 N- A' q: H2 r: n1 I
  69. </script>
    : g) c4 E' v8 k) X; N
  70. </body>
    ' Q7 I6 F3 ^! o- `$ j/ P
  71. </html>$ D  L( x2 |0 o1 i- k2 p

  72. ( z  L5 H: N7 f% V8 Y. t/ ~2 T
复制代码
客户端:
0 t% I1 A% U2 f' p, W% i
  1. <html>; _. b, y! O5 t" Z# n' a/ ]/ B0 v
  2. <head>+ B1 o' W+ w* L9 A0 }
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">8 ]- `* H; B9 O& V
  4. <title>客户端直播页面</title>
    , a7 H: }  n8 s0 X1 o" _: {3 }; E9 b  f) K
  5. </head>. g# Z# ?/ W1 r" x
  6. <body>2 ~9 `3 D7 \- w& V, b6 b3 x
  7. <img id="receiver" style="width:720px;height:480px">4 }6 ?  @; n- [" n- y
  8. ( E5 n2 G3 O9 ^8 p$ R
  9. <script type="text/javascript" charset="utf-8">
    " Y0 x9 ?( }: g1 S0 ~4 J' O
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");6 ^& l, A/ q$ L: m! S' h& L
  11. var image = document.getElementById('receiver');9 s% r0 ?, X# p) T
  12. receiver_socket.onmessage = function(data) {, p( ?: s4 z4 Z9 J( b
  13.         console.log(data.data);$ m# w  {$ Q1 k: I. y; ]$ Z
  14.         image.src = data.data;4 n: t# ]" L8 G7 v, H
  15. }
    , q! u1 S4 G5 d. q, I
  16. </script>& o/ b: T6 R3 B- P6 S0 K% D
  17. </body>& p$ h1 j6 h- j6 ~/ v
  18. </html>  \- ]+ q+ `* k3 o% x8 P

  19. , [1 o, N+ C& ^4 s* B/ }
复制代码
& p$ b$ h  O( l2 O' U

+ e) s, M7 g8 b% \/ R6 F9 p7 s8 v, d. z$ q/ q& a5 |
3 ~, x( k7 i6 l6 i8 V: z

' }' J9 w7 T3 ?7 X& p+ ~+ R
2 }! d# i5 c( N( I/ v% e; v3 P/ h& ?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 11:24 , Processed in 0.048315 second(s), 20 queries .

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