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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
服务器代码
. L: B  W# T3 u; x8 d% l: k( J
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    ( |, j; ~( V0 ~" H& V# E6 t3 A# G
  2. $client=array();
    % p; D8 {3 Y" e2 J* n% q4 V
  3. $serv->on("open",function($serv,$req)use($client){* e- B: S' ~  v9 V& v1 ~
  4.         //echo 'connect'.$req->fd;
    " `' C" z7 ~3 X0 l- T
  5.         $client[]=$req;
    " }" _; x: x' ~+ w
  6.         //var_dump($client);
    7 ?2 c# f8 Q% X, e+ t6 H1 y
  7.         $serv->push($req->fd,'aa');; m; L" ~" K" _3 Q
  8. });: F3 b: y1 H# M* k, D. S
  9. . Y; I" Z7 a' A3 r9 L+ B
  10. $serv->on("message",function($serv,$frame)use ($client){
    7 F1 T' T" k) D* E& }- M; l
  11.         /*var_dump($frame->data);
    - ^# V7 d$ g, I6 P) E; A# |
  12.         foreach($client as $key =>$val){
    ) d2 k$ H+ o' v7 Y4 ~' z
  13.                 $serv->push($val->fd,'aa');
    ! v& `5 P6 d1 @/ O+ Z; N9 l" K& T4 t
  14.         }*/* C) f( h/ R9 [$ R; U/ V
  15.         $client=$serv->connection_list();
    9 [8 e( l3 p; M0 j+ t) K
  16.         var_dump($client);
    $ \/ |2 ]+ r( Z* n: M
  17.         foreach($client as $key =>$val){" l2 u1 e. d$ j1 {- D! N! b
  18.                 if($val!=$frame->fd){
    7 K1 c7 h9 u9 t$ \$ l2 H7 ~
  19.                         $serv->push($val,$frame->data);
    # `8 Q* u5 f" \
  20.                 }
    ' C' u( O+ y% O) ?9 V, h( z
  21.         }
    / t7 D# g% b0 u4 U5 f
  22.         
    ; d$ T7 ]% Z1 p" B
  23. });6 F6 m# K) @' ~7 d+ R- z, z
  24. . C6 ]& r/ L  \- V1 T
  25. $serv->on("close",function($serv,$fd){( F, F& F/ p# o! _
  26.         echo 'close';
    " \6 K. S' T' \1 Z9 t$ N
  27. });  n- H6 {8 T  q, n

  28. , h) W: G7 q% x: J" X  i& H: H  q9 C; l
  29. $serv->start();
    * c  N$ [* y# \5 ^
  30. 3 d* R4 c9 c* y' `0 m5 K
复制代码
主播客户端
1 ~5 U4 D$ d3 u2 |
  1. <!doctype html>
    " k) t  Z  Y1 f/ o/ ]
  2. <html>: @! F+ n) L1 S0 K$ r0 u* |
  3. <head>
    " n1 |$ G' P6 E, Z
  4. <meta charset="utf-8">8 I5 Y4 x# G/ ]- j
  5. % ^  ?4 T5 L5 N+ a
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">' x% |( I+ }! ]# o/ C
  7. <title>404</title>
    * a- P; U$ N  h- c) g
  8. <style>
    $ e) z/ [( S& k* U3 i: V. H* i" L) b
  9.         body{
    : u" G; r4 Y0 g/ p8 f/ n
  10.                 background-color:#444;# a; f" i# c8 y; |
  11.                 font-size:14px;
    3 K8 t% N  a; p; F% n$ w
  12.         }) L( C/ t) i1 e# ^% N
  13.         h3{
    8 w+ w, D" n9 O% y% y+ H4 s; P
  14.                 font-size:60px;
    ) M' _8 L/ q6 k+ n: O
  15.                 color:#eee;
    ! g% o& W9 P. |) g2 h% b/ i: {5 S' Q9 g
  16.                 text-align:center;
    % ]: V1 k! k! k& [
  17.                 padding-top:30px;
    0 ?! p: A& A1 _: ]3 T9 \
  18.                 font-weight:normal;/ |+ h% a% U% v5 i  ?6 p
  19.         }( ^9 o& G$ U  U- \9 ]5 V  {
  20. </style>: J: |9 p  \( d$ ^! O
  21. </head>
    + ^$ z  d7 ~' \- L
  22. , k, U% I& m& b" \3 U
  23. <body>
    # z. c% }1 `4 w
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>1 E; t3 }+ ]: h* v1 m9 Q
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>6 {7 O2 w1 @  Z
  26. <canvas width="400" id="canvas2" height="400" ></canvas>" i$ u( o* K' v3 M* [2 A, ?
  27. <script>
    ( }9 j. f  I  W! K
  28. var video=document.getElementById('video');' A5 u1 ~2 Y6 w- E
  29. var canvas=document.getElementById('canvas');+ Q# x; `" Z: n
  30. var canvas2=document.getElementById('canvas2');& T) u- Y3 S0 q: K1 i' S
  31. var context=canvas.getContext('2d');1 T1 U& ~/ \; C) l2 P
  32. var context2=canvas2.getContext('2d');
    ! j" y7 ?% C! z) M. }9 l) i0 _
  33. function draw(){! U+ C$ C3 J: t! [
  34.         context.drawImage(video,0,0,400,400);
    # m3 Q/ y/ d. `4 q0 T: M' B
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));( z& z$ c) k) |+ m- C( B
  36.         setTimeout(draw,800);
    ( N7 |; {: X1 `0 b0 l$ a% [
  37. }
    % c0 y/ u1 q' C+ v/ a5 @
  38. $ X8 u4 I9 p. d/ s
  39. //客户端跟服务端通讯0 ?: z* n2 O) F# W1 I1 D: B
  40. if (window.MozWebSocket)
    & g# [. Q) L2 h- h' p
  41. {
    , U- l7 m* ]9 u8 U$ R) F6 t3 d
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    * {% ?4 x# g3 A2 |1 l+ X, Y
  43. } else
    $ z7 s5 b! m& E# m2 z
  44. {
    . |0 k- H# T, f9 L( ^$ Q8 U
  45.         ws = new WebSocket("ws://182.61.42.187:9501");1 m6 A$ w& [+ e, o/ A
  46. }' D/ _: \" J! S& i- m+ J1 u

  47. 7 N5 w& p6 ^# h4 p% {$ [
  48. ws.onopen=function(event){% R* G' J" \4 L3 ^6 C% \
  49.         alert('连接成功');: p1 D1 ?+ H) d
  50.         ws.binaryType = 'arraybuffer';
    # |: G% r. l8 C
  51.         draw();. p( ?  D: D. t/ c+ O2 [
  52. }3 P; j0 \, j: x
  53. ws.onmessage=function(event){0 z6 D9 w# H9 d  ?
  54.         //alert(event.data);
      t( {* X6 t3 ~2 X
  55.         //ws.send(event.data+"client");
    & j3 w# C' U; D6 _$ W/ P
  56.         qrCodeImg = new Image();
    % m' o/ S- y! [6 o5 R! o# _
  57.         qrCodeImg.src = event.data;2 F  W, v4 x( i. n" n; e
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    . ], O; }  x7 `0 u7 z1 h! Q
  59.         
    * D' U0 p' M  @2 T3 _
  60. }3 B0 X2 O4 d- O8 o
  61. ws.onclose=function(event){; H; L) `" A; }3 J7 U% m1 S6 M
  62.         alert('close');: g( d9 P/ n2 e* `( a* m
  63. }' [1 b, D2 `2 ^2 g; @" G) \# R  P2 c
  64. ws.onerror=function(event){
    6 j# V3 v. ^7 [+ U# L4 ]" O( Z
  65.         alert('error');; ^5 O0 L' }1 c/ S
  66. }) f# v5 N. e: s! P* s
  67. //video,标签模拟视频% z) u2 u, S( t; l5 C- L

  68. + S8 G) D' b) p* T& W
  69. </script>
    3 l/ a$ b5 L2 y9 f
  70. </body>3 a* X- o0 g' }9 v
  71. </html>
    " y, n4 _" ]$ d5 r, F; D" U
  72. ; d" N, e  b* m  E
