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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码$ K$ T4 e6 y1 M; D7 j5 O- K0 k& s- e
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    ; K5 ~0 s' d1 F% e! b, Q0 g; @' K
  2. $client=array();* l' A4 E" `3 t% J& A
  3. $serv->on("open",function($serv,$req)use($client){
    . ]* {' s4 z# E* S1 D
  4.         //echo 'connect'.$req->fd;2 `4 I5 C1 A& ]7 e5 h
  5.         $client[]=$req;
    . }0 _/ G& a3 O( _1 t
  6.         //var_dump($client);
    ; V8 n* {* t0 o! K/ K& x! C" a' L
  7.         $serv->push($req->fd,'aa');! B' _* k! O/ |5 I4 l+ q$ e' _! z: L
  8. });2 W8 H( e" v2 m& a2 u4 t

  9. ! w! e- k9 m& K. L0 z5 O
  10. $serv->on("message",function($serv,$frame)use ($client){
      u5 k2 q2 k  K6 r7 S5 {& R
  11.         /*var_dump($frame->data);
    : i* ~9 ^  ]% s7 E
  12.         foreach($client as $key =>$val){
    % L( M" @5 d; U; o' g5 j+ p; H: S
  13.                 $serv->push($val->fd,'aa');( w# t+ h% [& M! X* Y2 P- O
  14.         }*/
    * |$ F7 L) l, a# H( M! S
  15.         $client=$serv->connection_list();7 J* X9 m- A$ w! d# w
  16.         var_dump($client);  _5 J7 _  B7 d9 `6 _
  17.         foreach($client as $key =>$val){
    ( m! j5 `* |! \: R7 t
  18.                 if($val!=$frame->fd){; n6 E. o5 Q9 }( h; l
  19.                         $serv->push($val,$frame->data);; |) H$ I8 U3 T" A! `  h
  20.                 }
      A+ U! M9 X& P/ `
  21.         }7 h8 ?6 Z8 T! G8 r9 _9 D& E
  22.         4 K  k0 O  {, U  z' k7 i( ~2 k8 N
  23. });
    - o9 H% [; ?; O( B7 B: a
  24. 5 {. V8 O" ?1 V; S
  25. $serv->on("close",function($serv,$fd){
    : `- q! \! @* g: N
  26.         echo 'close';
    ) J" O7 _5 b; y- v- Q5 k
  27. });* Z7 i7 S( _  ?

  28. . q  _$ P/ D) x2 [+ j# C) P
  29. $serv->start();  j2 }! e' t* I! E! j7 g$ a# _
  30. * w+ \& m+ b8 C! k1 i
