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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码: S1 M( y3 |, o" M! ]% L1 F6 L
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    , [+ N' S; A+ q$ C' u6 a
  2. $client=array();/ T& R  ~8 b1 J6 C5 \
  3. $serv->on("open",function($serv,$req)use($client){
    1 @( ]1 X7 L8 U; f
  4.         //echo 'connect'.$req->fd;" L/ |$ s/ R+ l- L6 P6 A6 ]
  5.         $client[]=$req;
    0 N8 @3 a+ R# X. Q: @; c2 |' u
  6.         //var_dump($client);1 Q7 `0 q- }! ?2 Y; ~; A5 V1 B
  7.         $serv->push($req->fd,'aa');1 ?8 w( b0 B; t5 @3 `0 y8 y
  8. });. n% y. i3 Y* }7 n8 B+ E3 C, S
  9. : S+ O) I- o3 L
  10. $serv->on("message",function($serv,$frame)use ($client){1 O6 v8 q4 Y2 m' S4 W
  11.         /*var_dump($frame->data);
    5 n: {3 @' b4 [7 t
  12.         foreach($client as $key =>$val){5 }& x; A' g. ?" d% P
  13.                 $serv->push($val->fd,'aa');0 x6 v# e' a0 ^/ N, C7 ~! o
  14.         }*/
    # o  m) c6 Q9 l1 o5 h
  15.         $client=$serv->connection_list();
    9 Y# |# P& C! u9 S3 N1 ^0 l2 u
  16.         var_dump($client);
    4 Y/ e+ t" ~  G" M5 o3 B7 k% `) [
  17.         foreach($client as $key =>$val){
    8 t. O# s$ T  f+ R/ x1 r7 L3 v
  18.                 if($val!=$frame->fd){; R, h! b) ?; l  m6 ?
  19.                         $serv->push($val,$frame->data);# x% j$ |% p9 P+ x# \4 V& r& n
  20.                 }
    , G2 N* U  N/ q8 g. x6 U
  21.         }: G& x9 A% h+ L+ W# Q* H( N5 b* R
  22.         
    & L* [6 ?7 d  g
  23. });
    0 \* ?. t" F8 D4 B9 d0 i$ u

  24. $ B6 V  T( B. n2 t# _" V& o" f: W
  25. $serv->on("close",function($serv,$fd){
    , F) k& F1 |2 q0 G: p' A
  26.         echo 'close';& G! ~% Y8 ~- r7 k+ M$ K
  27. });
    - J7 ]0 w$ z6 W

  28. ' A/ |) _& c" _# _
  29. $serv->start();
    & _% q, o6 {9 j
  30. 5 O. s0 H2 [9 W
复制代码
主播客户端1 \$ c0 O4 ^; [& j: K
  1. <!doctype html>5 T7 Z) [* ^# y( x
  2. <html>4 l& k+ k4 X# B" Q6 {+ @
  3. <head>4 Y) }6 P& X- {  X0 y% {! k
  4. <meta charset="utf-8">
    3 `- ~: @: a+ ?$ y9 C, D
  5.   g  X" F8 M# k' {
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    # @5 a3 f5 k: F* v6 P% t2 Y! K9 \1 U
  7. <title>404</title>- |2 T: o) Q; s  p
  8. <style>* G( ^8 Q- Q5 I  J, y. W
  9.         body{
    . I+ }; }9 j- ]
  10.                 background-color:#444;
      P7 j5 r. w2 p. x! G
  11.                 font-size:14px;% A% Y( d; [- _  z, u8 @1 Y
  12.         }  U9 Y$ t( m9 U+ i: N7 W
  13.         h3{
    9 P, }6 O& i; A! V: q
  14.                 font-size:60px;
    : i/ x+ L: X) g# w' J: D/ ?
  15.                 color:#eee;
    * V7 ]6 ?+ p: @
  16.                 text-align:center;
    8 V) K+ Z- p- D8 {' M
  17.                 padding-top:30px;
    0 k& F6 A6 [8 K' G/ q
  18.                 font-weight:normal;4 N% i* \4 d3 [- l& ~
  19.         }
    ( F0 u* Y% i' u8 ^4 h# t8 N& y0 Q
  20. </style>
    ! W0 u) V, D1 a2 q, A9 `- e/ M
  21. </head>
    - [- ~. D$ `* F0 ~4 k
  22. 4 W( G" A- W: J. a# s( |% \/ k
  23. <body>* O5 b( ?6 l5 ?2 ~4 G$ j# |8 P
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>+ |7 I! n  y- f; W7 J' q; x" M. w
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    , {/ V3 b5 ^% U; m
  26. <canvas width="400" id="canvas2" height="400" ></canvas>4 i2 L( w- N, s! H3 g
  27. <script>$ C4 [, `% m# O
  28. var video=document.getElementById('video');
    6 {( W" z2 [7 O/ }+ H
  29. var canvas=document.getElementById('canvas');7 s; K1 D) f& O( A4 K
  30. var canvas2=document.getElementById('canvas2');
    ; v' T7 A& v( V" O
  31. var context=canvas.getContext('2d');
    2 O. h3 n0 C! t8 O% Q' h. p
  32. var context2=canvas2.getContext('2d');: F& f) d( N  l0 v5 f
  33. function draw(){2 A; ~* @* n0 H2 V! Z
  34.         context.drawImage(video,0,0,400,400);
    ) ?; f+ k' N  a- \" z7 Z- m  M' ~  @
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));4 _# b! e* J4 A+ M3 e
  36.         setTimeout(draw,800);
    ( m! _2 Z- }% W) A3 J! ]
  37. }: |# @  B9 o8 `5 V% C7 @( q2 v, q
  38. * X7 j/ ]5 z- `- z/ S
  39. //客户端跟服务端通讯
    ! i- z* P! j! {& g
  40. if (window.MozWebSocket)
    . x, Z- `8 x1 K
  41. {6 L' A3 R' q0 x: _4 \
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    * y8 U& Z( _. U( y' y: |5 q6 f' u
  43. } else( ]+ p* N! I0 j* I& i
  44. {& C, [0 S1 Z0 Q# o9 G* _5 M7 W2 F/ e+ M
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    . @# ~' ~2 L- G" @. [8 c2 s$ n
  46. }
    + H2 H$ }. `' [# M

  47. ' {/ F( K& r3 c4 T2 }
  48. ws.onopen=function(event){9 p# y# Z& _& V; n, F5 b/ \0 ?1 m
  49.         alert('连接成功');/ g  K" D5 |& V
  50.         ws.binaryType = 'arraybuffer';
    ( p" Y7 K, G- u6 n1 Q& Q
  51.         draw();
      b2 z4 Y$ ], x& g: Z3 K0 j% N
  52. }
    1 o# N0 |# l0 i
  53. ws.onmessage=function(event){
    # X1 {7 w$ b' A& m
  54.         //alert(event.data);& J% f; v% g, i  z! o
  55.         //ws.send(event.data+"client");
    : J) s8 {' b) N! J. S% O7 D9 G: |
  56.         qrCodeImg = new Image();! S" G$ |' }$ W; k
  57.         qrCodeImg.src = event.data;+ E$ r9 \- K# ~& L- ~8 W
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    4 `) p8 ^$ V- r
  59.         
      R. @& X/ N' |
  60. }
    % E6 X3 ?5 I& k- f8 L9 p3 y
  61. ws.onclose=function(event){
    5 `6 d$ y' K2 Y8 t# h& k% J9 X5 F
  62.         alert('close');6 E# M, G! }. m1 Z: c- m
  63. }
    ( k' n( X5 P, ~2 r
  64. ws.onerror=function(event){
    $ a7 y4 Z# U" i+ C8 V; k" d( D
  65.         alert('error');! `8 u8 E# f* |% ]3 I+ [- s
  66. }
    # U1 A2 E' K: v( H* u
  67. //video,标签模拟视频0 T) \& e. v7 a  j* }3 Q0 ~9 K/ S

  68. . x. g- D/ r& G0 c
  69. </script>
    , K4 {) A6 W+ q- b  L
  70. </body>
    0 ^8 m3 C7 r" o; e3 ~$ P
  71. </html>
    0 ^3 |8 T) j" D3 W1 l3 h. z: G+ r) F0 `

  72. ( f3 R& t6 A1 V
复制代码
客户端:5 |, p8 y3 ]* m4 \# v
  1. <html>7 O* j1 t; q3 w& x1 C
  2. <head>
    # E" O3 c! P4 g) C9 ~( h+ u
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">, I1 }$ N, k% z/ u$ G3 t0 s
  4. <title>客户端直播页面</title>
    + \- C: l+ N. k3 Z2 s% S4 R
  5. </head>! `4 \" L6 ]9 {9 b8 Z* m
  6. <body>
    " K5 Q. {0 U- Z+ f: g- [. i
  7. <img id="receiver" style="width:720px;height:480px">
    " V9 U3 {, `9 H( b! D! I

  8.   i1 O+ w7 J! ^( \; v
  9. <script type="text/javascript" charset="utf-8">
    : e" i% `% w$ ?% f, f. ^
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    & w5 {( X' |6 @- k- j5 W
  11. var image = document.getElementById('receiver');( ^: c# W3 ?) y  t; S# u
  12. receiver_socket.onmessage = function(data) {
    6 y* t* H2 ]" @* _. A
  13.         console.log(data.data);( L, t0 ~" ?- E8 w& W7 q6 I
  14.         image.src = data.data;
    : N; O+ J6 g/ V0 ^. D/ S8 B
  15. }* K: ]  X/ s0 u- h  J) k2 Y. a0 F
  16. </script>
    : N- F4 O/ k  y$ @. k' p! h' Y
  17. </body>
    $ E' T! V7 Y% G! E6 X
  18. </html>, N, _& @5 J9 v1 @

  19. 3 j' G5 v' j- v/ z( I" B; C/ G/ o
复制代码

5 g) L% u+ T. B. d0 H) p( s# J7 j! l$ }( P: ~; X3 e

# x0 m* ~2 v9 H5 X2 Y' H* a+ @6 I: s  d# J! Y" p
; w3 H7 Q, j4 p$ d+ ]4 \1 ~# v$ o% F

# h7 U; V. @, j, C& v' U2 y  I+ S9 d
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-4-24 02:27 , Processed in 0.109533 second(s), 19 queries .

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