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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码' [. i. [) ~# ?, P+ ?
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    : F5 M. ~/ c$ q2 e1 V$ l2 E
  2. $client=array();! p3 x2 D& z! k1 M5 t( Q! Q
  3. $serv->on("open",function($serv,$req)use($client){
    % u- \3 i5 \4 }# a
  4.         //echo 'connect'.$req->fd;
    / ?8 r: G5 |* K# o& @7 R
  5.         $client[]=$req;
      S. p; z& y8 {' W4 A( V$ @& v
  6.         //var_dump($client);
    & O/ i/ m3 i; D2 H! j
  7.         $serv->push($req->fd,'aa');+ }6 A2 l# D2 V# g( q
  8. });
    ' ?* P& i2 x7 j2 M. x8 W$ y
  9. 6 F* c& T8 f9 ~
  10. $serv->on("message",function($serv,$frame)use ($client){1 H! Q' N4 F5 O7 j( a
  11.         /*var_dump($frame->data);9 k6 M( [. c6 k; o* R3 d' {
  12.         foreach($client as $key =>$val){
    3 q# ^3 W" [3 S6 g+ G
  13.                 $serv->push($val->fd,'aa');0 S9 q$ [* Y8 H
  14.         }*/
    : d, Y+ r$ c) \
  15.         $client=$serv->connection_list();
    " E: h2 d+ ~, S2 _( E$ U& f& r
  16.         var_dump($client);5 U; E  T: j3 m; r( U; Y% W' _
  17.         foreach($client as $key =>$val){
    " c' M; K: d4 U& p- M7 }
  18.                 if($val!=$frame->fd){
    $ \- Z# c& A# R, H* h* e( j8 a
  19.                         $serv->push($val,$frame->data);+ ^- {2 `9 z" b4 G' L+ I
  20.                 }
    1 Q1 p3 n& n6 n
  21.         }
    $ ~5 k2 T3 L) n
  22.         
    3 c+ N( @! I; l* x# i  K& R0 m: G
  23. });
    * e6 Q$ |$ u- R. D5 N$ b

  24. 7 s( A% @) E$ l6 E: z
  25. $serv->on("close",function($serv,$fd){2 j7 A* Q+ |& A1 m/ H! i: E
  26.         echo 'close';$ M: [% O8 }. `! \
  27. });
    9 A! q! Q4 }* I9 j  s" K

  28. - ]0 R$ I! f$ X' O- S# g! S7 ?
  29. $serv->start();8 l4 O; P, H$ T3 M) K8 i% @# K; W4 s2 w
  30. ' C; b. H9 F+ x0 C$ H8 r