复制代码
客户端:! ~7 \( f9 C% O- S4 B& e
  1. <html>
      p& [9 g2 ?, ^2 L* x  |' {2 ~
  2. <head>
    3 n  m* b' L! R3 W7 f& o" K
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">( p; g0 w" s. w( Q$ J& K3 w
  4. <title>客户端直播页面</title>, s5 h$ p0 A* ~& M0 Q0 z
  5. </head>- e  G/ I! Y0 ^( F7 j- n- j
  6. <body>
    ; b' a9 Y/ x2 T
  7. <img id="receiver" style="width:720px;height:480px">
    % _8 e$ z% d( W

  8. 5 t6 G2 Y& k3 @, C; m
  9. <script type="text/javascript" charset="utf-8">: h: F, \+ ?. F1 G! U" k. W8 k
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");0 k. r2 @' D9 o, {  V+ c
  11. var image = document.getElementById('receiver');
    3 \4 a! r- p/ E$ [7 _
  12. receiver_socket.onmessage = function(data) {
    " \4 M. Z* m0 K7 D7 q, W. k( w
  13.         console.log(data.data);
    / o& R4 ~3 X- A* ]- ~5 R/ l' d) R
  14.         image.src = data.data;* j/ l0 y- ^  ^' w
  15. }
    0 }( l  Q( c  G% T, k# R
  16. </script>4 ~, Y5 i# i0 d
  17. </body>  R" U) r( d: V2 ?0 D7 d6 K& _
  18. </html>* |! b2 {  O* R+ ]7 s( v
  19. , k& I3 |! ]5 w' x
复制代码

+ U' H* z2 M- E& V
- b) `/ R) [9 E
+ W, Q+ d, |0 O) t' S2 ^
( g+ E( S+ P0 q5 W& h# N+ ]  @
# _/ J9 R! H) [2 U: T7 s: O* c! c' O1 t
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-20 15:20 , Processed in 0.150064 second(s), 20 queries .

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