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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
* y5 b$ J* U9 d5 O/ U- S
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);+ ~. n. U* o1 S; R
  2. $client=array();
    7 G* a3 f2 O3 |. B
  3. $serv->on("open",function($serv,$req)use($client){- K, ^; {6 f0 a. u' W9 w( I9 P; }
  4.         //echo 'connect'.$req->fd;
    ) T: ^/ t1 N7 g. }
  5.         $client[]=$req;
    ' S% I2 q3 E  l4 w. ^
  6.         //var_dump($client);
    , c$ s1 V6 I+ x+ s9 W
  7.         $serv->push($req->fd,'aa');
    6 @& {  d0 c' d) P$ j5 Q
  8. });
    ( `6 u& K# ~4 T6 G5 {' P

  9. : ~( x( l) G: f5 H5 l& _
  10. $serv->on("message",function($serv,$frame)use ($client){5 p, _5 t7 t, t+ X
  11.         /*var_dump($frame->data);
    2 o8 {5 Z1 ?9 s
  12.         foreach($client as $key =>$val){
    # K% l4 u+ T/ y( n8 |
  13.                 $serv->push($val->fd,'aa');; t* v  B" z4 V+ S( J3 h4 g' a, C
  14.         }*/
    4 k$ Z# B2 Z3 A0 j* _: J8 Q
  15.         $client=$serv->connection_list();0 Z% f% a3 i. {: ?0 j2 L/ B- s. |6 _# b
  16.         var_dump($client);
    , k, ?+ X2 x, J3 S! m& o) C
  17.         foreach($client as $key =>$val){
    3 X& t0 T/ j! ~/ n
  18.                 if($val!=$frame->fd){
    - I- J8 D4 H# K' X/ q9 m3 q
  19.                         $serv->push($val,$frame->data);# w6 c7 c% C4 s  K, w1 D* Q  I) E
  20.                 }
    , p4 j1 H& `4 |; B, e4 g& W
  21.         }
    3 h$ ~  N7 ^+ Z3 d- y4 B
  22.         7 l3 U, h  f0 U4 r- s
  23. });. C6 K3 @, O% r9 U8 O, D
  24. - d0 x2 K/ C# {6 `5 Z7 q* H& f
  25. $serv->on("close",function($serv,$fd){
    $ d# }6 J+ U+ w% e% g
  26.         echo 'close';
    ; ~( F# L7 h$ X& j5 p
  27. });
    - c( N: M/ q" G+ X5 Y/ t7 b$ F3 Y
  28. ( K; @8 e6 {) C# K6 u; s7 o
  29. $serv->start();8 m# L3 F$ S7 h1 S9 g. V3 K9 I* y# X% B

  30. 1 q0 K+ X) P% g. ^4 O/ S) o9 z
复制代码
主播客户端
4 b9 D" m6 J) y. \' n2 T
  1. <!doctype html>& L9 D5 c1 D, Q5 Y* L2 }" h
  2. <html>1 U  V* Q! ?; C- }* P$ Y. l# E8 R
  3. <head>+ v8 C# E% ?7 m1 @, i# ?" @* L: H
  4. <meta charset="utf-8">
    ' I% |+ Z% _  \* t
  5. 7 a# @- y8 V" k6 H0 O
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">3 X" S  Q: X; t% M/ f6 `
  7. <title>404</title># e  \# x+ p1 V( u( l' H7 h
  8. <style>
    3 {" u4 ?7 X% k$ x! O
  9.         body{
    * d" f; Q3 A3 b( q# z" N# s! A" n  ^
  10.                 background-color:#444;$ f. D( f) d" N( C! |
  11.                 font-size:14px;6 D( W; j; y" `; z
  12.         }
    . `0 m; I6 e2 ]- f/ M. N
  13.         h3{
    ' u/ F  ?* C5 y3 C8 a/ _/ d/ F. p
  14.                 font-size:60px;- o+ _/ H* A2 y0 C* Z, S; {  U, O
  15.                 color:#eee;9 A* ?8 B& S' L8 J- X/ d9 `
  16.                 text-align:center;
    9 |& L% p: A4 A6 b5 }* B8 t
  17.                 padding-top:30px;% z! @6 R$ W, Z' _& a4 N. w  P; h
  18.                 font-weight:normal;
    1 l3 L0 I( n3 ?7 t* v
  19.         }
    ; z$ F: A3 C- I% F. k  K# N
  20. </style>/ n8 q  [) d# Q. m7 ?
  21. </head>* q0 b- k& l+ T! X. S; x; B
  22. + j* X- F1 y7 h2 A( V
  23. <body>  P6 ^- N  [, S4 N1 L
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    ) G) S4 z5 A5 q% x7 i" M: a
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    * [% h5 H* @9 _5 u1 G
  26. <canvas width="400" id="canvas2" height="400" ></canvas>. Z' v3 a# W5 s8 r
  27. <script>' F0 V6 x. C# j. c) X
  28. var video=document.getElementById('video');. Z: O: b' W0 p
  29. var canvas=document.getElementById('canvas');
    % S2 N5 H2 d+ ]& a
  30. var canvas2=document.getElementById('canvas2');/ u7 c) o2 h) S0 g' K
  31. var context=canvas.getContext('2d');
    * K/ r" ?, }  e9 K, R
  32. var context2=canvas2.getContext('2d');
    & f6 m3 f( h- ^# s
  33. function draw(){$ u' a% V1 ^- f9 G
  34.         context.drawImage(video,0,0,400,400);. h; I6 M6 q5 G" k, h0 v3 y7 Q
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    / ~, l4 P& I+ `6 M- W  _
  36.         setTimeout(draw,800);# n0 J  ^: D7 Q
  37. }4 F2 K& m5 X5 o; P$ a0 ?

  38. . C( B, S" A: s# E! O' j. X
  39. //客户端跟服务端通讯& Q' D% Y6 E. H0 a
  40. if (window.MozWebSocket)
    . u" g8 P9 g/ g" V, |2 S0 f2 ~
  41. {
    $ w% s/ ?! C1 _7 h" M+ L
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");3 F8 E' @$ D$ ^4 Z3 \% n' h
  43. } else
    ( n6 U/ B$ v" |# f
  44. {
    # b7 E5 J1 t4 j- ?( t: i
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    - m9 K0 m/ i8 Y
  46. }
    : X- h  }/ w7 x; Z; G
  47. 8 A& A% g; P6 W/ \
  48. ws.onopen=function(event){
    # _1 {: L- Y7 s3 \% z6 T
  49.         alert('连接成功');
    7 H. f( W5 A! i+ J4 j  Z
  50.         ws.binaryType = 'arraybuffer';4 L9 A; I, m5 |2 @. \! R
  51.         draw();( s# i* N6 F1 A+ \
  52. }
    % l7 A  K1 O5 N0 N* |8 N
  53. ws.onmessage=function(event){" {+ S: c$ x8 N, R! V( Z
  54.         //alert(event.data);! X! C) R1 X3 |
  55.         //ws.send(event.data+"client");! [0 y$ ~* x) D
  56.         qrCodeImg = new Image();
    8 L3 b! B) q0 r. F0 |+ M& A0 [" N
  57.         qrCodeImg.src = event.data;- v: i; X8 J/ M
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    2 r; @! N$ w0 ?. R3 h# ~* j5 P; K6 ?
  59.         
    & w/ Y0 H; H; G! T/ `7 P
  60. }
    " g/ k6 ?6 E, O9 I5 m
  61. ws.onclose=function(event){
    ( \9 o7 R  A0 V
  62.         alert('close');
    1 v- A- G% b/ \
  63. }' }9 J# C, B/ R5 f
  64. ws.onerror=function(event){
    6 C. H& B/ A" w
  65.         alert('error');
    5 U- }! R& R  Y/ ~! D8 C
  66. }. x7 N5 _& g. \! [
  67. //video,标签模拟视频! |4 o; V! X* `. w

  68. : l' ~3 B' K. i. ]) l5 g8 Z
  69. </script>
    " c! P; X- Y5 _* b* V  j
  70. </body>
    $ ^0 I5 ]5 u8 [/ ^, n# m
  71. </html>
    2 ]- j, Y6 ]; L4 O% s7 H

  72. 5 g3 r5 e8 M& v0 M
