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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
+ U5 m. K; R4 Z3 ]6 r
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);. }  u3 X8 C* J' k! K& K2 v
  2. $client=array();
    % e: h  K8 T: Y* P" y1 x3 m  N' I
  3. $serv->on("open",function($serv,$req)use($client){# y- p7 x; n/ m; d# v. P! Z
  4.         //echo 'connect'.$req->fd;* J/ N) T& \  S% B: U. R1 f
  5.         $client[]=$req;# E- z# ~2 j9 r" f3 _# Z- i
  6.         //var_dump($client);" K. @" r/ y# O% p
  7.         $serv->push($req->fd,'aa');
    * c+ o6 V+ f, r$ x9 r6 @9 _# w
  8. });
    ! T% C* I" H' q8 ~2 G, ^
  9. 7 a$ T: l; X/ K8 D- ]
  10. $serv->on("message",function($serv,$frame)use ($client){
    7 F1 k; B* X$ }# X
  11.         /*var_dump($frame->data);/ Z' q5 s% L; `9 e
  12.         foreach($client as $key =>$val){! v/ V5 [- m9 n7 [) i% L
  13.                 $serv->push($val->fd,'aa');
    + j' H6 C+ Z* J& v) K- ~# s
  14.         }*/
    4 @+ C! e' O3 R" Q, Q
  15.         $client=$serv->connection_list();
    : ]: n3 X8 U7 \5 d' i! n' t' T
  16.         var_dump($client);+ u6 I6 h. l7 O4 c9 O9 }- G
  17.         foreach($client as $key =>$val){
    6 n5 ^% m" o% f9 a' l* y4 w
  18.                 if($val!=$frame->fd){
    ' r6 j) ?/ a  B0 t0 [6 F
  19.                         $serv->push($val,$frame->data);& i3 }) d9 o" f4 L
  20.                 }
    , S! e* V% J8 ~: |! _( b
  21.         }
    + w( O' L- C4 Z; `4 T1 G
  22.         
    2 r5 Q' D( L% [4 s6 I; [
  23. });
    " v; L# L3 D( Y( f: X7 @
  24.   y0 A% O4 a. Z
  25. $serv->on("close",function($serv,$fd){$ ?7 s/ B* O1 f1 X, w  J2 U
  26.         echo 'close';
    . u3 f4 E4 I# i+ U0 z5 V& Z. ?
  27. });
    $ f  h1 s  ~" ~& Y8 E1 e
  28. # b9 C- Q7 p+ J
  29. $serv->start();/ }" [" ?% Q3 h0 M1 \$ G" j

  30. 1 V& Y1 e) j4 G9 u
