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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
5 k% T# i! G$ L
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);7 |" G9 d' _6 w; M
  2. $client=array();
    & t; H8 ?7 X( [* G
  3. $serv->on("open",function($serv,$req)use($client){$ z5 h- |% z3 A# V+ m5 D4 f4 M
  4.         //echo 'connect'.$req->fd;
    ! O1 c+ O4 O# t) F/ [0 x8 y
  5.         $client[]=$req;
    ' _  V7 k/ Y7 x8 z
  6.         //var_dump($client);
    . b5 R5 u0 n; P3 p* D  ]! T
  7.         $serv->push($req->fd,'aa');; v6 I( [0 @, e, P
  8. });' n1 a; h7 J, |' L$ p! x& k

  9. , g  m6 K7 `0 T- `
  10. $serv->on("message",function($serv,$frame)use ($client){
    3 w. C' @5 g  b$ y% }
  11.         /*var_dump($frame->data);" {8 ~8 v0 r8 \; a! `8 _6 Q
  12.         foreach($client as $key =>$val){
    8 T: m4 r- D8 }" Y6 f
  13.                 $serv->push($val->fd,'aa');2 s2 P& N/ W* K# Y* n
  14.         }*/6 k) e8 e, I5 m& }
  15.         $client=$serv->connection_list();
    ! q! z) I* V0 A9 I' f: l3 R
  16.         var_dump($client);
    ' q* t8 K: A# n. M5 @! L
  17.         foreach($client as $key =>$val){. Z: `7 @3 ~7 S: t! i
  18.                 if($val!=$frame->fd){
    * N: R. _/ K4 ]% {, R6 s
  19.                         $serv->push($val,$frame->data);
    , V3 D8 z7 F0 v9 z
  20.                 }8 r% U6 ~- @5 F3 O% n' S1 q
  21.         }/ G/ d* s" U1 f- b5 ~1 f" m$ P
  22.         6 g5 |0 y+ U( |, W
  23. });
    9 C& k% i! T% z0 n2 `' N6 A- W

  24. ) w- u6 p6 y% G/ B5 y
  25. $serv->on("close",function($serv,$fd){( K9 T) y8 |% Q* T2 ^& L+ \! O, P
  26.         echo 'close';
    * h8 E% {3 {  V3 B, \. `
  27. });5 l. a& J  y% D( E. U
  28. $ j+ d: a6 `% r* B7 \& D# e
  29. $serv->start();+ C) t- @- C: h% D+ l
  30. ( j+ y6 w3 ^" d6 ~- y. W9 w% [
复制代码
主播客户端& N" r: f% ^, }: d. x
  1. <!doctype html>2 I9 A. O  N6 b$ ~# l% x. e/ ^! s! f
  2. <html>' f" ^1 {0 Z( b; o
  3. <head>3 Z) J; F8 O) @/ z) k# K
  4. <meta charset="utf-8">
    0 V& _& u* p! a# |. j+ i0 U

  5. 6 i; t$ z) I9 D1 r
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
      x# ]8 o+ E3 A2 P- j  ~; s2 K* w
  7. <title>404</title>
    # N9 A0 H3 M: O0 b/ Q) b
  8. <style>
    ( i: R7 B& _, U3 n0 |
  9.         body{
    # K) O* F/ `, @, \' r  c1 e) o
  10.                 background-color:#444;
    . w6 G5 q* R7 g- h- h8 ~
  11.                 font-size:14px;
    3 @2 N) Q; R5 N, u5 q
  12.         }  |  Z3 Y/ P8 l9 ^, n3 U
  13.         h3{" Y9 ^% k) X! \
  14.                 font-size:60px;
    9 w8 y) ?! S1 J9 r+ m9 y. H# }
  15.                 color:#eee;
    5 Y) ~3 \8 f! T' z
  16.                 text-align:center;0 ]8 D0 J& G4 X' f
  17.                 padding-top:30px;
    & s" M! O& ?- _+ a
  18.                 font-weight:normal;) K2 d( N$ K* @3 A+ \$ u  D
  19.         }
    $ A$ O/ V( U; y9 L% h! _
  20. </style>
    ' l+ _. b* s, n: y$ E8 ]' u& Q# I# T
  21. </head>/ b/ K" {5 E0 g. O% r$ A2 _
  22. & x6 Y8 z: V4 ^
  23. <body>0 P, {) G/ E+ E7 W1 r! q$ |
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>* M0 \) G  `" T# G' t+ T
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>$ J' g7 l" R  N8 B  E
  26. <canvas width="400" id="canvas2" height="400" ></canvas>; C# {! Y/ r% q6 R4 G1 v% p
  27. <script>8 A; p1 G! l6 z6 _' D3 p
  28. var video=document.getElementById('video');  x: E  `7 ]8 W$ b- M
  29. var canvas=document.getElementById('canvas');
    # ~! L0 N5 f3 ]# i1 @2 ]4 \
  30. var canvas2=document.getElementById('canvas2');6 G5 H$ x/ }7 W- U# G+ h  f
  31. var context=canvas.getContext('2d');
    7 p3 x+ `4 P& f7 j# Z. w' j
  32. var context2=canvas2.getContext('2d');
    % B5 h3 V6 ~! g( u: G' Z! v
  33. function draw(){$ }" U, F5 y4 P+ J2 C: R, J
  34.         context.drawImage(video,0,0,400,400);
    ' |" ^5 C4 o8 P# @7 h
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    6 k0 \: h" [" ^( P: L! x
  36.         setTimeout(draw,800);
    ' s( W1 v( K9 Y8 \
  37. }
    % Y5 b- G% K- z4 _% R* Y
  38. ' B/ ]/ g8 `4 [
  39. //客户端跟服务端通讯
    . |9 }9 O( _3 z/ M
  40. if (window.MozWebSocket)1 u/ |. L6 X0 A+ \+ K+ }5 Y
  41. {
    6 |0 S; n7 R5 Z- B, g2 ]- \
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");: x  V" F2 R6 e
  43. } else
    + Z* |7 k8 h; D) R6 `/ C$ Z
  44. {5 S$ C$ t; {9 `$ V& G
  45.         ws = new WebSocket("ws://182.61.42.187:9501");" J0 j" R& M7 T/ v" K$ o9 I
  46. }
    % P8 B! ~+ q6 G4 T

  47. : Q- m: F. g2 k' ^) I# [  e
  48. ws.onopen=function(event){) u3 C! Z8 c* \' o7 `8 G; T7 T- s
  49.         alert('连接成功');
    ' K6 D) e0 |! S! p8 q( ]
  50.         ws.binaryType = 'arraybuffer';
    3 l5 u) s6 V" i* S
  51.         draw();
    # a- t0 W% q; s+ W
  52. }
    9 ^) W; o; C9 B1 s2 x! `8 Q2 m
  53. ws.onmessage=function(event){+ E5 M" u! M1 v$ u- B- s3 u) j$ P
  54.         //alert(event.data);7 Y4 y/ y3 x6 z* k( u
  55.         //ws.send(event.data+"client");) R" d9 v' O3 k2 m" k
  56.         qrCodeImg = new Image();9 b; l/ b% w# T8 G" K( r
  57.         qrCodeImg.src = event.data;
      |' A# I# E3 ^2 g$ G  r* P
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);! i* }" j9 {0 ^8 ]
  59.         
    . f* n$ a5 }* _% O4 t
  60. }; s- y9 V" d* C" J+ X6 A
  61. ws.onclose=function(event){/ X3 x# Z7 S$ B) U+ V
  62.         alert('close');
    7 Z2 D9 R& A% ~+ s& [
  63. }
    4 [$ H+ ~, N" l" R- L7 C
  64. ws.onerror=function(event){# C1 g6 N( l- i' n4 E$ j8 V5 Y5 i
  65.         alert('error');: h( ~6 R9 K6 `+ r& P2 L
  66. }5 ?9 B( {, N6 _0 _& C, m
  67. //video,标签模拟视频1 o* B; c5 B8 D7 X9 M
  68. ( C& G/ @3 W+ t  H3 g9 T! a
  69. </script>+ \- D# d$ v" t, O; H+ t* n
  70. </body>
      O3 x: l- n& v1 \8 K
  71. </html>6 z' z7 s& j- }% l! ^
  72. & ^' X# e$ [. ]8 B
复制代码
客户端:2 }+ D! W6 ?6 w( V7 H
  1. <html>8 }! L( Y& p' G& T- {8 S) ?
  2. <head>
    " A6 A$ _5 ^0 V7 J/ K- A
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">4 Q/ t' z" I2 B6 H
  4. <title>客户端直播页面</title>
    & x& l) s) Z2 U4 S4 m% g2 q' l
  5. </head>
    + ~. h  \# @+ G: d* Z7 u
  6. <body>
    0 \+ G( ?$ X: t/ a; ?
  7. <img id="receiver" style="width:720px;height:480px">$ G5 L, u7 G- A6 r* V$ {4 B1 y" ?( U

  8. 7 L, ~" E1 `4 f5 \* G6 f) }
  9. <script type="text/javascript" charset="utf-8">
    ' ^3 s" x% c- o, t, V  ?+ u& Y
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    " D" R$ w1 l" P, q3 y3 L7 i
  11. var image = document.getElementById('receiver');: W9 f9 S0 A) W  `' o! V6 M
  12. receiver_socket.onmessage = function(data) {& a4 P/ f# f7 {* P" l! W
  13.         console.log(data.data);
    , U+ l8 y& K; g7 {- p! C% Y& O
  14.         image.src = data.data;* X2 [8 s- F, p
  15. }8 o: v( b  a( x" ~
  16. </script># `& w- n4 V0 h3 H! @- c2 X
  17. </body>
    9 I! a9 F% U1 z
  18. </html>! r- V$ Z- n' n

  19. # Y- ~5 r$ s' C& s' a5 R8 V# Q
复制代码

1 I$ p) i$ [& [% u1 I. t
4 j. A7 ]5 e6 f: l9 k0 T. u0 K+ r" b0 B- Q" f3 c0 w
4 e7 o+ A  c( L; y1 X

( j. m; x# T3 C1 \' v' ?' ]5 k" V7 `: t& S% X
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 10:51 , Processed in 0.088253 second(s), 20 queries .

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