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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
/ R5 l$ V( z1 p0 x7 }
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);2 ?  ~5 G% q# F: J* `9 Y2 I  H
  2. $client=array();
    ' E7 z6 M+ A: _
  3. $serv->on("open",function($serv,$req)use($client){1 Y& H, N# Z/ o2 v' w. v
  4.         //echo 'connect'.$req->fd;0 u, c# R% T& O! F  x% B
  5.         $client[]=$req;: n6 \% W$ ~% h9 q% O
  6.         //var_dump($client);2 @; m* q% t$ `; K  `4 c6 |
  7.         $serv->push($req->fd,'aa');8 ~/ \" a6 c! H7 {9 l  `- F. w
  8. });
    , Q; ~) P  A( z, E
  9.   A4 l% e3 k9 H1 H' l$ o
  10. $serv->on("message",function($serv,$frame)use ($client){  H2 T9 ~5 G+ O% c5 a
  11.         /*var_dump($frame->data);8 K) L: G% I  e5 T; F
  12.         foreach($client as $key =>$val){
    $ w+ n# Z$ E- A9 w
  13.                 $serv->push($val->fd,'aa');, i5 x* t! ?* n/ T& j
  14.         }*/
    ( j" d2 u* h& ?9 H, J
  15.         $client=$serv->connection_list();7 \4 s. v2 ^7 {4 s2 p6 E! }1 u
  16.         var_dump($client);
      h6 k& |! m1 \- ~( [8 [& a# ?
  17.         foreach($client as $key =>$val){
    & s: R/ Z# z0 B- G$ ?8 b9 v  b
  18.                 if($val!=$frame->fd){
    , ~7 k- }3 A/ [7 H( e& b
  19.                         $serv->push($val,$frame->data);! D9 ?% I3 Y- e% ^8 ~6 P! g" i
  20.                 }+ W. m) a, P! O1 k
  21.         }) F& }$ ^8 ]5 K2 I  W& v
  22.         8 K: M, `8 U! ]' N0 ]
  23. });
    ( w: y8 |' L' ~% @
  24. + A* K! w. ~5 {2 W0 c$ i* D5 R- C
  25. $serv->on("close",function($serv,$fd){
    & D( L' ^: h" C8 B
  26.         echo 'close';
    + X; _+ G! q4 f- j( h' v/ z
  27. });
    ) p+ D- p% t$ ~7 B$ y$ K1 i; [( ]& R

  28. , }) w% C1 F' o5 E* D6 [: Q9 W9 F& Z# x
  29. $serv->start();/ m9 I' h: ~, l1 X0 c

  30. 9 f6 Y( O, N: j, B4 P$ x* p4 r
复制代码
主播客户端
2 p. j; E9 D" m& l
  1. <!doctype html>3 X7 a/ g. [  ?" w; J  [
  2. <html>& V# x: g3 h6 ]8 o3 ^8 O) Y% d1 i
  3. <head># Z- R$ D$ v: b9 c3 e# k% S
  4. <meta charset="utf-8">
    4 O% v) W! k* T) F9 L8 o7 Q: p% U
  5. ( }2 R/ ^1 A. M% g# `
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    % Y! Q' E+ T  @" J
  7. <title>404</title>$ ~6 @7 R0 X# [9 s
  8. <style>; [! p$ ?; B' O4 e: V+ x/ n
  9.         body{
    ! C6 P$ _7 {' N0 t$ t9 n
  10.                 background-color:#444;1 p1 w8 O$ I4 N- E9 i
  11.                 font-size:14px;' R1 q4 _# P; _% m* e* `9 b- y' a7 N
  12.         }
    5 z9 T9 V  n: B/ |" ?
  13.         h3{: w/ W- p# [4 j, \. `, @
  14.                 font-size:60px;
    2 E2 l* `+ _* |
  15.                 color:#eee;" z# t: W2 I; ^4 E
  16.                 text-align:center;
    5 }6 n+ l" h' x! m! z% M
  17.                 padding-top:30px;; c4 Q( [* d- E
  18.                 font-weight:normal;
    & w) U5 o! j( N  x; ]. Q( g3 l
  19.         }2 Q4 s# K4 N# E1 U+ d) Y: N# B
  20. </style>
    " d: n+ w- b& n5 b/ O& Q- J
  21. </head>% U+ g4 |* U- M5 Q* C

  22. $ V+ c+ U9 W2 {- W* s
  23. <body>5 E" T6 ~4 T# o. \) _# u2 F
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>1 U4 o" M' ]% K3 D, X# Q* ^
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>4 K  s& u8 t) Y% V
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    , j. D# c4 Y) i: p( {0 D
  27. <script>
    4 S0 h# ?( f+ l) ~2 X
  28. var video=document.getElementById('video');' a* z1 m  F. J6 f
  29. var canvas=document.getElementById('canvas');
    + @! G8 C0 F0 L$ ~9 _
  30. var canvas2=document.getElementById('canvas2');
    ' b$ Z! b" n5 {+ L" T
  31. var context=canvas.getContext('2d');
    8 S2 |( [' U9 B' s3 f4 J) X
  32. var context2=canvas2.getContext('2d');
    / c8 ?4 ]/ s+ T9 Y1 u6 P5 K
  33. function draw(){
    " Q3 [" B& O$ C' r1 x
  34.         context.drawImage(video,0,0,400,400);
    * n, ^; ~7 k7 Y" c5 g
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));7 Q- j1 g  H* q" K) J5 ?9 h
  36.         setTimeout(draw,800);
    ' C6 [7 B# o1 `- |& @! l
  37. }
    ( f% i# U3 _( Q% p2 V2 J
  38. ! k$ D3 J; d* a7 s* Z5 [
  39. //客户端跟服务端通讯
    3 B& i$ a/ \$ y& S* M7 K
  40. if (window.MozWebSocket)  D7 w" q, A/ Q3 Y" M
  41. {
    0 _& M. a+ Z( m( d' ?; w, C
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");4 [- c9 J- d( R9 e, J6 W- f0 |
  43. } else
    ! j# H- J+ E0 Q: t) F2 p/ ~# B
  44. {- V& O% @9 k' Q
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    ( J) ^% O3 b' t) L: T% o; l
  46. }& Q6 _8 Q3 _! g; a
  47. 5 [5 x' w$ Y9 ?+ }
  48. ws.onopen=function(event){, J- @* I# k# o5 q7 E3 l  \# ?
  49.         alert('连接成功');
    / d( N2 G# u& J' c" T- I
  50.         ws.binaryType = 'arraybuffer';  R( l% \; i- }4 b
  51.         draw();
      d  p' X" Z- U( r) s
  52. }( p: A) |5 Z* a
  53. ws.onmessage=function(event){. ~& y; i) ~/ M6 Q! s# R* e
  54.         //alert(event.data);# O- I* ]) S. g) y3 o) j
  55.         //ws.send(event.data+"client");
    ( D) }2 ]0 k( e/ e& a# C
  56.         qrCodeImg = new Image();* _4 ?, ~7 I/ {; Q& q3 \
  57.         qrCodeImg.src = event.data;
    3 c( O+ B/ s2 v" `; G- U( m- f
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);' I, ]' T2 X: X& c5 e& h% x8 R" g. Y
  59.         
    # b+ C2 ^9 A2 c; a% U, h+ o4 P
  60. }
    7 B) i6 f$ }8 u2 A3 ^6 S
  61. ws.onclose=function(event){' P) ^9 V# k, R& }
  62.         alert('close');/ L  Z6 Q$ U) i$ X- p5 i3 s$ l( D
  63. }
    ( w# S7 l" s! C  E( F1 z3 Y6 s
  64. ws.onerror=function(event){
    , C, Q% D8 B' H) I
  65.         alert('error');
    , L- ?- M# d% @" @. W8 x# k  ~8 J/ T
  66. }8 P3 D  [0 p& H8 a6 T
  67. //video,标签模拟视频& r$ e* ^; V0 n6 w2 \5 m9 i0 f2 F

  68. ' ^8 R0 f( E4 J) l
  69. </script>
    : M! q- O1 T& L1 _0 s4 `
  70. </body>
    ' W) Q8 W1 H9 Y: b" O, b: [
  71. </html>
    # ~! M2 D$ ?( f* G- G$ [. o3 Y1 c

  72. ) m; k* `6 v6 P+ y7 p/ ]5 q5 h
复制代码
客户端:; _! u& B6 X: b
  1. <html>: G, I5 n* L' B  k. N
  2. <head>) X" v- X  E7 Y
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">8 O# [) k& l: Z; }" {
  4. <title>客户端直播页面</title>
    ; ^1 B( G/ N- U' b* z
  5. </head>
      Z% Y6 V0 b5 l; Y$ }5 t
  6. <body>
    & r$ p( P8 ]  S. B0 M0 e# x" w% b
  7. <img id="receiver" style="width:720px;height:480px">9 {' W$ t, @# U' D' q
  8. ; t+ L/ |! G$ @
  9. <script type="text/javascript" charset="utf-8">
    " G/ g/ O) F+ M
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    3 Z; K. E0 l6 B( y8 D7 Y' [) T5 D9 b! s
  11. var image = document.getElementById('receiver');
    8 ?! z: t& K, ]% h
  12. receiver_socket.onmessage = function(data) {6 w! P% X2 z( K( q/ T5 S5 R
  13.         console.log(data.data);
    9 L7 t* C# D# e7 i& p  `+ r+ _
  14.         image.src = data.data;1 ]4 p0 y! D2 |# v
  15. }
    # [8 ~% m, G) c- e5 D
  16. </script>$ `2 ^) \0 e3 D& X& k! S
  17. </body>. V% |! k4 }& N! t5 v
  18. </html>
    $ S, U- J  Q* i9 o/ J
  19. - ~* q7 I" b! T2 K5 g) l
复制代码

9 J7 y  p/ A. l  x6 }6 O& B/ G
. ~" c8 S2 M* d! u5 @/ ~8 R; ~7 H; z& p6 ^/ Q- A6 W; ]7 _+ A

% X  E; I& G" U
# E# {' J; j7 O) k9 p1 Q7 c. w
; ^7 m" L) S; n/ B' Q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 16:17 , Processed in 0.055707 second(s), 19 queries .

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