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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
! r1 a5 m6 {6 [5 `% Y
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);' D+ |! s; C( h% U3 }4 ~1 f- X
  2. $client=array();
    $ Z3 |2 _4 u. s9 T% k+ J! A
  3. $serv->on("open",function($serv,$req)use($client){+ {8 |+ X( \  H* s; w
  4.         //echo 'connect'.$req->fd;% Q! J* Q: E; {. ^7 k& X2 a( r
  5.         $client[]=$req;
    5 n# E( a" U$ P3 h
  6.         //var_dump($client);
    & \' {& O% @' X, O: M8 B1 v% i- X
  7.         $serv->push($req->fd,'aa');6 q2 w5 W. k6 S9 k
  8. });' C& w% v, y3 D$ ]. I- |- ]; c1 w

  9. * Q6 u2 v  x9 M, ^: F0 q+ }1 \
  10. $serv->on("message",function($serv,$frame)use ($client){( v* Y$ i% h* x. n! A
  11.         /*var_dump($frame->data);
    9 H$ \5 U) q% `  _4 U
  12.         foreach($client as $key =>$val){
    3 c3 j- i' M$ ?6 [, `1 `3 u! N  t
  13.                 $serv->push($val->fd,'aa');+ {8 r( ^" _  e  t: O- s8 v: i
  14.         }*/
    * J6 c( b) Z3 }3 s; r9 I1 e
  15.         $client=$serv->connection_list();
    - I6 X- x" O: ^7 K+ C/ p6 Q
  16.         var_dump($client);' d( T: q& K4 V3 b
  17.         foreach($client as $key =>$val){8 p" s& a1 B, _0 g( L4 w
  18.                 if($val!=$frame->fd){% n7 X: Q* |, q
  19.                         $serv->push($val,$frame->data);
    + z+ X3 K& F. f. Z8 K/ l# Y( o- d
  20.                 }) Y' Z+ c  @2 Q  D. W; ^* [( a) z
  21.         }: v- v0 X( X8 `/ y. o$ v1 j
  22.         & k& X7 r% s" s! `% i- R
  23. });9 Y2 a6 E: q- ~
  24. ) m; }1 m, |" p$ h/ R. v: B
  25. $serv->on("close",function($serv,$fd){- E8 h2 B3 O. {/ M2 X( k
  26.         echo 'close';: d: |, ^0 `/ }  l  T/ ]' X4 I* I
  27. });  z9 e- \3 P+ b, ~4 A
  28. " y, D2 A9 g7 ~  S4 c/ ^; v8 T/ o: Z+ A
  29. $serv->start();0 K# W- ?2 j* Y" N6 s
  30. + {1 r7 v( N: [9 B/ f- o
复制代码
主播客户端  P5 A: g) h7 @" w
  1. <!doctype html>
    ; r& k) x3 w0 j5 C# y6 P& h
  2. <html>) f) L# [6 p8 w/ h' a8 j
  3. <head>& [. q# F/ q. J: A
  4. <meta charset="utf-8">
    # s: j/ c& f* @' w

  5. % h$ @7 Z4 @# t+ M, p
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    2 T9 S. v, I" z* r' {2 [
  7. <title>404</title>
    : T  d. Q) }& R. h
  8. <style>
    8 \0 j( n! U! m6 O+ m
  9.         body{" e) n% v$ R7 g3 A0 K8 j: r2 Z( S
  10.                 background-color:#444;
    0 G' m+ c5 S2 R# A3 ?3 c/ Q: J
  11.                 font-size:14px;
    % e/ R" d6 a7 e+ B( m# ^3 x
  12.         }5 I4 Z' J/ O! q2 G- @
  13.         h3{
    . `% W3 B' k1 ?& }
  14.                 font-size:60px;5 b; L' b+ h- n. h
  15.                 color:#eee;
    ( y& m  @  ?0 {5 A/ v
  16.                 text-align:center;. C7 g( x* z; ~6 K# @
  17.                 padding-top:30px;8 m2 h7 t: ^) U9 f3 k* v6 Y
  18.                 font-weight:normal;
    * \2 r! S/ i# \$ P" j
  19.         }
    6 c9 C. U* a1 j- X) U3 Y% C
  20. </style>1 n6 x) g/ n, f( a
  21. </head>9 A, g, c+ t4 n+ r

  22. 8 S# L4 f! ~0 b$ c8 {- g
  23. <body>/ x9 |5 I, ^; u# X
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
      k* c2 ?  V8 O' M6 m2 e6 A$ X
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
      Q4 N( R- M4 n) f7 m
  26. <canvas width="400" id="canvas2" height="400" ></canvas>! |, `. x1 i$ j- l, X" T! i9 L
  27. <script>3 j/ y$ R4 e! P0 \  }, `
  28. var video=document.getElementById('video');. I+ {" M, {: M& K
  29. var canvas=document.getElementById('canvas');
    8 X/ a8 O4 B; ^) J: e
  30. var canvas2=document.getElementById('canvas2');7 p( h9 p' V5 W# h$ T/ d" |
  31. var context=canvas.getContext('2d');
    7 E8 P6 |9 o, L" s' n9 t
  32. var context2=canvas2.getContext('2d');" R: I! `  }' M2 M, w
  33. function draw(){1 l& l7 s) }. H, h! g6 a  m" c
  34.         context.drawImage(video,0,0,400,400);" I% F; R3 k& b3 ~( \4 ~  _' ^# q
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));, w7 d; R& a( |3 R  v7 J% f
  36.         setTimeout(draw,800);
    . u, Q2 |% |9 I* U
  37. }
      T* V  R# n7 E* f& g; E
  38. 2 I8 \. X0 p4 o" K7 R
  39. //客户端跟服务端通讯  F/ }( u. H+ k9 ^- N1 J
  40. if (window.MozWebSocket)
    + M7 g+ n' u  S. c; T0 `
  41. {
    ' `. F& @$ S- W+ Q) o& w8 ]; t
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    " a% l( p; C0 t  N
  43. } else, t2 r; \; Z9 E1 ]6 r
  44. {$ t9 l- t' x7 {( r/ g. E7 k  |
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    / z% u& k$ ]) ?8 T" m+ J9 t
  46. }
    7 Q$ N% H+ t2 \4 ~4 O( T0 p

  47. " F+ k0 W  p) T) v; I$ `3 w5 {
  48. ws.onopen=function(event){$ H* x2 g3 P- [$ X: k! Z3 R, g+ P8 G1 q
  49.         alert('连接成功');
    * v. O1 i7 X4 g! k& H+ o
  50.         ws.binaryType = 'arraybuffer';! L( ^0 J# q! g" K8 t
  51.         draw();3 N" i/ C" d- s  l
  52. }9 d5 K$ ^: M5 a+ S1 P6 T0 H
  53. ws.onmessage=function(event){8 a- C3 a$ b) r- Y' e- _
  54.         //alert(event.data);/ J0 ?& q5 K4 S2 }; j7 x
  55.         //ws.send(event.data+"client");
    / B1 M7 K8 W' [- P; J
  56.         qrCodeImg = new Image();* p' b7 e1 n) M! a7 T
  57.         qrCodeImg.src = event.data;
    " H9 X  C7 m+ W  V
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    4 X- @# b/ ~, s
  59.         , D( v0 @, o  u; v, {/ F7 F$ u* H
  60. }. {2 z) Z& y/ @6 F) _4 B' x8 A
  61. ws.onclose=function(event){
    - w9 v( e6 M% H  C" N. ~' r# v
  62.         alert('close');% g+ I0 [9 X9 E3 o" L
  63. }
    $ O9 n3 Z. @. D+ G
  64. ws.onerror=function(event){* c4 A/ G! ^: h/ g& u3 ?' E
  65.         alert('error');* E8 }/ I* B2 e' I
  66. }0 ]% V; P3 N) ~2 D3 _  ~" g: ?0 z
  67. //video,标签模拟视频7 I, B6 H5 n: k8 a

  68. 2 z; I+ T. K3 ^4 d/ u# t3 }" l) @
  69. </script>
    2 w; I& k% v! [4 C: k
  70. </body>3 J4 b- ~- x0 q, {/ K/ ?7 I
  71. </html>3 c/ j- P$ d) l7 A7 |5 [1 A+ w9 b

  72. ; O" `& [, x' w  v: n
复制代码
客户端:! O, G: l4 o2 Z( E. m; @5 w& z5 l
  1. <html>
    ; d. v) a4 t, N# D4 S
  2. <head>
    ' u, k$ f) ?- J
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    ( c; r7 B& Z8 C1 B/ N' ~1 J
  4. <title>客户端直播页面</title>4 Z3 V  u5 e( n+ }6 [! R
  5. </head>4 n. m! Z+ @) e# ^0 u3 J
  6. <body>
    , P! K: G9 b- v
  7. <img id="receiver" style="width:720px;height:480px">
    # }' \/ j8 I* `5 q# q$ N

  8. : ?$ V8 z6 s, h+ F7 |4 X
  9. <script type="text/javascript" charset="utf-8">" x# x4 y- `/ N7 v: \" z& B' N
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");+ g* {0 l5 p8 r$ T" e  m1 E% |* l
  11. var image = document.getElementById('receiver');" l1 t& k/ a; b. C/ W  ?
  12. receiver_socket.onmessage = function(data) {  ]# r9 w6 h# o9 `
  13.         console.log(data.data);
    * Q$ y5 K- `% `& o  F7 M+ M
  14.         image.src = data.data;
      y, u/ D; }* ?! \
  15. }
      {9 S  n2 Y9 W- M# g8 ~! g6 F) Y/ Z
  16. </script>
    1 a0 z$ }, b8 Y
  17. </body>' U( r6 g9 L4 b* H4 k
  18. </html>
    & {! H  a" \- N; ]

  19. ) ]& F, M/ N6 S% p/ n2 _
复制代码
. |6 E2 U5 T5 [3 n, s* Z1 C. Q

1 |0 N5 I% V# Z- Y
9 _+ T; k* b$ ~+ g
4 G  A8 r: x% F- n- U$ ~
8 ~( t% l! V+ B! q
% A% ]1 g, C- R
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-19 22:36 , Processed in 0.050969 second(s), 19 queries .

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