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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
" H& u9 g0 g) p; [2 b. I" G( I
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);& x& Y: W# p- a% A. m0 P" k' m% o0 y
  2. $client=array();
    * j. v; i  x) O
  3. $serv->on("open",function($serv,$req)use($client){. B7 R- D7 o' b! ^% g
  4.         //echo 'connect'.$req->fd;
    , b# Q/ n! u& [  k; [. E) M5 |
  5.         $client[]=$req;
    % j5 |: ^# _( B) h# j
  6.         //var_dump($client);
    ! q1 _( l2 v3 ~" ^$ S' c
  7.         $serv->push($req->fd,'aa');; h" g" C. P5 J/ N+ `5 n) T  J0 k
  8. });  m' K" `; \& F) L3 b, A- t+ W
  9. 1 O7 @; C: J7 z3 w% \
  10. $serv->on("message",function($serv,$frame)use ($client){9 q7 r0 J1 P$ w5 [" R
  11.         /*var_dump($frame->data);8 @, b3 s5 }3 j% \
  12.         foreach($client as $key =>$val){1 g( m1 N" {0 a+ J4 Y
  13.                 $serv->push($val->fd,'aa');4 r! n1 u2 z- W$ F, r0 `
  14.         }*/
    / ?+ y. j7 J& P& V* X& J
  15.         $client=$serv->connection_list();
    5 }; L( L8 u: m9 P
  16.         var_dump($client);; X1 P# `1 H# H1 j( X
  17.         foreach($client as $key =>$val){
    & h) x3 U. W: H6 s0 B; ^! j) d
  18.                 if($val!=$frame->fd){4 e* `8 q; S- J2 ]6 N7 _
  19.                         $serv->push($val,$frame->data);: ~' I) N1 U5 W  C  F1 p; |
  20.                 }1 @/ n" K1 Q7 a5 |% \3 @6 |
  21.         }
    : y, W/ t6 `  T( _. B
  22.         * s, I: Z1 R9 j  Y! e
  23. });
    , J- N3 f7 M+ F- q* R

  24. 2 i2 o( O6 C  ?# Q/ s" Q" K: S# V
  25. $serv->on("close",function($serv,$fd){
    ; U& i5 I' S0 K9 K1 q0 f
  26.         echo 'close';' D: H% Y) F5 r! \" g( m: |; o
  27. });- V& g! v( R* h/ L- _. F/ s

  28. $ K; M& ]1 W; R5 U8 _
  29. $serv->start();3 \3 ~6 w% l' w7 Y- z

  30. 2 W  c0 U* @. A5 ]: }* y6 b
复制代码
主播客户端4 T$ z0 [$ P4 i% ~- |  r# }  B
  1. <!doctype html>
    5 \& B( }$ f- l: y
  2. <html>9 O8 r' Y( ]7 E1 @3 U3 ^
  3. <head>
    " p/ S0 B" j: m, G! J0 h
  4. <meta charset="utf-8">" S# ]" Y' U0 u. J) n/ }( ^
  5. 5 |( B7 h% _/ @9 R# D
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"># h1 t: p6 e4 T; |% m+ k1 Z. h/ U
  7. <title>404</title>9 x0 \7 ]1 }% Q2 r. G+ K
  8. <style>; G5 [4 H0 M3 M, m& o: ^( h6 }$ }
  9.         body{
    , `# l- j! M1 o# E0 K
  10.                 background-color:#444;
    + {2 c* y3 s  D3 g/ x. Y9 N: w7 T
  11.                 font-size:14px;- k5 e( _0 y! y
  12.         }% {1 K0 D1 @2 m; g( M
  13.         h3{" O+ P5 a5 \! z/ q$ J
  14.                 font-size:60px;
    7 B4 M) k% L4 z5 W0 W- [  F
  15.                 color:#eee;
    1 P" y6 ]/ S, w
  16.                 text-align:center;1 N2 W+ I, U* H
  17.                 padding-top:30px;
    ; v& o+ k7 H. Z! t  P, o  f
  18.                 font-weight:normal;* I0 h  Y. z  e, u- a
  19.         }
    2 J, I$ n- W5 f8 [6 L* e
  20. </style># y! u* K2 \# K
  21. </head>
    9 {. B) ^/ t/ ^# y; L4 g. A
  22. % M. t; Z/ d, }2 ?! |
  23. <body>* h1 s6 f# }6 ~; g; [
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>0 X- K; q1 F; y6 v0 ~, A! @/ w* P
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>' r' H* B$ k; ]# h8 f
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    ! Y) Z3 A! r; z/ m6 h) l6 Y
  27. <script>9 ~6 W: p" ~3 Q( \7 ]8 a# S  d% D6 n
  28. var video=document.getElementById('video');* f/ Q/ y* A5 R* n4 n! u
  29. var canvas=document.getElementById('canvas');
    . R9 O  l7 h7 j' l' n8 C2 b
  30. var canvas2=document.getElementById('canvas2');  Z! @+ H* l3 e* t( f
  31. var context=canvas.getContext('2d');4 B* T0 S) a6 x
  32. var context2=canvas2.getContext('2d');2 N5 _  n% G, V" I5 w: }
  33. function draw(){
    & d6 U+ Q6 g' c+ a* ^
  34.         context.drawImage(video,0,0,400,400);
    % V- P) c* r7 W, x/ B! L" k8 M0 |
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    1 c* g% y- h, C; n
  36.         setTimeout(draw,800);+ k3 k" _4 d7 _- Z) H
  37. }% {1 `; r% K/ _  X5 t/ T
  38. 2 q2 X. P( D7 |( o+ W
  39. //客户端跟服务端通讯# R' P% t% C; G" W! z" ^1 i
  40. if (window.MozWebSocket)
    1 [7 J) O9 e0 Y9 D
  41. {
    $ B* T1 f3 y5 D+ \' `) P% \) p
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    2 [, g9 c7 i% Z
  43. } else: o2 c# v. j( ~& e% X
  44. {
    8 {& b* D! {! y
  45.         ws = new WebSocket("ws://182.61.42.187:9501");6 W2 K8 F/ d2 Z3 H7 H
  46. }/ C2 `& s! q5 z3 g  s

  47. ( q2 p4 y" i2 g. I/ x  W
  48. ws.onopen=function(event){
    1 \0 m4 Z8 |4 w9 n
  49.         alert('连接成功');
    : N7 w% I4 C% M- r1 k3 {
  50.         ws.binaryType = 'arraybuffer';+ `1 {! J) z" x3 x$ _
  51.         draw();
    9 \/ f) t5 u* P, {/ E4 M, F  C/ P
  52. }; w3 f% w) s8 H1 I0 B
  53. ws.onmessage=function(event){% s9 n2 v. l$ Y, y" U4 z: u1 `
  54.         //alert(event.data);
    ; i& N8 H: a/ f
  55.         //ws.send(event.data+"client");
    6 j; C5 s6 y2 d  U7 \
  56.         qrCodeImg = new Image();
    0 ^* t# _9 ^/ Y% Y+ Z) a8 X
  57.         qrCodeImg.src = event.data;
    3 q+ e; _* J9 F  k, X
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);, O- W4 w  N# E
  59.         
    0 W! j) z5 p9 p1 H6 i1 o
  60. }, F- C. [4 e& C/ x
  61. ws.onclose=function(event){0 _  B* i$ ~; y+ m6 ]
  62.         alert('close');
    3 Q( c: _6 q; ?" h* g& y7 R! x
  63. }+ g6 H  C' E: y% k
  64. ws.onerror=function(event){3 u3 M2 Q) J. [6 p
  65.         alert('error');7 S# r& w$ g* _5 e( f) f" V  L
  66. }+ S, z9 v  `  E( Q! G) O
  67. //video,标签模拟视频  K3 a' A% Y& Y

  68. : x5 |- u3 @8 b( w
  69. </script>7 k; T4 @7 t! q/ Y2 w* R
  70. </body>
    % H+ W* T+ b$ k  D- o  i
  71. </html>
    % a" |5 k# ]% J; k
  72. 0 r( G6 {% _. D3 ^9 @4 \
复制代码
客户端:
& \% Q" q& H' h7 I
  1. <html>! f- C! B3 l0 g7 R, @, W
  2. <head>
    9 C* N& A# O+ K4 I
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    ) _8 S' E! Y! w2 c
  4. <title>客户端直播页面</title>: @( h8 D! S2 M
  5. </head>
    + V. \6 ^8 \) d
  6. <body>: r  R9 x3 z# G
  7. <img id="receiver" style="width:720px;height:480px">
    0 m( D: q8 g2 U5 Y2 d2 n
  8. % F& S: @! p& ~& v1 d: C9 G4 L/ z
  9. <script type="text/javascript" charset="utf-8"># M/ D9 U9 [$ P6 k. F7 T
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");; I1 |* X+ @; x  n. D) X
  11. var image = document.getElementById('receiver');) i; _2 S, z* a. g7 g3 v
  12. receiver_socket.onmessage = function(data) {
    1 S: `: }8 W) M8 w* E7 d' |0 M
  13.         console.log(data.data);
    $ f+ o3 j4 z' L0 f) H5 l( x
  14.         image.src = data.data;
    1 b' A5 V, P, l/ k
  15. }& y( N. T+ d  P
  16. </script>6 R4 Q8 u% h! B
  17. </body>
    % ~/ i: `; I% ]% w8 s0 i5 ?9 F' }
  18. </html>
    7 D9 n* }1 p5 T) \5 k* M( L  |
  19. ' z+ f- D2 m: L: k5 i
复制代码

1 a" V) Y" Z& H8 S. N: g) Y
0 k+ z3 U5 F& P8 v1 O& w
! r# K6 |: @5 d3 O8 Y5 N2 e
0 {# u- _! w. a9 s6 K  ]( w7 G1 l9 @
0 P; {- G4 l" t5 P2 M
8 \9 ]. \& O# L4 V2 E5 k+ w2 B" B- j
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-5-2 11:45 , Processed in 0.053180 second(s), 19 queries .

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