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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码% r& G! O$ I3 b1 v& \0 G  }; U+ i
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);  f! `1 w1 J$ d
  2. $client=array();( t% J, Y$ w( S8 M* |
  3. $serv->on("open",function($serv,$req)use($client){8 t+ g$ \! k1 X- E" U% _
  4.         //echo 'connect'.$req->fd;/ x' n9 k# h6 [7 s
  5.         $client[]=$req;
    # b& B9 c: q, p8 ]
  6.         //var_dump($client);# }$ N7 Z) H1 u3 r$ e
  7.         $serv->push($req->fd,'aa');
    5 }6 `4 Z1 U. T* V
  8. });& e; b+ k9 D* K8 g
  9. ( K$ d/ j$ w* Q0 ^4 T* s
  10. $serv->on("message",function($serv,$frame)use ($client){
    , c7 d3 y: {- ]4 f3 ]: j' p
  11.         /*var_dump($frame->data);
    $ b4 U5 o* t8 t' }' Z2 P+ ]
  12.         foreach($client as $key =>$val){. d# Y& _4 C5 p& W
  13.                 $serv->push($val->fd,'aa');
    7 [/ Z( c. M& u0 {6 y$ v9 Q4 ~
  14.         }*/
    7 R* W' o6 l2 Q' W; e; x7 g
  15.         $client=$serv->connection_list();3 ~' W- y; \, q* ~; B. ?
  16.         var_dump($client);
    : `( i9 A0 m5 q: S+ T# w
  17.         foreach($client as $key =>$val){
    & m( y# ~: h1 Q; ]
  18.                 if($val!=$frame->fd){, L/ Y' c+ q& p* H. G! H+ n
  19.                         $serv->push($val,$frame->data);
    ' ~+ U6 S# X! v
  20.                 }
    3 C2 P# I9 Q- l0 M3 ^
  21.         }
    ) r6 z) U( h$ Z; V; e0 c
  22.         : C' x+ @/ ?% n8 ~) O# ?
  23. });
    : S4 o* E+ k! |) M
  24. 4 b4 E2 F, Q& S# a. p# g; `- r
  25. $serv->on("close",function($serv,$fd){
    1 L2 R" {$ S7 C6 U
  26.         echo 'close';
    1 ]! r+ c! Q0 p" v3 Q1 ?
  27. });8 |! k' `& h5 t
  28. 0 y; s; ~5 Q+ _+ Q/ o: t
  29. $serv->start();
    4 R- a0 [* Z: L$ G3 r
  30. * N4 y# }% Y) k- |4 X
复制代码
主播客户端, o  s& P2 J, y
  1. <!doctype html>
    0 Z& m' O' D, ]; h
  2. <html>+ ^8 s7 y6 b7 z: r  ]" A" m7 M
  3. <head>$ K' M$ C# V2 h" i- i
  4. <meta charset="utf-8">
    , g# @0 S) L) v, [' D
  5. 7 @" j/ @% }+ F# d
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">. w8 M" z& k- q3 Z8 s! Q3 e, Q# f7 D
  7. <title>404</title>
    / C' h; i9 L. X' M
  8. <style>
    4 Q$ p0 M+ X6 T. i1 w
  9.         body{
    8 l% [" ]: I- t8 P
  10.                 background-color:#444;4 M0 \3 \- x- r  R! n
  11.                 font-size:14px;: T' D$ k' y( h" c: o
  12.         }
    0 Y0 ?% e' m/ g, y, a, b9 y
  13.         h3{
    . P% P% C( w1 q1 ?8 l) S
  14.                 font-size:60px;
    " c/ E' r: |# s
  15.                 color:#eee;
    0 K! e; E0 c( P7 r1 p5 [
  16.                 text-align:center;
    9 N. Y0 [4 x0 Q) w- k) {% [$ g
  17.                 padding-top:30px;
    8 T5 @" E& o* Y/ E* f4 @
  18.                 font-weight:normal;/ ]( }3 `: i- S' j
  19.         }
    0 Y9 i9 I: i) ]* c( w  u
  20. </style>
    # i$ \* o% v1 i& V6 }  u
  21. </head>
    7 S) [9 d& d. V# v1 p
  22. # [" w) O8 d' \1 `# }8 ~
  23. <body>
    7 [7 O7 {3 ]" y
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    ' y8 t4 [: @3 B& J5 y
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    8 {2 c- L- {( g6 t8 P! F6 c" b; T/ V
  26. <canvas width="400" id="canvas2" height="400" ></canvas>8 c& a. g* U2 g
  27. <script>* l3 ^7 R3 |$ t4 e0 J
  28. var video=document.getElementById('video');6 D- G8 x' i# Y* k4 B9 ?
  29. var canvas=document.getElementById('canvas');* _( A- J. H% |" c
  30. var canvas2=document.getElementById('canvas2');
    1 P" W& `8 K  Y+ E1 @4 M
  31. var context=canvas.getContext('2d');2 S7 G' o3 F; g" s$ H: n  w. c
  32. var context2=canvas2.getContext('2d');9 H' p7 D- T3 i! p1 u6 g* L8 W
  33. function draw(){
      l3 ~7 c7 {. u" Q6 L2 |3 v
  34.         context.drawImage(video,0,0,400,400);
      e) W9 N3 S% `# z& L' k4 {
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    # C" j; c: Y( G) |. n; m
  36.         setTimeout(draw,800);
    . i0 r1 D1 n! F- x
  37. }" d* @, w0 G# ?1 H- t& l# ~
  38. 1 c  L/ U0 `6 _5 N2 B4 B
  39. //客户端跟服务端通讯
    / }$ W& ]4 o# W/ u8 `7 ]3 D" p7 y
  40. if (window.MozWebSocket)
    6 I3 }' t0 v6 f' A: i3 ~1 t
  41. {# e2 h- Q' V  x( H
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");6 L; ~2 e& \4 q
  43. } else
    # @6 i' j3 v, f8 I6 h# K: H
  44. {! @& p. G4 h) A
  45.         ws = new WebSocket("ws://182.61.42.187:9501");4 D$ u. b( c7 M* @' r8 y
  46. }7 S8 z+ J' T7 e% d! {
  47. ) X- j  [4 t4 r( g3 k. R% S& l+ S) I
  48. ws.onopen=function(event){
    ( F. ^4 K7 Z4 [: q4 k8 @( K
  49.         alert('连接成功');/ O: g6 v0 z1 o$ o
  50.         ws.binaryType = 'arraybuffer';: b- a: |# E4 _7 \& I* j: j, R, s
  51.         draw();  m; k) B7 Q+ ~# s3 J
  52. }! A; r! [7 i5 Z7 p0 j( K7 R# u
  53. ws.onmessage=function(event){
    & u8 _+ Z+ n3 f1 z1 A
  54.         //alert(event.data);- A% v, ?/ h% T8 l
  55.         //ws.send(event.data+"client");" R& I2 p  v) x5 q
  56.         qrCodeImg = new Image();& j7 w, t$ I* _9 d  w( G: g8 n
  57.         qrCodeImg.src = event.data;0 b; y% c' {# @; J! i4 y
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    $ ^! ^# _# v+ b1 v1 J
  59.         9 s, b. b- z- `9 r, u
  60. }6 C! d5 H6 v& u1 c, P$ ]
  61. ws.onclose=function(event){; C( a' p" J: m
  62.         alert('close');
      Y; a- J! ?/ g. b# l
  63. }
    - e4 p- y: A& m  N2 U
  64. ws.onerror=function(event){
    1 |( M, g# z6 p7 Z7 J# w) u; S
  65.         alert('error');3 i: N% \) I2 v5 M$ k
  66. }
    $ q; E$ O# r* s1 ^. z, c9 I
  67. //video,标签模拟视频
    & y7 ^$ c$ p# G5 o8 K
  68. . }7 `! {" O( Y5 {4 l
  69. </script>
    ) F8 B9 `/ T( j1 O. p0 H
  70. </body>8 G) G6 x& ~2 m( A  i6 O& |/ [2 p
  71. </html>
    $ _! m, A0 x2 i1 M5 V
  72. & _. o: `0 i, V* Y/ p
复制代码
客户端:
# j# T* b4 ^# ~
  1. <html>* y7 I9 C1 U+ b  _
  2. <head>
    ; L% y; N8 }1 f/ U$ g
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">7 B& \, Q. O0 V& B* C
  4. <title>客户端直播页面</title>& O7 Z. a) s  i0 X% V- W, ~; k
  5. </head>
    : v) E* v8 Q* R
  6. <body>
    " D4 y; X8 y" Z$ I
  7. <img id="receiver" style="width:720px;height:480px">0 l- _8 Q' I9 c% e6 m* e

  8. * ^7 T" U1 W* Y; M
  9. <script type="text/javascript" charset="utf-8">
    4 x0 d) O5 e& |$ n
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");, \/ \1 K4 ?4 k0 b5 X) ~
  11. var image = document.getElementById('receiver');% f" B: X. F# B0 Q
  12. receiver_socket.onmessage = function(data) {
    ; \4 Q; P# s1 R; z
  13.         console.log(data.data);. j0 D9 h8 Q) Y; B6 p9 i$ c
  14.         image.src = data.data;
    3 q( h2 o, s+ w' _" d' H! A2 N
  15. }; N3 ]  n# w. e9 R9 r
  16. </script>
    , z" u8 }" C3 y8 e5 v- }0 j2 H
  17. </body>
    / \" ~$ h% B" b* J; M  G% ?
  18. </html>
    4 X1 {$ f, T3 O2 q+ C( T/ x) f
  19. " x4 r1 l8 ?3 l5 s8 `+ y8 c
复制代码
1 ^2 z- N: R: X9 V

! f+ B, N3 k$ c  D% y8 X8 x! i3 a0 k+ {: h, o) s- X) z8 a

' @2 l1 @; m7 |$ L$ g, i  ~
: O- ?) \+ b1 K% k! v
6 F* P2 H: O5 j0 {& H0 m+ V
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-17 16:06 , Processed in 0.073002 second(s), 19 queries .

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