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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
% E5 Y+ ^6 ?1 y( [$ A6 k; G
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    # E" l# V1 p" W% X1 n
  2. $client=array();
    # t( d, g: X# S& o5 ]. X, O3 X
  3. $serv->on("open",function($serv,$req)use($client){
    " @% p+ F  _& ?* M4 Y- \; P/ e7 [9 W) f
  4.         //echo 'connect'.$req->fd;
    5 R3 b$ l# B: o4 Y$ \3 {5 X+ ?
  5.         $client[]=$req;' u3 d/ F3 F0 v4 M& }' q
  6.         //var_dump($client);
    * D/ T2 M# X  _
  7.         $serv->push($req->fd,'aa');) W/ B+ p9 M* g
  8. });6 o+ t* h4 H5 o8 p. \1 a
  9. ( ]. l4 s1 E7 e
  10. $serv->on("message",function($serv,$frame)use ($client){. q0 b6 v6 c+ U' c5 z  ?8 u2 P
  11.         /*var_dump($frame->data);7 u: Q5 H5 P; k0 b: b/ c- z! _& n
  12.         foreach($client as $key =>$val){0 M2 H7 q0 P1 U* g# P. j: A
  13.                 $serv->push($val->fd,'aa');
    3 D; ^( d  U- _1 Y! s8 Y1 @
  14.         }*/
      L: T. A, w9 E; D: P3 f
  15.         $client=$serv->connection_list();# }$ n# T  l4 r6 m$ h" {
  16.         var_dump($client);9 p- Q/ T4 `9 q8 y: V# U4 A- y
  17.         foreach($client as $key =>$val){
    / J8 S( x$ O# T) m( c7 \4 |
  18.                 if($val!=$frame->fd){
    , K- B6 O" D% @7 Y9 R  l" l
  19.                         $serv->push($val,$frame->data);& P; D9 g4 H6 @" [: B  y2 b
  20.                 }
    6 w- H/ z5 n( s! ^2 L
  21.         }
    * J3 q: {- A+ i* n* c% }
  22.         ( d( T- E( [# _8 A' Z
  23. });  h% A9 W# k* ~$ |% r$ X8 w7 {: I
  24. % S% w( `" u. a2 W9 p( `
  25. $serv->on("close",function($serv,$fd){. w, q2 U1 r- r) \; f2 F# q
  26.         echo 'close';3 W5 \- C( b4 J+ J: C% m5 C$ u( B
  27. });
    3 o" y, j2 u' M; |# j

  28. & P1 I% `$ S" V2 G9 f
  29. $serv->start();
    % u0 _( W: k8 e$ s/ s( Z
  30. 0 \2 j8 x* g. H' E% X% [
复制代码
主播客户端( E# }+ x7 }4 X
  1. <!doctype html>6 H0 {4 B2 S9 {1 V
  2. <html>
    ; @$ o, H* K1 S4 `
  3. <head>' w, ?- _( a# l% |. l( k
  4. <meta charset="utf-8">
    2 X$ j  B  i  K+ ?

  5. : u0 S0 Y' h6 h4 \8 T
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">6 F# q  r  e0 g- ^
  7. <title>404</title>
    ; }" w' }" f# _4 `8 V
  8. <style>
    3 E. }6 M7 I( u; s" o
  9.         body{
    + W/ ^& i  v! t- W1 }5 [
  10.                 background-color:#444;
    , Z: l0 _' W! L
  11.                 font-size:14px;; C3 e$ q4 ?3 Y4 g9 p9 z, M
  12.         }
    " G( G" x; l, u2 R! U( u& V
  13.         h3{0 P. |: R& Y3 ?
  14.                 font-size:60px;8 `  j7 M$ r. p( X: s, l! z! X
  15.                 color:#eee;* f. J* P7 k, e& Z+ O- I7 B' z
  16.                 text-align:center;
    ; \* e) J. Z, W% ^! O9 t$ n
  17.                 padding-top:30px;
    . o0 h1 k) s3 N7 C9 b
  18.                 font-weight:normal;
    ! o1 B9 F/ Z' T/ q
  19.         }# W7 R! p- }0 ^8 |* |4 V
  20. </style>$ @; |+ d$ @/ `) f
  21. </head>
    % s$ i8 r$ Z5 ?) Q

  22. + W, e5 N7 P9 s) ^) V8 G
  23. <body>
    4 ~+ E& ?. E+ z# D" [
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>! Q) Q/ N% U! ]4 P
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    ' z8 y1 Z9 O5 b6 ^
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    % l+ d  `0 m: o6 x% k$ a8 C9 u
  27. <script>
    ) S1 [; Y8 \7 z3 ]
  28. var video=document.getElementById('video');
    , Z1 S& M& c" Q: [+ ~6 B- Q
  29. var canvas=document.getElementById('canvas');
    , f) p6 A' z0 q8 D
  30. var canvas2=document.getElementById('canvas2');9 L2 L8 [! L$ \1 d! T# H  C
  31. var context=canvas.getContext('2d');
    # d; \* `# n! u/ U8 z( r4 i
  32. var context2=canvas2.getContext('2d');# R& m6 ?( _/ Z7 v- D, U
  33. function draw(){
    $ o' ]- r& T9 G4 S. u
  34.         context.drawImage(video,0,0,400,400);6 v' Z1 t& d0 \
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    ( I& v# h- [6 k0 ]) h' t& ]" r
  36.         setTimeout(draw,800);, w& t' b, L% J1 `# h
  37. }
    + u; |; S! H0 S' L4 I

  38. % u# P8 [3 ?& W/ N; \
  39. //客户端跟服务端通讯
    4 W! O- S. U% p
  40. if (window.MozWebSocket)# n2 v2 e  o) N4 u
  41. {
    + x; w# C0 K9 f7 O. I0 H- o! O
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");7 P' B% G" K% e' h. v: g
  43. } else% c# ~; H# ?* z# i/ X5 o2 V; _
  44. {& ^9 k, i6 i9 \# G4 c4 h4 S3 z
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    3 j. j& d4 z) S+ N' w6 j; @
  46. }/ C; C1 c4 i2 l6 m  S0 P1 m/ L+ c
  47. ! c9 {6 u5 U  Q7 A9 Q# v& n+ e7 t
  48. ws.onopen=function(event){7 C4 P7 u/ ~) i# o
  49.         alert('连接成功');
    2 y: B, {) I& ]7 W9 `
  50.         ws.binaryType = 'arraybuffer';0 m, c) b( Z: t- u, I1 n, u
  51.         draw();, _; }6 n1 c0 N
  52. }
    1 h/ u9 J+ X5 h& n. Q
  53. ws.onmessage=function(event){; Q% @7 L2 V! m7 d! y" K
  54.         //alert(event.data);9 ~( T- }, J( Y/ h
  55.         //ws.send(event.data+"client");  X6 k  w7 S) y. L. G; }/ m: L
  56.         qrCodeImg = new Image();
    1 M  ]9 W: g) A. ^
  57.         qrCodeImg.src = event.data;7 J. |# V3 N' j1 ^
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);' ?0 A. r* C  U: h
  59.         # Y7 L/ |2 e  e8 Y
  60. }6 A& `7 U/ v+ F& t
  61. ws.onclose=function(event){
    3 C8 m( e+ n+ E# w
  62.         alert('close');4 I/ R7 C4 J! I  E  @0 K9 M1 ^
  63. }2 }; L+ z2 W3 K' Y6 l6 s, k. `( Y( `
  64. ws.onerror=function(event){
    7 C! d5 U1 j# v% c6 I- b; Z! C
  65.         alert('error');
    9 h$ @+ Z# A- Y3 k/ S& y3 [' C4 w
  66. }$ P; d% s0 x; U. |  I
  67. //video,标签模拟视频
    0 W" B& |: ~3 V2 F( `8 ?# {0 r% m

  68. $ E: V, z; N) Z* Q. |$ d
  69. </script>
    & ^# j$ h6 y/ s( A$ K
  70. </body>% B" x9 D! W: p% Z, A4 M
  71. </html>
    & G1 S/ R- B# }  f1 e) {& g$ U

  72. ' c5 z9 P( G9 i, E) r
