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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
% K) j" f! a& x/ t6 w
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    % P; i% G) j1 |) ^
  2. $client=array();# y* B: s* ?1 h0 J, \
  3. $serv->on("open",function($serv,$req)use($client){
    9 }8 A+ Y1 e, p2 a9 f3 l( D! M
  4.         //echo 'connect'.$req->fd;
    $ {5 C3 s% K$ c
  5.         $client[]=$req;0 S! L1 P% b; ~, S8 f) h. k
  6.         //var_dump($client);' V. P7 e4 T8 X/ c
  7.         $serv->push($req->fd,'aa');
      u! D/ O; P7 |* [: H5 T
  8. });
    ' v. c. q- h* f, q( K0 c

  9. * [. B, z: m# _" z
  10. $serv->on("message",function($serv,$frame)use ($client){
    + j# U" \: Z, L* J9 \2 T! Y- _
  11.         /*var_dump($frame->data);$ y* ]1 l% V' Z
  12.         foreach($client as $key =>$val){$ O; g  D8 p1 c$ g$ ]
  13.                 $serv->push($val->fd,'aa');* f  i9 ~& G: D" a8 a% C% x
  14.         }*/' x9 h8 X0 s& ~9 i6 F8 v, X
  15.         $client=$serv->connection_list();
    ; U9 ?6 K" I0 y* a9 \" [
  16.         var_dump($client);
    - z% @. D0 A+ n) G
  17.         foreach($client as $key =>$val){
      I6 [  g: b5 Q: D, }  ^, p, ?, `2 o
  18.                 if($val!=$frame->fd){
    / }: Q( Y/ D5 F7 j2 H
  19.                         $serv->push($val,$frame->data);
    , j: R2 {+ T9 P  r
  20.                 }# ~% v( E2 u, G
  21.         }" u! ?7 W0 L. w  ]1 h
  22.         
    1 [0 I9 v$ m2 C! _* B
  23. });
    : @( H3 |1 C( q8 i) K) @8 ~0 o% B# z5 P
  24. # e9 {; A* i& v
  25. $serv->on("close",function($serv,$fd){. G7 v# r5 N/ \7 j
  26.         echo 'close';* G5 ~8 v# E- t/ X7 Y! T& A* Q
  27. });! H: p- d4 o! D4 u0 O7 o* n

  28. : H5 I2 C3 u1 d) h0 o- g
  29. $serv->start();
      ]6 _/ V8 s/ m" n7 u5 H

  30. & s9 D3 e5 ~; `
复制代码
主播客户端4 t; [1 _" M: ?5 v, o( A
  1. <!doctype html>
    6 E5 B0 S; z- K* n9 k9 F) Q2 U
  2. <html>
    & P0 s/ t; G- `5 }3 D# r% w
  3. <head>( {, L7 S7 e: @$ w, I( y
  4. <meta charset="utf-8">
    " s  r, v8 A# b2 _

  5. 7 t7 X. U6 ~* W* ~$ h+ k
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">  u, u) T2 |/ X+ n* T$ |' Q# M0 S! [
  7. <title>404</title>& s$ _1 H9 J; `! S1 W
  8. <style>, f: a$ ]$ V& Q0 A3 G  ]& X% y2 _% Z. s
  9.         body{
    + b  W- t$ s/ P2 U0 d
  10.                 background-color:#444;
    , W. [. @, S8 |, E0 K9 y! M
  11.                 font-size:14px;& p' @$ [/ P2 t) m  K. o
  12.         }
    * T& [* E. w# i5 o0 G& `* ^
  13.         h3{
    * X) ^1 B. L/ I" a
  14.                 font-size:60px;5 o' O0 v& o& G5 z# p  P) G
  15.                 color:#eee;
    , ^/ S8 N: ~9 ~) n9 {
  16.                 text-align:center;
    * c" @: }8 J3 l0 S
  17.                 padding-top:30px;
    4 o$ Z( {8 j, g5 ]7 A
  18.                 font-weight:normal;
    5 b  a; A* U+ _7 s! ^2 T
  19.         }
    + y3 n' i' b' |* Q
  20. </style>
    4 E) D! Y( c. {. x7 k) Z
  21. </head>9 e6 I* H5 @6 g: x4 i+ M7 |
  22. - C5 W! M9 U4 F" W# U9 @
  23. <body>
    ! ]0 k8 u3 t1 `3 g6 g7 s; Y" h4 a
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    2 e: G0 [- j9 k3 }/ ^9 j! @* d
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>3 e* z4 [$ I% Z+ Y3 O/ d! F
  26. <canvas width="400" id="canvas2" height="400" ></canvas>6 T* M* v, M0 _
  27. <script>
    9 k2 z7 I* k/ {% m
  28. var video=document.getElementById('video');
    $ q# b* D  i$ O2 u! `
  29. var canvas=document.getElementById('canvas');3 w: n: Z  }# a, |- f
  30. var canvas2=document.getElementById('canvas2');- y. j. P" h- Z- g
  31. var context=canvas.getContext('2d');- y, r9 }0 R% P2 ?. U: M
  32. var context2=canvas2.getContext('2d');
    + |) j% T1 G7 u2 g" z6 X8 U
  33. function draw(){
    & l6 m- g0 ?4 v& I
  34.         context.drawImage(video,0,0,400,400);
    - e' @. R2 n* e, c* `' h8 _
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    7 B# p1 Z. z8 ?$ A
  36.         setTimeout(draw,800);) h" l/ f0 Y4 B6 B
  37. }, E6 G; U6 U1 p$ T
  38. / `" M) s: m; Y4 U+ |4 A0 x
  39. //客户端跟服务端通讯
    9 F3 ^4 a  t' f( k3 u- {
  40. if (window.MozWebSocket)4 x: f  s1 F( m8 F# a) z
  41. {
    ' y6 Q( o3 ~; V. G' |: h
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    + ]4 c0 `. I+ O+ Z* V8 p% q- L
  43. } else2 d" U- E& {0 m3 [1 E, @- B6 \' `8 L, |
  44. {5 ?4 L  G) {2 e
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    , k' J$ t9 S" R% q# [% ]* d3 Q
  46. }& b8 E1 U% b- d* I' K! r

  47. 4 e. j1 F7 \3 r( f2 O5 l: B
  48. ws.onopen=function(event){
      ]8 ~/ b& t) E
  49.         alert('连接成功');! b) [& Q; V8 w  o$ f2 c( {
  50.         ws.binaryType = 'arraybuffer';
    % X8 G: {5 p$ a8 O
  51.         draw();
    ! {" g0 b: y! g. s' Y) K. h# V& o: m
  52. }- p& U' M! E, l6 V) B. U
  53. ws.onmessage=function(event){% J# {9 _. ]( K. W& X9 M3 \! m) D
  54.         //alert(event.data);( Q3 j5 R2 z& Z
  55.         //ws.send(event.data+"client");
    ! |) V; H* T2 i3 S; q
  56.         qrCodeImg = new Image();
    ! D( Y7 ~1 R. v% ?1 V
  57.         qrCodeImg.src = event.data;
    ! O" x9 d9 J4 U# Z8 g/ U/ ^6 Q& o
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    + x1 V2 P# u8 V* z6 T/ }
  59.         6 ?$ s. t$ H3 O0 B
  60. }
    5 H) f) z5 y8 ?) S3 P- t8 K
  61. ws.onclose=function(event){
    1 M( r2 x) J- q$ G4 j' z
  62.         alert('close');
    # r3 g4 o# L# x8 U! H( y
  63. }
    - G7 P& P) c8 K  E
  64. ws.onerror=function(event){8 q: |& D. A( o. l! w  ^
  65.         alert('error');
    % e# s7 G5 @! D; j
  66. }
    3 H  }% {/ X2 C8 y& _( Y
  67. //video,标签模拟视频% y# k4 U# Z4 p% d

  68. ( a7 X+ e% R2 c2 J# {1 X) g
  69. </script>
    9 ]6 g  J+ o% O4 C6 v
  70. </body>
    - _- R  `+ i1 B* t5 Q! w3 y
  71. </html>$ a8 f9 ?3 ^% Z7 V3 ^
  72. " f( Z: X/ W+ \
复制代码
客户端:4 u1 V0 Q% ]8 S# H! K
  1. <html># J% t9 U9 x/ Q' `) t+ `0 Y/ H
  2. <head>% ?8 O  H3 B9 {8 V- R( q# |9 C, b! s
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    ' N1 I4 h3 O/ q) o% m( s, e- C
  4. <title>客户端直播页面</title>: ?8 Z* |  W" C( |
  5. </head># r' ?0 }% ~) p8 G
  6. <body>7 o/ Y2 X+ B# @: _! z, U
  7. <img id="receiver" style="width:720px;height:480px">
    , I  r+ T3 P$ d+ f0 s3 B3 D$ _

  8. 6 |8 @3 Q( a' g1 o
  9. <script type="text/javascript" charset="utf-8">
    ( s$ d, [5 l* q2 `# G
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");8 l  H/ j7 h, A; ?
  11. var image = document.getElementById('receiver');
    ' h& {0 B- L/ A1 ]& G& B
  12. receiver_socket.onmessage = function(data) {; C3 H; S; j0 \- i! S
  13.         console.log(data.data);
    & {) [% n! m8 j9 y. m
  14.         image.src = data.data;
    * y, u6 \0 v. i$ o, D
  15. }
    5 L2 U2 ^- }- y. ?
  16. </script>
    $ P( o" u3 S7 B; m- n
  17. </body>0 t2 X4 Y7 ~( m- l
  18. </html>; a4 \4 J  T9 M4 g, e" h
  19. 8 H+ g# g% ~$ Y1 r% w5 ]/ M
复制代码
1 k6 B* B5 v7 i3 O  m. P1 C

& A; R+ {: x5 |5 H6 }6 S1 C1 N# h, p, k6 f1 Q. F2 v$ ?8 H

' t$ R8 |1 y" |4 e# z0 f0 [/ G# m) e* t: q! c! ~$ `

' o4 }, w! P' t/ J
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-9-28 06:37 , Processed in 0.122161 second(s), 22 queries .

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