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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码, ]! H, M( A% G! J" m
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    - X! _# g+ h& d4 q8 |. {
  2. $client=array();
    - @1 d; ]) a: V5 d
  3. $serv->on("open",function($serv,$req)use($client){. P+ c/ u1 ?+ j0 p+ ~1 A1 b
  4.         //echo 'connect'.$req->fd;* P* B" i4 A5 j
  5.         $client[]=$req;' e8 k. L9 c) F5 P/ H5 b8 b
  6.         //var_dump($client);5 Z3 v, w; _. h! T0 `1 c7 F2 ?: K
  7.         $serv->push($req->fd,'aa');
    0 p% l+ V) ~3 [" G
  8. });/ I, d5 s8 v- f8 Q0 T4 k1 @* A" Q$ B

  9. , v9 O3 F1 Z, ~1 U5 X2 x
  10. $serv->on("message",function($serv,$frame)use ($client){8 F7 {" L; b2 F2 {) f
  11.         /*var_dump($frame->data);
    3 K0 {  v! m% B" `2 X. V8 y* |( [
  12.         foreach($client as $key =>$val){5 F/ a8 M4 @3 K7 N% d4 @
  13.                 $serv->push($val->fd,'aa');
    % `/ T* O+ V" T2 ]
  14.         }*/
    ) ^2 ?5 S& y1 V# c
  15.         $client=$serv->connection_list();) q* y, C: d: v, \9 i
  16.         var_dump($client);
    6 {6 H4 }( `0 b* r& _6 E. `0 Y! |
  17.         foreach($client as $key =>$val){
    7 w1 }5 O0 ]. y2 O: Z. Y- N
  18.                 if($val!=$frame->fd){
    0 e1 s1 L* C8 V4 ?  P
  19.                         $serv->push($val,$frame->data);: i8 E$ I4 u9 s, b8 H, v1 B
  20.                 }
    / N( Z; G/ R  l4 `' q! `5 n5 b
  21.         }
    , e* v6 m6 k  j. T4 o1 P, G
  22.         # v; a1 U( c4 r& S2 l
  23. });9 E% I2 s8 {( {4 @! Q

  24. + p1 S8 w; A6 p+ M
  25. $serv->on("close",function($serv,$fd){
    ) l1 G" Y6 _  i* R
  26.         echo 'close';: ]  r7 ^9 g- @- u- I( o
  27. });2 N. A  `" L+ [+ W4 b
  28. ) {! s/ w: a; p% E$ w
  29. $serv->start();) H# n4 V7 ~: w7 j, x& _7 |. i0 f
  30. 3 u- g$ M4 g  f) l4 J: E
复制代码
主播客户端
5 U$ x1 j) w, H$ q) k
  1. <!doctype html>
    4 w; [7 I) p8 z5 Y3 T
  2. <html>
    " y, l# b* `3 r7 ^; v/ \
  3. <head>
    8 x2 n7 D0 G! o! g, V
  4. <meta charset="utf-8">4 h, U' V4 w/ W8 F) A! Z- T& Y
  5. 1 p, L: u$ }$ u
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">3 r" n$ u4 t* J0 n
  7. <title>404</title>; N+ E3 W6 J5 E0 I; n! `
  8. <style>
    . h9 N1 }! k) a! w6 v6 `
  9.         body{, o) ~/ D& ?' P4 M* O6 d6 V$ }0 s
  10.                 background-color:#444;+ V8 O6 n5 F# J' q' p5 J' R
  11.                 font-size:14px;  l% B0 L& q( d2 F! h/ o/ n3 t
  12.         }
    ) Z$ Z: a/ |) Y. {8 L- v# K# P
  13.         h3{
    $ f$ C4 B' p$ U4 {) c  o; K
  14.                 font-size:60px;
    : M0 X1 \; m+ r" L# ~$ M
  15.                 color:#eee;" C) Q5 q; f' ~
  16.                 text-align:center;) I  d; ?- s) k  W
  17.                 padding-top:30px;# `) t2 [# z) }! _0 L
  18.                 font-weight:normal;5 |' E9 y1 N9 p1 j4 z3 M5 e8 {" Y$ }3 c
  19.         }
    3 o- z- X5 a5 u4 e
  20. </style>
    5 G6 p" T& O5 \8 o" Y! d
  21. </head>: X: m, z1 t# p) {
  22. 7 @+ M& P0 b# B8 \  w2 L3 _) H
  23. <body>! a" {7 p+ s/ e6 c. H) L) a
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>1 B/ |) V: P. d" L2 F
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>, _0 U% Y( |" b* p, q
  26. <canvas width="400" id="canvas2" height="400" ></canvas>5 O  ~! V6 Y0 Z- {+ C
  27. <script>
    : I3 U6 \, ?2 `$ S
  28. var video=document.getElementById('video');8 G6 W6 d/ _0 G: ~6 y- I$ k% P5 n
  29. var canvas=document.getElementById('canvas');
    : O1 x0 k9 ~" ?5 k; @3 P% Y
  30. var canvas2=document.getElementById('canvas2');
    # t) G5 j* E- X; y- V
  31. var context=canvas.getContext('2d');% {: t0 W2 [1 B. V1 Z- p- Q3 a# ~
  32. var context2=canvas2.getContext('2d');
    7 H# ]& u7 `% a8 f1 \% t
  33. function draw(){" X/ `$ Q2 U- F& f1 c% ]1 H
  34.         context.drawImage(video,0,0,400,400);
    . [4 k: @1 J& m9 M6 W9 b
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));0 R0 j) K- ^5 G* e( {, O# p
  36.         setTimeout(draw,800);# ?1 E5 J, z6 G7 l2 e  J
  37. }2 [2 ?/ N9 h# p$ ^4 b9 X  `1 I9 S7 d

  38. 0 w/ g7 H- H. U* w0 E: {2 A
  39. //客户端跟服务端通讯
    ) U9 _) \$ S; K
  40. if (window.MozWebSocket)
    8 x: E, e0 C; R  }; F
  41. {
    , t$ @! I( H  y0 }' T0 ^# E5 `
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");5 J% t& Y9 H- P$ I7 `. K( c+ M( m; S
  43. } else
    ( w4 F% H0 f0 I& A
  44. {
    " {/ E( P  d) _5 n0 ?" b
  45.         ws = new WebSocket("ws://182.61.42.187:9501");5 C# l! V$ k7 u; C+ A
  46. }
    / [6 @9 p- {) l! i; E- F5 {4 R

  47. 0 n$ G) z$ C1 s
  48. ws.onopen=function(event){& e2 Y$ j/ u+ X
  49.         alert('连接成功');* s, k8 X( Z. S: |- N7 @
  50.         ws.binaryType = 'arraybuffer';
    9 T' m5 e& f) P& K! t
  51.         draw();1 G8 D% K* r: G3 x0 s
  52. }. n, W! e# y: D" j0 r4 R+ z
  53. ws.onmessage=function(event){  x) u, \! c& x3 v/ a$ h
  54.         //alert(event.data);
    2 [5 }8 h' m! q1 O, G1 a) X
  55.         //ws.send(event.data+"client");
    ' t: w- I. H( l
  56.         qrCodeImg = new Image();
    & R. @  N" \0 G1 l6 W0 Q
  57.         qrCodeImg.src = event.data;
    " b  a; f; w: j; |' \
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);9 a; @) p" x% |3 F$ s* Q, `
  59.         7 t9 ~" {- I* r% g& O' X
  60. }
    % f0 u4 u- S9 ]8 J( n; x
  61. ws.onclose=function(event){
    / H8 R! J) o9 l+ ~; j; e0 F: s
  62.         alert('close');6 p6 w# D* o3 a+ D1 E' g
  63. }" {0 m4 |' p3 H' V- a/ v0 Q3 C
  64. ws.onerror=function(event){
    4 n: D4 Y3 i) f# O: h" A
  65.         alert('error');9 ?& B5 u5 b1 c, ?2 c, n
  66. }
    # H+ c0 P, t7 ?8 y: U5 f
  67. //video,标签模拟视频6 `( s3 B) D, M* A! t$ S) B
  68. 9 R8 H4 Q5 v4 G' b# ]6 F$ `
  69. </script>' b2 J$ Z8 V5 E+ Q* z& A! m- L+ U5 G
  70. </body>5 |7 t8 ~3 ~2 t( a0 n/ n8 x$ G6 ^
  71. </html>
      u% @9 q2 z; U  f* d& `, w
  72. 5 y% b- e: {4 S2 Z
复制代码
客户端:
. m3 X& \0 h3 k) j8 N
  1. <html>. o& _$ z/ ~* @; x
  2. <head>5 y7 ?9 f. e, t/ R3 x
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">! H" u: @# w' z1 d( A& q9 b0 h
  4. <title>客户端直播页面</title>6 ~/ A' i1 o3 L3 b2 ]2 b
  5. </head>
    ( L6 ?; Q1 C4 C" k/ }
  6. <body>5 `, X. ?" _9 D
  7. <img id="receiver" style="width:720px;height:480px">
    . ^% p; \0 q; W, a
  8. " G1 [' j5 [8 J- W
  9. <script type="text/javascript" charset="utf-8">4 A! E: s9 n' {2 ^
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");" Z) Z- p* N4 S  d, T" |
  11. var image = document.getElementById('receiver');: A  T4 `' Z8 l( f9 k0 j
  12. receiver_socket.onmessage = function(data) {( U; g; L- n' y+ t) O: k9 @* t+ |: r
  13.         console.log(data.data);
    ( F% d1 e/ \: ^8 C
  14.         image.src = data.data;$ p# P4 Y* e1 h. e" W! s0 p4 s
  15. }
    % y/ P# I6 ^/ u) M' P: _
  16. </script>
    : a  p& K3 g. m6 A" M+ \
  17. </body>8 m: I7 ]) P  Q- f3 O
  18. </html>5 H( {1 ~' j) J2 [. q2 ~1 _

  19. ! b* @0 U0 E' }3 T) |' Q
复制代码

1 N% a( F& E" ^
5 d& p$ }8 y% b( y9 ~( s4 z* j4 ]) ~

! _! ^9 N4 I, ?+ o7 R
7 @2 B3 d4 [- n3 f4 W2 U2 l0 z$ H7 N% n5 \, h3 L2 u
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-4 07:40 , Processed in 0.102672 second(s), 19 queries .

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