复制代码
客户端:
$ k$ Z0 }+ t/ n, p3 I8 G0 R
  1. <html>8 A0 R' X- F2 P8 F' {
  2. <head>% q, t; @2 p$ N& D
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">, V' R$ B1 H( @: O: k% s
  4. <title>客户端直播页面</title>
    # D2 p" C, B* W
  5. </head>
    9 k8 p6 @, |4 J! b
  6. <body>
    ) C+ W( N5 T# d4 z) H
  7. <img id="receiver" style="width:720px;height:480px">
    % o3 B; A9 h- r" C: a4 Z
  8. 8 ?  [' C, J; \; K$ U7 G* ?) j6 o
  9. <script type="text/javascript" charset="utf-8">
    $ I1 |( L) B) K6 d
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    8 w" Z2 F" d1 }# a) H
  11. var image = document.getElementById('receiver');6 o# H4 `& ]% J6 X, l1 K4 g
  12. receiver_socket.onmessage = function(data) {, B3 b! _5 I, ^
  13.         console.log(data.data);! o/ E" Z3 v4 J
  14.         image.src = data.data;' L6 |: Y# C6 l- D0 J( ]3 O9 P
  15. }7 k( `, Y3 f8 q/ w1 n
  16. </script>
    $ q" F1 O& u# L' k& N/ O4 ~, ^* V/ P
  17. </body>5 R6 z# X( k$ K" ]' P) j. g3 O5 N- p
  18. </html># q2 k' Y2 |7 ?* g

  19. 0 e% ]! _1 g& N& V
复制代码

, s6 X- H% ~4 G* Q( o: t" E' L$ U8 w

# a" i0 u) `/ i0 N0 q* d- }$ t0 i" W- |' \. ^

/ q+ I2 A. j7 h, ^! u( h9 P! V1 _+ z- O2 R) N. g9 T
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 08:09 , Processed in 0.054393 second(s), 19 queries .

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