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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码6 ?1 p4 b5 O4 I
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);" W3 `% z8 g5 q, h6 u9 M( K) u& P) @
  2. $client=array();6 s$ e- Z- _6 T8 d  `* J3 O
  3. $serv->on("open",function($serv,$req)use($client){
    / Y- h# i$ b2 l" ^
  4.         //echo 'connect'.$req->fd;* F( b% {+ ^) F. I
  5.         $client[]=$req;
    * W/ F6 x, t& I6 g
  6.         //var_dump($client);( `. E$ N6 W9 {4 }
  7.         $serv->push($req->fd,'aa');" [$ \4 o: ?2 c1 v
  8. });
    / u2 {& l' y- ^/ Z: \& S( `
  9. ' G4 A+ ?+ s& _( V$ q
  10. $serv->on("message",function($serv,$frame)use ($client){
    5 i* [, I" b6 y
  11.         /*var_dump($frame->data);1 m% F: G& @7 O
  12.         foreach($client as $key =>$val){
    . h" }2 D' C+ I2 i0 l# X
  13.                 $serv->push($val->fd,'aa');9 ]/ o( N. B2 ~/ b' A
  14.         }*/4 O9 [& b) ^1 ?8 \, e& ?+ S2 Q/ L
  15.         $client=$serv->connection_list();# @# I" b7 h% W& F6 Z/ F7 f' Q
  16.         var_dump($client);
    ) d% z. h8 x" Z: {
  17.         foreach($client as $key =>$val){
    " F1 {7 m  B9 b2 q! `, {
  18.                 if($val!=$frame->fd){- v; y* C- [2 _) M& [6 E5 {: X
  19.                         $serv->push($val,$frame->data);
    ! P  `. t8 a8 z: J% E  E. ^. j
  20.                 }
    1 g; r3 E5 O# |) x7 \; V( Q
  21.         }
    2 A; V5 s1 y/ H; {. D8 D0 A
  22.         
    1 I2 C- s1 g8 r6 w# h
  23. });" S4 m0 \* i/ W& {, n# C8 `- H% c

  24. 4 N6 M' j' T# r8 q1 t: `
  25. $serv->on("close",function($serv,$fd){7 Y* M( D- r* j0 q7 f
  26.         echo 'close';, ?2 U  f( E) u; I: R& a) K
  27. });
    0 _& s" m8 I/ b7 J8 H

  28. 7 W8 Q+ Q0 I2 R3 o% ^# A+ D
  29. $serv->start();, {7 _& v# f) S2 z5 R
  30. 2 R; G" g- f; E3 J$ V  f
复制代码
主播客户端
- T; @/ X2 M$ F) i
  1. <!doctype html>
    * F$ k; ]4 u8 Y" y8 ?7 C
  2. <html>8 O0 m6 O, @2 S: `
  3. <head>
    , k0 d& b, }* [( ?" z) z
  4. <meta charset="utf-8">3 p3 V7 d- I% [2 E# {6 B9 X: i, n
  5. / n, k% p1 V) M, C
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    4 G3 ?, W7 u7 C, S* ?) a
  7. <title>404</title>) {. m4 b- y1 ~$ J* J, z4 k; X% H# V8 @8 g
  8. <style>" r$ F; Y! W9 o1 Z1 Q3 Q, b
  9.         body{: ^* w& g3 y6 l7 D& Y
  10.                 background-color:#444;: N& n. h; O& x" p* D8 t0 U
  11.                 font-size:14px;
    9 Y, v0 q7 {9 q* ?# D
  12.         }4 J4 ?- k, x( Y+ `& g+ B# D
  13.         h3{5 ^# ~& C4 Z7 x/ i
  14.                 font-size:60px;
    8 H0 P, V4 N8 _7 q* S
  15.                 color:#eee;+ |8 {8 M1 O; U
  16.                 text-align:center;
    ; ~( t. Q" {% s; e4 Q3 ~
  17.                 padding-top:30px;9 F( F+ k9 R" V4 y+ d
  18.                 font-weight:normal;, y8 e# H* w& L3 k( ~1 G
  19.         }
    8 F! ^5 a: i5 W
  20. </style>
    9 K% [& L, m0 i, I
  21. </head>& r+ `! f0 r* e: X9 n) P7 i# D
  22. & R8 C; P. m8 y5 @$ ?$ y  m
  23. <body>
    ! g/ y7 f& z  f; R$ \; r
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>6 Y6 B( e4 y- A2 J1 H3 ?# I
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>+ m$ a8 V: t2 P& C
  26. <canvas width="400" id="canvas2" height="400" ></canvas>3 {( e3 X: }4 |5 s+ q# n7 x
  27. <script>
    / B, y: a0 n9 T( a5 b; I+ a
  28. var video=document.getElementById('video');& l" y. G5 f& [7 Q: q
  29. var canvas=document.getElementById('canvas');; g/ @: G+ P7 ~. B6 U: Q  v8 v
  30. var canvas2=document.getElementById('canvas2');  n/ K; L/ L4 G* k
  31. var context=canvas.getContext('2d');7 _0 }! V- G% Z4 a
  32. var context2=canvas2.getContext('2d');' A" O2 v# I9 u6 n
  33. function draw(){$ k% ^2 |) n/ U' G
  34.         context.drawImage(video,0,0,400,400);
    & I4 ]  p2 v! T. C6 V- l% L+ H
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));) ?& {% Y, X8 V* R2 ~: \
  36.         setTimeout(draw,800);
    ; S7 I* }  F! D8 F
  37. }
    : L/ Z+ N  U7 P1 d: i7 `
  38. 3 n0 h/ a- J+ p8 \
  39. //客户端跟服务端通讯) c" J- }! O. |
  40. if (window.MozWebSocket)7 b+ d: c$ p! C2 ~
  41. {
    , A! ?* p3 {! ]
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");1 e, [8 a; B9 y4 A7 T2 P, z
  43. } else
    1 [' E0 D  y8 T  e. u: Y
  44. {% r7 l6 P, `/ H4 X
  45.         ws = new WebSocket("ws://182.61.42.187:9501");  X( W1 c( E) d/ j: {% ^
  46. }
    : k3 K% C$ w* C

  47. ( V& J. j  Q+ S
  48. ws.onopen=function(event){
    , m4 O) W& v+ I8 w0 t0 ^
  49.         alert('连接成功');; w( P! U. r) U1 P7 F
  50.         ws.binaryType = 'arraybuffer';
    . c, w8 v, @2 Z4 Z
  51.         draw();
    ! S2 C3 _5 q- R
  52. }
    8 P; `7 S) n$ l% C! \- A4 k& g# F
  53. ws.onmessage=function(event){
    0 z+ e+ C. ~+ ^  N: A0 e
  54.         //alert(event.data);- L# p. Q9 p2 M/ |
  55.         //ws.send(event.data+"client");
    ' @8 F6 M5 S3 t3 ]" P
  56.         qrCodeImg = new Image();5 l: U( ~. w% }& W
  57.         qrCodeImg.src = event.data;
    - K, P$ M! n% K: U" G
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    * o2 ^2 g% i: a
  59.         ) I: Q' N& q9 Y$ N
  60. }
    # i2 f4 B% H; Z& P. N; }
  61. ws.onclose=function(event){! T+ J6 i% {5 H$ @8 _( o# N% q
  62.         alert('close');+ M0 C7 L* H4 q0 a9 J. g" {, g
  63. }* E5 q9 o/ E$ Y8 {4 s; P
  64. ws.onerror=function(event){
    0 O# }. ]8 c0 N4 p( u) O- m7 H
  65.         alert('error');
    ; R) J3 d8 I8 S9 \/ f- z" h! b
  66. }
    # i( h8 d1 n$ I& _2 @; x  z
  67. //video,标签模拟视频
    $ }$ [% i+ y2 u' c& U* w
  68. ) J2 M* Z& {  l" ?7 m# C
  69. </script>
    & m+ ^: T1 H; x0 d2 y/ g% O! d0 R
  70. </body>1 T  r+ f+ X% n' }
  71. </html>
    3 d" _) u9 u9 B& Z# t. w
  72. , ?6 d! ^0 c- v) |: L. h# R
复制代码
客户端:
1 e1 a$ r  P( `/ X: k
  1. <html>
    " J+ D0 U2 u6 c2 R" g
  2. <head>4 u  @& p8 [7 y
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    2 D) P. R% N) O
  4. <title>客户端直播页面</title>
    & J7 m, E. f: w4 z3 g
  5. </head>
    9 m, o" S0 k, e% ^
  6. <body>
    % q/ b9 N. G: |" Q  u1 d) [- M
  7. <img id="receiver" style="width:720px;height:480px">
    ! E/ ^* Z7 k; t, Y: p
  8. ! I0 b6 w. Q( A
  9. <script type="text/javascript" charset="utf-8">
    ! q6 e6 w: ]# ^8 [$ p
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");$ L8 |8 M9 H+ G
  11. var image = document.getElementById('receiver');
    5 _( S# @3 \, n4 t
  12. receiver_socket.onmessage = function(data) {- B& G1 L5 U1 Z
  13.         console.log(data.data);
    5 C* u& w, w. E# d; Y
  14.         image.src = data.data;
    2 U) X5 I/ {! |2 ~/ J, ^+ Z5 F( A
  15. }0 s4 g7 M' K& ?1 D
  16. </script>
    3 ]9 ~- T+ _! ?" N0 }
  17. </body>
    7 `3 X$ O5 v) o7 B: C
  18. </html>
    1 l0 S+ ~3 ~* P# l. r

  19. 2 a# N7 p4 g+ H, q
复制代码
- ]* D* E& X) D2 f! i

" [/ {- t* x( ~! a( M* G; X' U/ b% S* U! }

  w9 E& t% I# ]
( \) n) f8 i. s
+ K1 H2 t8 h. ~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-5-2 13:38 , Processed in 0.057071 second(s), 20 queries .

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