复制代码
客户端:
$ t2 ?1 x5 O, |. Y) V1 N2 d
  1. <html>6 U; C. U# O4 M3 y; ~
  2. <head>8 g2 _  Q) {1 D/ J; ]6 u; o" x
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">0 m$ v2 _9 ~0 w3 t
  4. <title>客户端直播页面</title>
    . M! ]# g( ]5 U3 i  `4 ^
  5. </head>  E1 C& [4 L: ~# ~* ]$ i
  6. <body>
    $ T, t$ \5 G  m% y, B
  7. <img id="receiver" style="width:720px;height:480px">
    / `4 h- o! ~/ x% G

  8. 7 u$ }+ J+ V0 e/ N# A4 b; i
  9. <script type="text/javascript" charset="utf-8">& j. q4 `% X5 }9 u. P) U# a
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");6 i! r) V" z" ^! \4 `6 ^) f
  11. var image = document.getElementById('receiver');
    & e; d: d( M1 v& G& }) C# g! }
  12. receiver_socket.onmessage = function(data) {8 T, r% Y1 u4 l8 q- y
  13.         console.log(data.data);
    ' Z8 Y& Y- a4 j7 x& b! z- M7 M6 t
  14.         image.src = data.data;
    * v' Z0 H& L% f  m1 V
  15. }
    9 G9 x. o' b/ W  E5 i5 m
  16. </script>) q$ m0 E4 W: s1 ~( Q9 N- }
  17. </body>  ]% x# {/ q) _& L- U+ z3 q
  18. </html>& H- _: _' S* m+ |! e

  19. % O& P- T3 M) L
复制代码
; D5 [$ h; i3 M- I% ]6 k/ L
* i+ I  b2 B  y4 n$ g8 I: Y/ ?
/ U; ^6 w3 d5 B) U, t) l

6 ?2 m7 Q! Y) T6 M9 Z
: U# d) B8 R7 O
/ p" M* i5 o. ]5 w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 10:06 , Processed in 0.058939 second(s), 19 queries .

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