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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
服务器代码
+ ]) h% `: W% U$ J9 h  l
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    : d$ H+ u( L  w( i9 B2 R3 |& `
  2. $client=array();& f6 [3 K' c' N
  3. $serv->on("open",function($serv,$req)use($client){; r% P& G' O$ M$ X' U4 ?  b
  4.         //echo 'connect'.$req->fd;" R4 ^, ^* Q$ X9 t/ h* U( u8 z
  5.         $client[]=$req;
    0 k! F. B* }' M5 w1 L
  6.         //var_dump($client);
    : i8 O5 i" o4 w" x" c# j3 o4 }
  7.         $serv->push($req->fd,'aa');
    , W$ G% g0 u# s% Y$ I4 O( X! c
  8. });
    / h# n% r% t$ T4 |, G1 h0 N
  9. $ R3 e. v; X& @" {0 ~
  10. $serv->on("message",function($serv,$frame)use ($client){
    ! F- U% ^7 }& n1 p+ l6 p3 o* S- w9 ?
  11.         /*var_dump($frame->data);
    ) i2 o! h/ W7 E% H5 x( X! G- I
  12.         foreach($client as $key =>$val){$ Z+ V4 ^- n" i; Z# Z
  13.                 $serv->push($val->fd,'aa');6 a* z6 V, }  s8 f: `3 o. N) \+ t
  14.         }*/
    3 F* R- H4 f! s2 _# X6 p! \7 E
  15.         $client=$serv->connection_list();
    & u& [/ d9 R5 x) {- }
  16.         var_dump($client);
    $ B7 v- l" S5 |9 r  y8 `: `, @
  17.         foreach($client as $key =>$val){
    7 g/ V) T- P! Q! |/ `3 o, D; g/ `
  18.                 if($val!=$frame->fd){
    7 ]* S) o( Z5 {% ~5 ^! E& ?
  19.                         $serv->push($val,$frame->data);
    - D) _, L+ N4 Q- s: X: E
  20.                 }3 q& [& d$ G9 A3 X; m* n
  21.         }+ ]- X5 a% s3 J# O4 T$ Z
  22.         9 Y' j8 R. A% \! t0 }+ S
  23. });1 ^4 I% k$ K& M7 w& y9 r3 W5 N
  24.   Y3 q; ]$ }, r. [8 H* Y7 W7 u
  25. $serv->on("close",function($serv,$fd){
    6 ?/ O- U$ H/ L% j4 V- u. r
  26.         echo 'close';
    ! h1 X* ~" s: |6 R5 z0 P" g+ L
  27. });5 R. g2 o4 `5 ?3 [3 A+ y; g6 a
  28. . z5 o+ o4 `4 B1 {9 I
  29. $serv->start();6 k  ?$ g; |/ G0 s: R

  30. 2 O7 z8 a5 Y1 V* e
复制代码
主播客户端6 _% {2 ~: z3 H3 h1 I  B: f2 A
  1. <!doctype html>
    5 l" N. l4 g3 s/ U2 [
  2. <html>6 u0 U0 V- v5 F  F
  3. <head>
    . z/ ]4 ]. v9 [, m9 K
  4. <meta charset="utf-8">2 Z8 H; \9 a/ I* \. |& J1 T
  5. 0 {* k) H- A$ P: @5 H
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
      ]) H* D) f1 G1 T; `" }9 L, r
  7. <title>404</title>
    ! D& I* T$ y* I& @0 c- n
  8. <style>$ V: u$ [4 i' L  O6 V
  9.         body{; F7 E" d6 r: b8 e1 R) M& ?. j
  10.                 background-color:#444;
    * K, A: w, T" t& Y0 _
  11.                 font-size:14px;
    1 D7 e: F$ X+ O/ Z
  12.         }
    8 n  T6 m% R. Y% ]# c
  13.         h3{% }. V+ [, c5 c) C
  14.                 font-size:60px;5 H, |" g6 i/ |% ~
  15.                 color:#eee;6 T& R7 h+ l0 H7 H: R4 U+ S) p
  16.                 text-align:center;
    # n; b( }3 K  o6 E
  17.                 padding-top:30px;* \1 G7 c; U8 j4 z
  18.                 font-weight:normal;
    & O* f9 F5 k. ~& J7 X+ E
  19.         }- l: @- b" i# ?' A: e% k4 `: x
  20. </style>
    , _, i/ _/ W" K% V" X$ X" @
  21. </head>
    % d+ D9 F9 ]. f+ p: |' ?
  22. * z: m& W) ]4 d" _
  23. <body>" ~1 j* r' v- F0 m$ P
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video># [: q  S+ }; v
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>( a, e# _7 i8 s, v+ [, X7 U
  26. <canvas width="400" id="canvas2" height="400" ></canvas>3 d7 J+ G& |% K, z, Z9 _# n
  27. <script>
    ) F$ ~) _4 Q/ r4 y
  28. var video=document.getElementById('video');8 A9 c" U' C& v  q- [
  29. var canvas=document.getElementById('canvas');
    0 Z5 k! ]8 m. _& l
  30. var canvas2=document.getElementById('canvas2');
    ) q+ I3 p2 P9 ^
  31. var context=canvas.getContext('2d');
    * R7 K- h9 g- H6 F, @& F! u
  32. var context2=canvas2.getContext('2d');+ t% j& u7 y" C6 T" P+ `/ D% j' }
  33. function draw(){
    3 R- g! c/ S) M% d" d3 r8 P  ~% v
  34.         context.drawImage(video,0,0,400,400);1 n6 p- {, j8 ?. ?$ P
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    $ p' u  q) c/ ~0 Y4 S
  36.         setTimeout(draw,800);
    0 v6 ]4 b) {$ _+ h/ ]
  37. }
    & @& g' l. R  O8 r9 t" z" _$ v, D, t

  38. 8 ]: a1 k( G9 R3 R- p7 k& Q
  39. //客户端跟服务端通讯2 H) J7 T; `1 K# u. H3 s
  40. if (window.MozWebSocket)( Y& j% F' y" p
  41. {+ |* a/ R2 S; D: V
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    , B& i$ u0 p- Q; P
  43. } else
    9 N, w% }/ c+ Y0 ^9 L( _8 M  A% y# g
  44. {
    & r7 `! g  a8 I/ p
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    & p; \& s' n& L4 Q/ O, E: V! B
  46. }+ K8 b/ l* {" S/ t  [1 J. a; M
  47. 8 S, I/ N- b( N8 B
  48. ws.onopen=function(event){
    " D$ k3 b6 ~3 ~5 G: s" d* l
  49.         alert('连接成功');' E8 }6 Z- r, P: u5 O+ H5 i  l0 |+ S
  50.         ws.binaryType = 'arraybuffer';7 G8 Y" D0 o) b
  51.         draw();, C8 V) I9 `  H/ @8 M+ H
  52. }; `) C8 {8 M) F6 |0 Z: i- P7 C
  53. ws.onmessage=function(event){* V% ~- f  Z" t( k4 y+ g) h
  54.         //alert(event.data);- W# u( G! e1 }" f. q
  55.         //ws.send(event.data+"client");
    / k- b$ K# A/ a6 G5 Z
  56.         qrCodeImg = new Image();7 I$ @$ s% x! W- Q) E# e
  57.         qrCodeImg.src = event.data;$ x. l' [1 I6 e- Y
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);- a2 y! \4 Y7 W$ d! O
  59.         
    4 Y" l. ]4 l- M% Y1 k# U" H
  60. }6 ]% c0 `  g& P
  61. ws.onclose=function(event){1 C7 G7 E, M7 A( J
  62.         alert('close');
      N/ N4 d- `; G9 d' f1 a8 l+ k! e
  63. }! i! v0 w+ R9 I
  64. ws.onerror=function(event){
    ( W% O; W3 j4 a2 t' ]
  65.         alert('error');) Z# c5 Y4 }( y, P6 v; \
  66. }
    , [9 b' R, Z  {1 J
  67. //video,标签模拟视频6 D2 v& ^5 h3 s, g0 T' `9 O2 f; T
  68. ' t+ q' R: o9 |0 b: s5 e
  69. </script>5 M6 V! t3 j2 c, G; `
  70. </body>
    : ^+ q. E* N- X/ }& z& r8 \3 P- k
  71. </html>6 R- \6 T1 P& I7 Z% M

  72. : }- ]0 A# Y9 p3 U
复制代码
客户端:2 X# T8 Z4 v0 f! s) a  ~
  1. <html>2 J7 v& V, o' c( m2 O; o( x* }
  2. <head>
    & {5 {' [7 y1 ~: y! |& Y, k" i  K7 \7 x
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">& n2 }0 M$ \$ U( w* M. {6 _
  4. <title>客户端直播页面</title>6 U4 \  N9 M$ b
  5. </head>4 ^, b' c' G" w4 F1 l$ L2 H" j: N( R
  6. <body>
    ! k  q6 G8 V) R$ n
  7. <img id="receiver" style="width:720px;height:480px">/ h& V; P1 j/ q1 h( C- b
  8. ) r) F. q/ e+ s/ Z( {
  9. <script type="text/javascript" charset="utf-8">
    - V; S) q5 T6 s4 j
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");) q5 k  {) c5 M) k' w6 _$ r" f
  11. var image = document.getElementById('receiver');8 _5 y1 [+ M7 N
  12. receiver_socket.onmessage = function(data) {( j1 Y7 ~8 c7 n# h
  13.         console.log(data.data);, C9 o/ T; u3 ?, j' U' ~
  14.         image.src = data.data;
    6 K4 @3 L  H2 i5 F  y! h
  15. }4 y8 q4 s4 p$ Y3 i; ]
  16. </script>
    - {7 y- F; d* F
  17. </body># J. S9 E; ~& E: d! X: z, I! e
  18. </html>. R9 h: \# \. _: M) n. ~% P9 d, K
  19. ! h" S; Z* R# M8 H# T( q  S
复制代码
" k6 `' M" s/ n
6 C7 y: M! k* W  c1 s9 W

- a% A: q" J# Q/ a7 _8 ]
5 S& f) l1 @0 A1 m) {) }& H' J* n* e# Y0 ~8 F' u" E- H+ c
+ P$ }$ |9 g# Y& e
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-19 22:37 , Processed in 0.057796 second(s), 20 queries .

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