复制代码
主播客户端; K( G+ l0 {( S+ Z; U. c5 z0 F
  1. <!doctype html>4 r- a+ O6 M; ^% Z
  2. <html>
    % t* z; h# k* K$ \
  3. <head>
    . S2 u2 N( [  K
  4. <meta charset="utf-8">9 o0 F8 s1 G2 y' r2 q( x0 ^

  5. + q  D$ `8 @- r! C
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">7 L- @% ^7 N8 I8 g+ V
  7. <title>404</title># X/ K+ p) c1 O' ]6 ]( N
  8. <style>
    / F9 \. G& a6 `+ m8 Z+ X
  9.         body{+ A7 A- w: |! m; k& @. ^
  10.                 background-color:#444;
    * n& X" H# j2 ^! q' C
  11.                 font-size:14px;) q& K  e7 W7 g2 L& c' b. y+ ^7 ?6 [
  12.         }
    - N4 n9 j- K6 E+ R5 ^: |2 v
  13.         h3{
    7 J5 H) U: U. ~4 W0 y! S4 w
  14.                 font-size:60px;2 W2 R& n8 `. e! r9 n, H( \
  15.                 color:#eee;1 e. @) Z; b  V
  16.                 text-align:center;
    " o% J+ z8 w2 j
  17.                 padding-top:30px;+ G+ V6 m6 n) A! u( L8 k' K
  18.                 font-weight:normal;$ m: A7 }3 _+ o# d* O9 ^2 k" Z( ]) L% M
  19.         }
    $ h! n9 C: |: J1 d1 m
  20. </style>: _# [! ^' M; F1 N# @8 T
  21. </head># {7 v& a* w! |: M
  22. 1 ~& Z+ |  _1 g/ L9 x
  23. <body>5 x; q  e  Y/ @* Y
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    7 G* r5 j0 @* z* d, g
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>' s" R9 l! f. L- H
  26. <canvas width="400" id="canvas2" height="400" ></canvas>- o4 v. T7 ^  G3 ~+ C
  27. <script>, W2 H" j8 u, F3 l. a8 {
  28. var video=document.getElementById('video');* g- D! P4 l8 d8 q
  29. var canvas=document.getElementById('canvas');
    ; v  c5 E+ \. q: k7 p2 }* v! M
  30. var canvas2=document.getElementById('canvas2');( a2 |! o) z4 {4 w' N
  31. var context=canvas.getContext('2d');
    3 l9 h9 v" L" K0 c
  32. var context2=canvas2.getContext('2d');
    % ~) Q* f- |0 @
  33. function draw(){1 L$ u! e/ _/ x* ]; S) n, R4 w0 x) l
  34.         context.drawImage(video,0,0,400,400);
    ( U& m! q" p9 [0 c* z
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    % H, k6 v1 d  `$ S* C3 M* Z
  36.         setTimeout(draw,800);
    1 q* D) T! X$ w! J0 x
  37. }0 r6 A: S5 c1 y# |  h7 J" X
  38. 2 Z( e& P  L- F" \' D" o, ^5 H. I% Z
  39. //客户端跟服务端通讯5 [' g; a" Z, [+ t
  40. if (window.MozWebSocket)
    8 A2 Z3 \# p+ K, ]/ z" t0 v* `
  41. {* M2 Y) H- x6 X. Y
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");, Q( X. C. ~/ I8 E' K6 M( y
  43. } else6 ?5 b- D! J8 k& O* T, B
  44. {
      T- O* N: ^* R+ U! ~" B0 v. Y& g) M
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    4 e+ Q: V) N9 I2 ^6 M& T1 v; `
  46. }. D8 K7 j6 I& \2 w7 l

  47. + ]# k$ q" J4 }
  48. ws.onopen=function(event){- U1 \. [) N9 {5 S# e- a- Z0 K
  49.         alert('连接成功');0 j0 R* _$ X# r' p7 i4 j5 O4 J' n% G
  50.         ws.binaryType = 'arraybuffer';, A: d: D9 P. N' B7 U- e9 C( @6 `4 u5 J
  51.         draw();5 @# C: r- z# [
  52. }2 M& J1 ^' H- x$ g4 y; z
  53. ws.onmessage=function(event){: [; }( j! I3 X- r' I
  54.         //alert(event.data);
    - }- @0 k. h. p+ D  R# y# Y- I
  55.         //ws.send(event.data+"client");9 \1 e' |# `, |% j: X, W  M* ^- Y+ K/ C
  56.         qrCodeImg = new Image();
    ; k, E6 o/ D# i: I6 P6 E
  57.         qrCodeImg.src = event.data;
    5 v5 _' s. }: w& @  V" s' G) j; ~
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    + l7 s* {( i: S8 Y. l6 n! l
  59.         
    ( E2 ~% W9 V) y: D6 j- w4 q
  60. }
    : |: _0 N, v: x, k1 _7 n. F9 X8 g0 Y( y
  61. ws.onclose=function(event){% O# w& M- S1 C1 M
  62.         alert('close');
    # F8 N( L2 o/ z0 a
  63. }- j- k+ N- Y4 `5 j2 o, {
  64. ws.onerror=function(event){
    ( `1 S7 \; O: O5 f3 \
  65.         alert('error');8 K2 w' j% l! L- m! c6 [" e
  66. }
    - V( Z: {! q+ W: `7 p) l- y
  67. //video,标签模拟视频
    # S7 V; i, ?' P3 j

  68. . C% D! v! L8 w: Q- {+ Q2 m
  69. </script>
    6 \" f% l; K7 y/ }' I9 Q+ G
  70. </body>
    + R4 X" L$ c( _8 f$ S' H* S
  71. </html>* ~7 R' A# N! G2 e% U' c

  72. 9 p$ ?6 E: d3 W
复制代码
客户端:' c9 T/ T; W+ Y% Q0 N
  1. <html>
    , N2 v8 K4 Q+ a0 g
  2. <head>
    $ M' Z2 `$ u: B* a" x
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    " J# T/ {% g1 z) U+ g1 R' I
  4. <title>客户端直播页面</title>- {  p* N6 {8 J9 [
  5. </head># k6 g" q- Z1 ^. N- B
  6. <body>' \9 k8 u2 n# z% V
  7. <img id="receiver" style="width:720px;height:480px">
    . l( N; t  z. O4 C) V# F
  8. 9 d, @! P9 u! g3 B7 V* J
  9. <script type="text/javascript" charset="utf-8">
    / N3 c! C9 C9 p4 l. b- `9 |
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    3 B+ w( z; e2 s/ c0 L; F
  11. var image = document.getElementById('receiver');7 [1 H+ k" F3 z% [
  12. receiver_socket.onmessage = function(data) {3 P; k% ]8 U# L1 N7 |8 b4 f3 @
  13.         console.log(data.data);
    ' u# i5 a" T. g% |) [# d( Z8 e  \. _, \
  14.         image.src = data.data;4 y( H. C  S1 l0 |2 a
  15. }
    $ z$ _" S  m! s4 _. {. m% f
  16. </script>
    0 C0 L& c+ V5 y# w. M
  17. </body>
    7 s# f, E  m) g. B( m. @
  18. </html>- M" N* N2 K2 Y
  19. 3 j( t: r* `6 |5 ]6 {0 Q- q
复制代码
. U/ {6 ], a8 W) g

% |# N! L  t9 ?* b- |" \8 B/ L. w+ f$ j
4 f) Z  T- `; c5 X

% _/ T# y' |, U% s# M) A, J5 F, |: W/ Z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 21:46 , Processed in 0.061788 second(s), 20 queries .

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