复制代码
主播客户端
( M' T  F" A* F" g  p
  1. <!doctype html>7 v4 a# l" Y) s1 v9 [# W
  2. <html>
    9 k% Z" R, |2 \* N) C; @$ O
  3. <head>
    0 S5 Z, c3 o: X9 c( I4 K0 Y
  4. <meta charset="utf-8">
    2 w8 ?& n/ k8 [2 C2 d
  5. 1 W9 l/ y6 J4 {9 ]; V" f
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"># g  q/ d0 d; }( H
  7. <title>404</title>! L# S5 ?. u' E
  8. <style>3 F: S2 v8 |- r* z9 E  N$ K# J
  9.         body{/ D* b7 B0 R0 U8 U! q
  10.                 background-color:#444;
    / m2 `$ ]# ?- l3 {9 q6 S5 x3 O
  11.                 font-size:14px;" }8 j& g  G' j, T. r- V
  12.         }& @/ A* G1 @. c) [5 r
  13.         h3{
    ( L/ K; j/ c3 w' M! m
  14.                 font-size:60px;
    9 Q- V5 S6 ^& R+ q
  15.                 color:#eee;! H4 J7 o) {( K$ |& K( |
  16.                 text-align:center;
    : l9 \8 q4 _; ~. n" d3 ?0 H) z. N
  17.                 padding-top:30px;
    " _+ V# w) F- d& u8 \! J; W& _7 W
  18.                 font-weight:normal;$ S: q  g# }, F
  19.         }
    ) t2 p# N) \, b# R
  20. </style>5 \2 j$ j  {  S& q0 X
  21. </head>
    " s0 B) c& f& ^9 I; n
  22. 6 [  z  t9 b$ l( h
  23. <body>: L0 N) Q6 W' P( c7 A
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>  S) b2 X) `7 G1 r- O' K. z. B) U
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>( A% r, i1 _! z% F' n
  26. <canvas width="400" id="canvas2" height="400" ></canvas>; o4 F  v  A9 t* a
  27. <script>
    ' i+ ?* v5 U( Y# c/ \( U
  28. var video=document.getElementById('video');. n. E2 Q- P, n) e
  29. var canvas=document.getElementById('canvas');7 k3 E! U+ l4 I& F6 J
  30. var canvas2=document.getElementById('canvas2');9 x  d5 s' S1 M1 l8 J2 M6 P
  31. var context=canvas.getContext('2d');4 t; d0 }) h8 m' ^  f' M
  32. var context2=canvas2.getContext('2d');) e: P& b4 o& z: |/ x: v
  33. function draw(){! u; _" r! U* {9 j: d
  34.         context.drawImage(video,0,0,400,400);
    ) J' X5 v/ G; ~9 D0 J  `5 p
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
      m/ Q1 h7 ~! A! X; O: @
  36.         setTimeout(draw,800);# l* c6 m2 N3 @$ c! i
  37. }
    7 k4 i0 o2 k7 @2 T# _' e
  38. - C1 K: w4 C  f6 o3 s: \
  39. //客户端跟服务端通讯
    4 `6 d( I7 m, q
  40. if (window.MozWebSocket)
    ; X5 `$ u* Z, P5 x8 }% H/ O
  41. {- b; D( `& `7 `8 x
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");: J' n) n8 y( e! A
  43. } else6 d  l, l+ J1 s" \7 \
  44. {3 a; C+ d8 [  Q! ]
  45.         ws = new WebSocket("ws://182.61.42.187:9501");" V; c) J) G) r, \% d. I& s2 R
  46. }  L& }' o5 m4 v4 Y1 B5 m

  47. - f$ ^5 T: u: M. i+ t  }
  48. ws.onopen=function(event){
      M% i8 t( N% P8 w6 |3 V' ?
  49.         alert('连接成功');
    : ?+ ]/ P4 N( o
  50.         ws.binaryType = 'arraybuffer';. L5 d7 \$ ?! u' b. o
  51.         draw();
    2 u9 o$ ^+ E' c. Z
  52. }
    ) X3 h& q) W; E' S$ w
  53. ws.onmessage=function(event){, I$ H' q2 m0 M6 l& C' u' o. \
  54.         //alert(event.data);
    ' g6 @5 ~$ G" p4 X$ C
  55.         //ws.send(event.data+"client");' |  U: k) ^7 K3 a
  56.         qrCodeImg = new Image();, H# @9 Y; C8 q" j
  57.         qrCodeImg.src = event.data;
    . }4 P2 S$ C& w- A" ?9 w
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);) R& F( v1 S9 @. ]( v9 P9 [- o
  59.         
    ; ]' }$ G5 ]6 g
  60. }
    9 e$ H' H* b% U5 Y" S
  61. ws.onclose=function(event){8 q! I; K5 P* l% Y& N
  62.         alert('close');
    7 |% P- S/ D$ ?2 W2 R
  63. }) R% E7 i: ]2 N8 `' K
  64. ws.onerror=function(event){
    & I/ E  I. G$ k, v0 y9 `
  65.         alert('error');% @( M* A9 ?7 F7 d7 i( t
  66. }1 c1 L) `6 y# ^  C) I- ^
  67. //video,标签模拟视频, E" u; m6 Y) y
  68. 5 n6 ]  K- w: z6 ^9 ?; M" X, C
  69. </script>5 ?; A) @4 U6 y4 g, o- T
  70. </body>3 }" p7 E3 H( m% }% e4 H: F: V
  71. </html>) _% V5 k. Z' g6 O. f' Q
  72. 4 K+ u+ l/ y: Q5 ^; A
复制代码
客户端:% v. D& V$ M$ j0 C8 P3 N6 c7 y
  1. <html>3 Y7 w: ?  ]8 c  u" h
  2. <head>. B2 m3 A- k  H/ v6 T
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    $ u! G9 n  P7 V& |" P
  4. <title>客户端直播页面</title>
    7 a* n& U. e1 d# D7 f' C
  5. </head>! K0 i# {& N  S+ ]) r
  6. <body>+ X- w/ _/ d8 ^7 D: f) G; V
  7. <img id="receiver" style="width:720px;height:480px">4 U2 l* z& {6 W' a  k: h
  8. " D* T) q: s9 a# w$ ?9 h3 c$ A
  9. <script type="text/javascript" charset="utf-8">. j9 n# }2 }* O' ]: Y
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");4 x' t( w5 x' H
  11. var image = document.getElementById('receiver');
    - P: d. }! X1 Q5 g  c" h" o+ f) a
  12. receiver_socket.onmessage = function(data) {
    $ d1 K* N7 R# s7 i/ k9 ~, T  V
  13.         console.log(data.data);% E4 M( Y  K# j6 t# ?8 Y6 ?9 h6 D
  14.         image.src = data.data;8 F, Q7 l3 f+ S5 h. v
  15. }
    ) Z. H- E# G0 \
  16. </script>8 H3 \4 u3 d# A2 l) X/ @7 k, W
  17. </body>
    $ D5 D# w8 E% F$ l' F6 n
  18. </html>! @4 R4 O* G3 h# O; e  i' ]

  19. 8 {% k5 e& T, z; D2 A
复制代码
/ q! X2 V- e2 V; b0 Z) T
' y& O$ w: N3 W6 L% K3 ~
- s* [2 \! ]9 w0 j
  _4 ~( ^9 \, Q/ U5 q/ d8 S7 }0 I

$ P( o( i' }- P  w' y! h8 }" C! @! s
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-4 02:58 , Processed in 0.126313 second(s), 19 queries .

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