复制代码
主播客户端
# N; ^, J* k! e0 N4 O: t& y
  1. <!doctype html>. E% c6 o  k2 S
  2. <html>
    0 ^* N3 Y5 Y2 Q* K$ p& H& f
  3. <head>$ V6 H( }! [0 V& N* i
  4. <meta charset="utf-8">
    * v9 x6 o3 ]) t: _! Z
  5. & X3 O( h# {/ T* c
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">& V5 R) ?$ W" {/ r3 H
  7. <title>404</title>/ {1 m8 u* g7 X0 J# w# [1 v3 X
  8. <style>
    0 \  P+ `% v0 s
  9.         body{
    % D. j' b; X+ j3 @
  10.                 background-color:#444;
    # }5 A8 I& k7 r) h+ E) C
  11.                 font-size:14px;" K( V7 S9 c' `
  12.         }
    $ p7 T; X0 Z8 p$ Z8 o
  13.         h3{
    + X  k; O/ x& s, H( }
  14.                 font-size:60px;& z3 t* x  x4 Z+ Y: r$ O9 H% u: n
  15.                 color:#eee;% j/ r0 r( v" m. I3 S
  16.                 text-align:center;' a8 T/ h. x. d6 D8 d' _
  17.                 padding-top:30px;* |/ L9 s& e) v. n& ^
  18.                 font-weight:normal;
    ; b2 A+ W+ \% k) [6 G1 K3 L
  19.         }7 H( F/ h! o# G# U. \9 Z# k
  20. </style>( k/ x1 A5 _  h' O% q1 C
  21. </head>, U! H* L- C( R
  22. - t, h4 a7 a9 _& T7 p
  23. <body>
    , ~1 J- t8 T8 v5 ^
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    9 i8 \5 ]3 n1 H
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    5 c  H# Q: v$ j) E( N5 l
  26. <canvas width="400" id="canvas2" height="400" ></canvas>! t4 e( A* X  U* N& M
  27. <script>
    : _  l# C; _9 q" ]/ @, I! H% X2 @
  28. var video=document.getElementById('video');
    % k+ l9 Q4 B' }' W! L0 W
  29. var canvas=document.getElementById('canvas');* Z/ H1 _+ `5 ^8 a7 X
  30. var canvas2=document.getElementById('canvas2');# s* q( E  D0 z
  31. var context=canvas.getContext('2d');; _5 x; E/ e; F
  32. var context2=canvas2.getContext('2d');
    ! W, g4 O9 f8 E7 u8 `
  33. function draw(){' C4 H4 K3 `5 w1 Z" m5 _. @- I
  34.         context.drawImage(video,0,0,400,400);! d1 }3 A5 M7 M! g
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));& R" d: r/ t! H  I' o
  36.         setTimeout(draw,800);
    2 X' b7 T2 C  n" ]& l& q- @
  37. }# I* m9 j+ [  @+ q, V
  38. 9 G, R5 C' X) {/ K0 y  D. q
  39. //客户端跟服务端通讯0 S6 m# f, b# T
  40. if (window.MozWebSocket)" ]5 M, K& a5 E9 Z/ z6 G
  41. {4 }% q( h+ ?# Q6 }7 F- k4 {
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");+ H, P% o& l! t' u2 h6 k
  43. } else/ Z" a1 i% E5 b) D# h& o0 w
  44. {. S  {" w6 `7 {9 h
  45.         ws = new WebSocket("ws://182.61.42.187:9501");# O# ?8 e1 K) d5 E( z" i0 C
  46. }/ D9 _* g0 `2 q# J
  47. - K* q: ^% T, W5 _4 [
  48. ws.onopen=function(event){
    ) M( H( S5 ^1 K8 V# ^! t) a% T. @, _
  49.         alert('连接成功');
    ) h) j+ V5 e, o
  50.         ws.binaryType = 'arraybuffer';/ `& Y2 |! C1 |8 p
  51.         draw();+ V  H% s- t% e6 e* W
  52. }
    " G& k9 ]: o# }- P5 @' w/ s2 R( W
  53. ws.onmessage=function(event){9 r  [' n- C' e& e
  54.         //alert(event.data);% D5 V6 Q1 m/ D  J9 i5 d
  55.         //ws.send(event.data+"client");# N8 W& U& _) `. J/ G4 F- m' I3 _
  56.         qrCodeImg = new Image();
    " J% M6 b9 N4 I- w4 R9 y
  57.         qrCodeImg.src = event.data;* U) l+ Q9 U9 C) F
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    / y/ ~" U* q; H8 Z* ?; v* Y# n
  59.         
    6 H- C8 a* m- N1 x6 r* v8 a
  60. }
    2 o: y: A5 r- ^9 A( Q- |8 y3 f1 a
  61. ws.onclose=function(event){! Y, ~2 _' S- R
  62.         alert('close');. ]3 W( k, ]( w, H0 `
  63. }
    9 |7 P( m7 x  M. }& p
  64. ws.onerror=function(event){2 I; U/ ?5 t0 f9 x+ N8 ]1 t* `  J
  65.         alert('error');
    9 _/ i5 `$ m: E1 H0 y1 z
  66. }
    ; P/ ^1 V+ U" M- s
  67. //video,标签模拟视频
    * Y; r6 N5 t) O$ H& l; x8 `# D: A, D
  68. ! k& \, E7 [7 w/ k
  69. </script>8 I+ i8 Q! i# Y' b" J2 u  R0 A
  70. </body>. L# ?1 @2 \0 t
  71. </html>, z. F/ K: M; q) e9 \1 o/ f, U
  72. , ~- @. @- i# p/ k1 v
复制代码
客户端:
. s2 T2 A" P5 ~! H6 V4 w9 k
  1. <html>7 E* S$ [" X  f
  2. <head>
    3 l# I$ z/ Y7 Y% E2 N7 U
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">! h% u6 Y  h' u+ _  M9 Y8 e( a
  4. <title>客户端直播页面</title>4 u  t1 E6 ~9 v2 \0 f% j5 M9 j0 I
  5. </head>3 e  Y4 H7 i1 q7 z. S- Y
  6. <body>9 }; U+ N& l8 M$ {9 u3 E2 p  A
  7. <img id="receiver" style="width:720px;height:480px">, r$ S4 u/ [) j& ~2 M7 O0 I( |. T# q
  8. ( N: s, H+ Y5 U+ H$ E* G7 o$ {
  9. <script type="text/javascript" charset="utf-8">
    ) Q5 |, J* D$ v
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    2 H5 M. O& t1 J6 M
  11. var image = document.getElementById('receiver');* ~4 s4 v7 p% }# G
  12. receiver_socket.onmessage = function(data) {
    + K1 Q! j* @2 e
  13.         console.log(data.data);
    # h* I3 r( K+ L
  14.         image.src = data.data;
    " ]% h5 O7 ^; s; g
  15. }: X$ N2 ^4 M2 T8 v! I. l$ ^
  16. </script>; F  }6 B7 _+ q4 l: S
  17. </body>4 D) f) ^1 T4 k6 k1 Q
  18. </html>. i3 k: v( e+ U5 g
  19. / B( x8 b0 x5 a) y% r! e/ B
复制代码

( _, n4 s: V/ c" m* _8 u4 S9 E( g: T4 n( k- H
3 m! f9 S" q0 p8 y# ^/ H

# i/ ?4 y' L9 l$ J7 A) O  B8 L( V: j% t

; }' [( w- W- S! `5 U% i
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 15:01 , Processed in 0.121170 second(s), 19 queries .

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