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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
服务器代码
: a/ g: P3 s/ G; G
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    / x- B7 u; D% Q/ T) e
  2. $client=array();
    & ?6 U7 h5 j: a! p; p
  3. $serv->on("open",function($serv,$req)use($client){
    6 x$ Y# c! }' r. s! B; Q
  4.         //echo 'connect'.$req->fd;, d* f; r4 W" v" t2 Q; y  o( u
  5.         $client[]=$req;
    ( |( z$ a1 V% }& y+ ]& ^) w
  6.         //var_dump($client);- t: _9 ^* b+ t( W, ~( l7 p
  7.         $serv->push($req->fd,'aa');1 o5 u: [" P2 T; o; ?" d1 o* |
  8. });) T3 Z& i8 j' g% c

  9. 4 E! k( U" J0 a; C0 S' Z2 i
  10. $serv->on("message",function($serv,$frame)use ($client){# g! X2 m! G( e4 p- i
  11.         /*var_dump($frame->data);
    7 U' R+ K& ~' F& }) L
  12.         foreach($client as $key =>$val){/ `* a- u4 l. B% R, ^
  13.                 $serv->push($val->fd,'aa');
    ' w+ R  T5 z7 Z4 v- `* Q
  14.         }*/: A6 O& ~7 t3 n6 C
  15.         $client=$serv->connection_list();; i% G$ k$ I8 A9 i  P
  16.         var_dump($client);9 W6 y: E+ H* Y0 {3 |& ^8 ]- S
  17.         foreach($client as $key =>$val){! M* U# k- D8 G$ B
  18.                 if($val!=$frame->fd){
    ) _% p4 y9 a3 X' u. `: s
  19.                         $serv->push($val,$frame->data);- [4 e  o+ m5 w& r5 f* q) n5 @; y* F
  20.                 }
    + _% f+ N5 U6 u( b0 v! c" l) Y
  21.         }
    " q* _( i4 }0 k3 L! B
  22.         ! K5 {* T6 v2 v8 H$ D2 w( n% w! a
  23. });
    2 M# G0 r* U2 ^* s* h9 ?

  24. 9 k) X4 X5 q. W# m0 I* k7 V
  25. $serv->on("close",function($serv,$fd){
    0 t3 u0 E. c" K3 T; _  I% X
  26.         echo 'close';
    ' f1 f) l, z' ^+ j
  27. });" t/ G& J1 v5 d8 Q

  28. " H) c2 R9 {: p8 A6 v! j8 }
  29. $serv->start();" A: l2 H: y6 a( a% E: M6 u
  30. + t3 z- V0 M& s0 [3 Y3 e! Y; k
复制代码
主播客户端2 ^5 ]) h: c1 z, W6 _! R
  1. <!doctype html>. ~9 ?+ M& n  H
  2. <html>
    % J$ h4 l; A4 h: ^
  3. <head># I9 o3 |' n" j: ?, V6 U
  4. <meta charset="utf-8">5 U: [) B  ^( N
  5. : q! ~3 G2 i2 L: x- x% m' @
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">" x' Z. }# `, I6 r3 s
  7. <title>404</title>: [9 a: e5 E0 M: e, I) R
  8. <style>* F) D+ d+ N7 T! H! G
  9.         body{
    + C. \* h! T* P- O. M1 T: t9 b! e
  10.                 background-color:#444;6 c+ P6 P: u, {7 X* ~
  11.                 font-size:14px;& M- a* k8 P8 P) s  A& Y
  12.         }1 K- E: p) C+ a% `& l9 q) I
  13.         h3{
    ! A/ M4 ]8 B) n% @3 Q1 h
  14.                 font-size:60px;
    9 s& H" h- C) y
  15.                 color:#eee;
    / J/ \* [& z# y; z3 ]
  16.                 text-align:center;0 s+ |! F4 ]; ^5 z5 l9 K
  17.                 padding-top:30px;! m! I0 Y$ c# m+ h- A7 Z
  18.                 font-weight:normal;
    8 ^# j' v6 ~9 m  x
  19.         }: A; g! |. l1 }: D/ ^$ X) j
  20. </style>
    ( L1 l; G& \% }. e
  21. </head>4 o/ Q+ H3 I) `: D2 V# C

  22.   c! o3 w3 c- W* }$ G8 g
  23. <body>
    5 T7 S( ]0 {: T
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    / F8 v% K, [! D4 z+ ^3 [' K3 G
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    ( y" k/ F1 W3 t2 V/ r6 l+ |
  26. <canvas width="400" id="canvas2" height="400" ></canvas>7 ]- v* h8 n  [( j/ N
  27. <script>
    * P1 T# t" R& F3 d# `/ }; ~3 D
  28. var video=document.getElementById('video');# w8 |% \9 {" E/ u7 V, M) Z9 n* s( b
  29. var canvas=document.getElementById('canvas');
    + ^1 g9 R  R9 @/ k0 q# ]
  30. var canvas2=document.getElementById('canvas2');
    6 m) d+ Q- W# T9 ?3 Y* X3 p4 }, C
  31. var context=canvas.getContext('2d');8 x8 g4 g8 R; q# E$ [  {, H
  32. var context2=canvas2.getContext('2d');+ _9 k7 T) B; @
  33. function draw(){
    ( y1 d: \+ e; J* R
  34.         context.drawImage(video,0,0,400,400);
    * Q/ M: k) G  {" ~! g
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));7 @& R4 E: g2 s7 ~3 m
  36.         setTimeout(draw,800);
    7 M/ x4 r* j- ^! f  G; i5 v
  37. }/ K/ z6 Z6 |9 p! R& k$ Z& t
  38. - i7 O9 c5 N8 G4 ~$ s5 z5 A* v4 Y
  39. //客户端跟服务端通讯
    7 y, n/ I$ q0 l% T+ b" _+ H7 m
  40. if (window.MozWebSocket)- X( ?4 K- U, A* i' z
  41. {: c1 g& t9 ~. U* t& m+ s
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");4 G6 d" c& [" K  E0 m+ X! |4 Y$ A
  43. } else9 z* p6 d: F* N+ }+ A7 h
  44. {6 \/ @/ `& v6 r) J" ~4 c
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    ' J- a$ s+ m: \+ Q( C- A' C" y
  46. }
    * x! h9 Z* p# o6 q7 c: g' D+ s
  47. & ]( s8 w9 X0 ?6 f" {  V( w5 C/ j6 J5 u
  48. ws.onopen=function(event){' H' ?8 O4 |. x5 V' B9 C% ]+ i! w
  49.         alert('连接成功');
    . l) X' W- ~7 b0 R1 d
  50.         ws.binaryType = 'arraybuffer';
    9 h6 q" {% c7 k- ?8 @; W4 q! j
  51.         draw();& C; S0 m: D' L1 W7 m
  52. }
    0 s0 O5 T  F" L0 r
  53. ws.onmessage=function(event){1 j& c; G: y9 X* s8 G0 O
  54.         //alert(event.data);
    2 y  }* i' ]! e
  55.         //ws.send(event.data+"client");
    4 W0 R- w8 M3 g
  56.         qrCodeImg = new Image();& T/ ]& ^9 s5 T& `9 v, P" {( F& j
  57.         qrCodeImg.src = event.data;2 @/ n' i( h, g0 [
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);8 e& G1 N! f& `; C, D  E% y
  59.         # p* D: ~( n( u
  60. }. l+ `% P. F, m0 v9 C) n+ Y; d
  61. ws.onclose=function(event){
    8 H( y- x  Y4 Z# D
  62.         alert('close');- T, [& ~  w7 C8 q
  63. }
    9 [! j, X2 u* P9 k! J+ i) T
  64. ws.onerror=function(event){
    4 K7 l  K  }* v# e5 K! M
  65.         alert('error');  U$ @6 b( u' C/ ?
  66. }
    9 w& u5 G6 Y; K& ?4 v
  67. //video,标签模拟视频
      O' ~6 X- F: ]1 A; I; |( Q

  68. : z0 t+ E+ R+ M- p
  69. </script>) d; e! O5 ]' I- y$ [- k) V
  70. </body>
    1 C( q# D4 R" l. z! T% d5 ]
  71. </html>! @: L: I* U% D8 {  ~8 x

  72. 5 m$ k7 h5 C0 b& K0 `/ H- x' p
复制代码
客户端:
% c+ x+ w8 D0 E
  1. <html>
    " l5 d9 B# ]6 d6 u, c/ C- I
  2. <head>( d, Q% `( u. S! N" C& u: f) @
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">- D$ V# d! l2 T2 J" u
  4. <title>客户端直播页面</title>
    2 F0 o7 ?1 z" S8 {
  5. </head>8 h3 t, \! A5 ^9 Q" f9 l
  6. <body># a- Z; j! v" V$ N
  7. <img id="receiver" style="width:720px;height:480px">. l( T& S0 }; D) g( o) s

  8. ! V& w0 K* {3 N
  9. <script type="text/javascript" charset="utf-8">
    ; [% ]% s* Z& U1 v
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");5 g7 z; X8 ]! d- P
  11. var image = document.getElementById('receiver');8 Y% C, E9 R- T, b6 J
  12. receiver_socket.onmessage = function(data) {
    ( i$ j: h: V1 R& M: B7 H  Q
  13.         console.log(data.data);
    8 U/ t' @" V. X+ T  X8 ^" @
  14.         image.src = data.data;
      E! @3 Y2 y5 i- f/ m: v
  15. }
    + U4 z1 T7 N1 c: i
  16. </script>
      U- x  J# b/ v8 l5 f, Y
  17. </body>
    3 q3 g' J: Q+ [5 f
  18. </html>. P5 S3 ]5 C& A, {3 n4 {
  19. " e1 `3 S# C1 P$ [  ]# n5 l! G  B
复制代码

6 \9 ]2 n. x' R1 d
  }! i  B/ R8 t5 |1 S
2 P7 M7 X+ h6 [) `% ^
; @' b1 y6 d) t4 S# z- f
' h% F: t- H! Z, l/ ^2 h; t2 v' t6 ^7 {, H9 _0 N) J1 y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 14:40 , Processed in 0.061030 second(s), 20 queries .

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