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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
+ T' V! M" y2 F* m
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    8 ^( Y/ B; ?; u2 w# \( T- f4 _
  2. $client=array();
    ! |$ `8 z8 e; J$ K0 d
  3. $serv->on("open",function($serv,$req)use($client){
    ! |2 ^6 t6 p2 C3 ^( @; Z
  4.         //echo 'connect'.$req->fd;- T+ B" y, k2 K
  5.         $client[]=$req;  Q2 c5 O6 s% k# i6 }4 z% U
  6.         //var_dump($client);
    6 l# w: P5 g- R2 u% K- \/ r* ?2 S+ t
  7.         $serv->push($req->fd,'aa');
    & H; L( y  r8 [. f  ]$ j
  8. });5 k8 h8 q' u. s! z0 Q' Q1 L+ X
  9. * b; d0 y4 G7 a. U1 R  S5 n
  10. $serv->on("message",function($serv,$frame)use ($client){; H- }) \9 Q- A) ~* ]# E" z
  11.         /*var_dump($frame->data);
    ! o3 }6 B; F& _6 {- J3 ~  D
  12.         foreach($client as $key =>$val){
    6 Z9 M1 Z% b, l8 ^. y. K! J, R
  13.                 $serv->push($val->fd,'aa');
    5 D0 L4 X' |% V, ~& q, \: w6 Y
  14.         }*/
      A. t5 b. z" F3 q7 B; l
  15.         $client=$serv->connection_list();7 E1 R& m$ y  D6 c
  16.         var_dump($client);- h+ ^4 E- u( O6 A8 R5 d* E: X
  17.         foreach($client as $key =>$val){
    ' s; A7 }6 a' B9 d" K; ~, q1 E
  18.                 if($val!=$frame->fd){
    6 d1 @- j$ O: I# X
  19.                         $serv->push($val,$frame->data);
    7 O! K+ t: i* Z$ _
  20.                 }; f: R8 n/ z/ j5 n2 A3 l5 b
  21.         }& k( _! Q0 e0 g: E" C$ z/ E
  22.         
    ! g# Q# R$ \! ]9 m
  23. });
    : J, |4 W1 l0 L2 O$ T

  24. ( }  B& Z' h! e
  25. $serv->on("close",function($serv,$fd){
    6 c; u7 x0 T2 x( l
  26.         echo 'close';9 D9 G0 K  z# f% R. i% o# \5 O
  27. });
    4 S5 P  q3 B9 o
  28. / v! X# H0 \( @4 r. s, x! v% z
  29. $serv->start();2 D/ m, ]/ I* W  K% I5 o$ a
  30. / i5 c5 N* c* X7 t7 S
复制代码
主播客户端, E, d& _$ S2 ^7 M! q+ \
  1. <!doctype html>! {* `8 l4 A7 s) f$ X
  2. <html>- W0 u2 h6 F: X3 B6 ~
  3. <head>/ t7 n" q4 l; u) J
  4. <meta charset="utf-8">
    4 N% S1 P2 q$ Z7 ^  b8 Z9 C6 s! R

  5. % o: y* W. j' G# F% D; m
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">, c# T; r6 }) ^  J; A
  7. <title>404</title>& z5 H! ^- D$ k; ^! N) f
  8. <style># f5 G1 o- A2 ^" M6 [+ r
  9.         body{
      ?$ R7 H0 @7 O3 J$ F+ \! I# P
  10.                 background-color:#444;# c* r: W- w6 @# ]# m4 i# y8 b" j
  11.                 font-size:14px;
    * y4 X9 J+ u0 T9 \) A. E
  12.         }
    ) x$ N$ J8 a/ k3 r- k+ n+ ]& u% K' R
  13.         h3{; ~2 W  h/ c% d- v  d4 ^' v
  14.                 font-size:60px;. o/ p5 l3 F' a  q7 Y
  15.                 color:#eee;8 W- p% d- M0 J& X2 K, T. @
  16.                 text-align:center;; q& I6 D. U. B+ ^
  17.                 padding-top:30px;5 m# ?" K8 D) Z1 e' ]9 N
  18.                 font-weight:normal;5 J9 x8 F2 Z2 ^. Q7 D( e
  19.         }6 z+ T" f; h' P2 w$ h3 L' \
  20. </style>. u- P: ?0 M) P0 B1 P
  21. </head>8 T. h" i3 y  c& R) M

  22. , N! b8 M0 o/ R+ A+ J+ G9 E
  23. <body>9 u1 R, I: v- A  ^  t' Q
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>4 R  j/ p: C, k! p. o0 L, @
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>; k; C1 `2 t/ n% q4 T
  26. <canvas width="400" id="canvas2" height="400" ></canvas>& v! L6 n* B' }9 }
  27. <script>
    , @% c- h3 o* f/ R
  28. var video=document.getElementById('video');
      m3 E/ l( u9 a' I2 S/ z
  29. var canvas=document.getElementById('canvas');7 \' L  d: T4 w
  30. var canvas2=document.getElementById('canvas2');' {% k7 {* {, D% ]# I9 [7 ~
  31. var context=canvas.getContext('2d');' ?% U' X4 @" n* H
  32. var context2=canvas2.getContext('2d');
    $ i- X3 w" E+ E$ I8 X' E1 \
  33. function draw(){# g$ H0 t8 J" Q: Y& r
  34.         context.drawImage(video,0,0,400,400);6 d. W; T" }6 z- O
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));& O7 v* @$ F* _1 Y1 X9 s. K
  36.         setTimeout(draw,800);
    ' L. M+ V  h. A
  37. }
    2 |2 Q5 W/ K; p# \5 {  u8 w% }

  38. : Q5 y: m7 V- r
  39. //客户端跟服务端通讯4 S" P/ t6 X2 j4 S: E. d* @
  40. if (window.MozWebSocket)" P3 w1 ^; B9 |/ |" J
  41. {; ^1 e; z+ k. H: b) y- k( T
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    & h$ G2 E# w, C# z
  43. } else
    2 G8 M6 r& r: s% g. ~. X
  44. {1 b( ?. A5 Y7 U  q
  45.         ws = new WebSocket("ws://182.61.42.187:9501");9 Q; p, `5 b0 _; Y# i9 G" y
  46. }! S& p$ ]! G1 ]; H' b) s% `

  47. % g" B3 P3 ]* q: o2 C! _
  48. ws.onopen=function(event){0 F5 A4 }. Q7 T# J0 l
  49.         alert('连接成功');! B: c$ ?9 d) E% j
  50.         ws.binaryType = 'arraybuffer';( _7 X8 n7 m7 G7 `- d+ |1 b
  51.         draw();
    8 s  O7 D6 ?# J; ^( A0 Y
  52. }
    " h" v3 Z4 @5 x" V, W' h! z; Q
  53. ws.onmessage=function(event){' g3 H2 i, q, ]# r
  54.         //alert(event.data);, M2 U" o" e  E: d* `6 h  j
  55.         //ws.send(event.data+"client");7 A- F0 }0 h1 j; e, ^+ ^
  56.         qrCodeImg = new Image();5 D1 `2 E  }8 l" I# D. F7 w; d/ T; H8 X
  57.         qrCodeImg.src = event.data;/ Q: M0 \- h2 I  b0 ]/ I
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);" K: i' D2 E- }+ O! l$ G
  59.         0 p' k: d: g/ q) E& W% A
  60. }
    ! q/ p6 G5 Y8 Z
  61. ws.onclose=function(event){6 ~9 @* |( A% @8 Z9 W6 F, q1 ^
  62.         alert('close');  F5 l$ B: K. G0 I
  63. }
    ) c! ~) b) P$ [( H( _2 i$ `
  64. ws.onerror=function(event){) Y7 f/ E$ R6 O% x* i( i
  65.         alert('error');5 `7 A$ D/ L3 z" Z- E9 C- d6 G- F
  66. }
    " E8 M& P1 f+ E1 x2 z# p# O
  67. //video,标签模拟视频
    ; E& u6 H# @0 M# m

  68. 9 X3 r3 J/ ?3 V5 E( G/ f' ]
  69. </script>
    4 p; X5 o, T; p$ V' [& ^4 K
  70. </body>7 W! V5 m/ u9 a8 d% y+ T
  71. </html>
    / s: y4 f* s7 \! T5 O- w$ @2 a
  72. " c0 U8 J1 ?& Q2 ?0 @- Q
复制代码
客户端:* B, C$ i0 Z" Y( ?$ `  l1 w# G
  1. <html>/ [& x7 j4 A& N( q0 P0 x
  2. <head>, g- |% M3 o4 x- Y! {
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">1 R7 O6 \. k: I
  4. <title>客户端直播页面</title>
    4 s/ }( l7 z: s6 d5 Q0 ^8 s
  5. </head>8 `  b$ ~( j; t& h/ j3 l
  6. <body>8 ?$ t: j8 G# V# ?$ v2 r
  7. <img id="receiver" style="width:720px;height:480px">
    7 e+ K2 f: ~# o" F) B" p' `

  8. " p1 H- i: t! H- B: X3 C( q, n( {
  9. <script type="text/javascript" charset="utf-8">
    ; q: L9 g2 r: A% m% R0 z8 D1 [
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    ' Y( L; M' G/ X8 T; i, m! T
  11. var image = document.getElementById('receiver');
    + T' i2 X6 R5 ~: y8 D: Z
  12. receiver_socket.onmessage = function(data) {
    # }4 b; d  E1 s! G6 }/ ~
  13.         console.log(data.data);
    . C' p- |# m' n/ s: P
  14.         image.src = data.data;( o0 G: i/ s' m  x
  15. }
    ) d, J6 d5 x& E" _
  16. </script>; D( N  N7 j% L& B* I; g% J7 n
  17. </body>
    & A2 `, B  A: j/ S. t* A6 x2 y
  18. </html>
    ; _2 ]' P6 M& b* O- A& |
  19. 9 y- {$ \3 b5 c2 c2 [
复制代码
8 p# ~, ~' ~& E- w

3 ^# B% f" @: {1 S+ |/ x/ `: ]  _( K2 N4 P- e) }

6 w8 N. m: w4 z' m( ?* m5 o* L9 H" L: `; G
' {* M( ?8 @9 F! ?- o
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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