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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
: I& e6 D; I2 n
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    ( A0 {- F: u" z/ w( O& w( t
  2. $client=array();
    $ E& V- w$ G7 q; a
  3. $serv->on("open",function($serv,$req)use($client){
      g+ @3 V7 H- o: }
  4.         //echo 'connect'.$req->fd;0 D5 A( a) V: f6 j9 K/ \. {; U
  5.         $client[]=$req;( Q. u6 G# c3 h7 n
  6.         //var_dump($client);
    % b9 @0 u' g! Y0 v5 a
  7.         $serv->push($req->fd,'aa');' u. p, g7 E! R- G3 I0 k, l
  8. });9 A: ^9 L+ A) {7 l5 @

  9. ) h# J5 ?. E  v* a4 ?6 B* z
  10. $serv->on("message",function($serv,$frame)use ($client){( v- t5 `, o8 n% x1 Z" f# q- n
  11.         /*var_dump($frame->data);
    : N& b2 x) i9 J
  12.         foreach($client as $key =>$val){) M3 n8 C& l$ H: U
  13.                 $serv->push($val->fd,'aa');: L9 b' k; ~& a5 T1 n
  14.         }*/
    $ B" q' C- t: C2 \" `# R
  15.         $client=$serv->connection_list();  _5 T3 Q$ [6 d$ ~) y+ f3 W
  16.         var_dump($client);
    , e1 p' r, x# b- U6 Q
  17.         foreach($client as $key =>$val){
    ; u4 i  S$ y' {. E& M
  18.                 if($val!=$frame->fd){
    ) M) M2 [9 G- L* e0 I
  19.                         $serv->push($val,$frame->data);
    ) f. p7 ^6 R2 b$ W4 o2 V3 l, [
  20.                 }
    - P) ~. P% m! k5 |3 `+ a7 k
  21.         }
    ) _2 r! P& X) j! k' K# W7 e( o! V
  22.         7 e/ B, A* f" ?3 m6 a8 A
  23. });) I5 @6 a8 P: O* {& y" F
  24. ! \% c; l; p4 I0 c
  25. $serv->on("close",function($serv,$fd){
      g1 d; h' ^* s$ V2 n1 r  a4 v
  26.         echo 'close';8 I7 c; |9 \7 V; G2 y6 _  c
  27. });9 b$ S( B- y. p: }
  28. 6 H7 t' p; K4 `# N$ q
  29. $serv->start();
    % ~+ l) P: X$ E
  30. ; |1 E* ?: ^0 m$ G2 \
复制代码
主播客户端
! _% w! d6 q7 C& P2 p  H
  1. <!doctype html>
    ) g; i! I4 l6 n
  2. <html>
    ! E' ?- v, M- ]1 D8 Y$ O
  3. <head>/ d; `6 X; k# A9 L( }3 v& z) E
  4. <meta charset="utf-8">$ \, ]: U. K3 }6 |4 _5 Y# o

  5. ! _& ?  T4 \* \2 R& |' A0 D" _
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    ) N: e# i$ X. [
  7. <title>404</title>
    + \( U) {1 G; w; Z% i: U& ]4 Y* v
  8. <style>
    6 E+ S& p" g- c3 \. b/ G0 K
  9.         body{/ k5 V5 \  K" [. w2 ?3 N& ?; D
  10.                 background-color:#444;
    0 _9 L* ?& G6 ?6 _
  11.                 font-size:14px;
    ; R! C0 a5 Z7 p
  12.         }
    3 [' q3 @# u9 f7 x$ r& @
  13.         h3{& l/ L/ O0 }; M& }
  14.                 font-size:60px;- Q: f  L" r. Y6 O4 G' O
  15.                 color:#eee;
    5 Z: F8 Z: _/ ^
  16.                 text-align:center;
    " A6 |4 ]& B/ t% ~
  17.                 padding-top:30px;
    5 F, d2 d2 Y) ^, h+ q
  18.                 font-weight:normal;  e( I0 ~& x! v$ H& k1 A
  19.         }, |' p. E5 S- e' J7 Z4 ^
  20. </style>
    4 t9 O. g: G& Y/ s9 t- r
  21. </head>  z' f: Z6 L+ R/ S$ J* }
  22.   u& I) {7 h6 j# X
  23. <body>
    $ h  I! l8 W: L8 ^6 b
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    2 A. i  e) A8 A* w- _/ E8 Z5 E
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>' Z5 _  D! l" ^& ]. {+ j* R1 ~1 ^
  26. <canvas width="400" id="canvas2" height="400" ></canvas>/ C2 o( `# u% K* k0 o4 t$ X$ h
  27. <script>( ^# X* ~# ^) e  R( J2 |6 b9 U9 W
  28. var video=document.getElementById('video');
    ) {" e* b' ?8 @* i+ [1 Q! e+ v5 Z" \
  29. var canvas=document.getElementById('canvas');1 q- S6 s5 i7 d$ {/ e5 r
  30. var canvas2=document.getElementById('canvas2');* t3 Q/ k: `" v7 q/ C1 i8 b
  31. var context=canvas.getContext('2d');. a' V8 }  ~3 f0 Z% A5 y* Q
  32. var context2=canvas2.getContext('2d');
    1 t* v/ z: f& A0 A: V
  33. function draw(){1 o& J& G" @2 W/ R, J" b& `
  34.         context.drawImage(video,0,0,400,400);
    $ g, s' Z1 W5 Y  R: w
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));( a) w) w9 z8 U7 u1 I
  36.         setTimeout(draw,800);
    , I# ~) p, ?$ i, U$ A" u
  37. }
    % C3 |7 `/ d& Y7 R% \8 T( |7 @

  38. 8 k4 L  ~9 i1 B) E5 o% h2 F
  39. //客户端跟服务端通讯
    & M# x2 j& X! ]! Z7 v" R
  40. if (window.MozWebSocket)
    2 u3 {; Q  A. Z
  41. {
    ) a/ M6 p4 v& e) r2 Z
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");4 k: I3 m5 t2 L: d
  43. } else; B4 h/ }, u" J  K1 T( [
  44. {
    8 p% H  q( c. p& D4 }
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    * t' b0 }& v; y
  46. }
    % T& F/ p4 R' ^4 l9 X. x! P
  47. / c+ ?% H$ Y( n! R! D& ^
  48. ws.onopen=function(event){
    7 @( w! M9 o7 k5 d0 R/ f# w& ?
  49.         alert('连接成功');
    4 m- S9 T5 c9 z4 |
  50.         ws.binaryType = 'arraybuffer';7 c1 u4 ]& i5 Y
  51.         draw();5 _, f/ w# T0 L& [
  52. }
    6 j) N$ H% d/ y8 G0 [
  53. ws.onmessage=function(event){
    + R$ R7 Z; k) H& p
  54.         //alert(event.data);9 Z+ V3 L# `, }% V% s3 _3 X% {* {) G: {
  55.         //ws.send(event.data+"client");8 ~; u' C+ U- [4 v+ e% F
  56.         qrCodeImg = new Image();
    / x7 l4 ~# @; m* N! H
  57.         qrCodeImg.src = event.data;
      Y% W& C0 V; Q" x5 x! s. B+ p; c
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    ) S+ U8 y3 ]( j! d. l
  59.         2 }* u; ?- I- f3 B+ X5 a
  60. }, E: B! [  g5 w" ~* S
  61. ws.onclose=function(event){
    : V8 c8 q6 x& y1 d; ]6 @& Y
  62.         alert('close');
    ; y# S7 G9 ~" S2 s
  63. }
    , S8 U. ^" a+ [$ A  x# `
  64. ws.onerror=function(event){! x- y! D1 }/ M
  65.         alert('error');+ D4 V  h" g# E
  66. }
    & c" N3 m3 g. i7 H7 P! z7 U# x- t
  67. //video,标签模拟视频
    ) x+ I# ^& r, P* y

  68. 7 Z8 @1 E0 ]) Y2 t/ |! }( `" _
  69. </script>
    " E$ X8 p) Y; k9 n
  70. </body>
    ; e3 |3 |$ x: {! d$ u2 Z1 [7 G
  71. </html>8 X" w0 k& M1 j2 a

  72. ; y5 x* R6 B, t
复制代码
客户端:
# e& `# X; ?# z" U, ^5 q8 |' D
  1. <html>
    ; z# f. d, E2 |4 e/ ^
  2. <head>
      c& D$ f9 N9 z' o; u% G* R( Z" F- U
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
      T. }/ I1 P; {  @7 A  R
  4. <title>客户端直播页面</title>
    / p7 I" Z% v' L  z
  5. </head>3 Y- v- Q+ b* X2 h; E
  6. <body>
    ! m# n/ d4 Q& \  Q, _9 Z' k! z
  7. <img id="receiver" style="width:720px;height:480px">
    + W1 q# g9 m/ [
  8. / Y4 ]0 Q4 y7 A' ^- j3 s
  9. <script type="text/javascript" charset="utf-8">7 S8 W2 ?* O( L8 M) l
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");1 C& v. E# y4 s( A2 |
  11. var image = document.getElementById('receiver');
    : }  H' R$ E; y- ]% }$ I5 E
  12. receiver_socket.onmessage = function(data) {/ ?# o& h* F+ d
  13.         console.log(data.data);
    * j5 @/ v% c6 f4 C( a: R
  14.         image.src = data.data;- ]  h. n9 Y! k5 a- \1 K( r: `' N& p
  15. }
    * }# m4 ?0 V$ X# y0 W
  16. </script>
    9 F- c1 u2 ^. }( g
  17. </body>! P  ?- P  ^6 j* t
  18. </html>. @% @1 U( g! D1 E, _4 T) g1 k
  19. 8 e' E7 c; r  ^% Q8 w, o
复制代码
) J0 t6 H, i6 X# Z
0 P( E2 v9 A# u
+ i+ x3 X6 C5 P. u( f" [; c
2 b) p4 i& S* R* Z; ~8 S' Q
: O/ A4 Z# B( W5 U0 w' o

$ W: Z$ ~9 }( y4 P* ^
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-19 22:42 , Processed in 0.057223 second(s), 20 queries .

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