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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码9 c0 x. b1 E6 p  X6 V/ A
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    3 {& B: d+ `& V+ i
  2. $client=array();
    5 T3 `1 Y* J% U( s. |6 {. [+ {, M) F
  3. $serv->on("open",function($serv,$req)use($client){! e  s6 g! c; [2 s
  4.         //echo 'connect'.$req->fd;
    : Y* l4 f, W! k; E  `
  5.         $client[]=$req;9 Y9 s, J" [" H0 B$ \
  6.         //var_dump($client);
    * V% C; m" C* W7 G
  7.         $serv->push($req->fd,'aa');
    # O+ U  ]: y  G9 Y: P# N. V
  8. });) e( F2 {" W: _( a# i8 k! D7 V2 @

  9. . Q) b0 j2 B% _' D, q' d9 T+ I% [
  10. $serv->on("message",function($serv,$frame)use ($client){# ~0 A6 z# z& Q- |
  11.         /*var_dump($frame->data);
    / ^- ?  \, P- B' f5 A; s
  12.         foreach($client as $key =>$val){. i5 G5 @% Q) w
  13.                 $serv->push($val->fd,'aa');8 c8 l/ Y/ K1 u8 ~  A
  14.         }*/% C2 i$ Y# k1 ~" n! n1 w
  15.         $client=$serv->connection_list();4 m4 \( C5 Q, n$ Q9 ~
  16.         var_dump($client);: n9 k" A8 h' W" w# J5 V" w
  17.         foreach($client as $key =>$val){
    . e3 g2 A; `. U: G' u3 @
  18.                 if($val!=$frame->fd){, c9 q+ K7 }; Y5 B" z, |9 d
  19.                         $serv->push($val,$frame->data);
    2 E5 M' B9 \" \4 F7 @
  20.                 }$ d+ p9 m# p3 p+ F
  21.         }
    7 V$ u8 n# I) f# d" _) g. D
  22.         
    ) q3 s0 u; X7 r$ X; k
  23. });( u! T4 h' _( u

  24. 4 p5 Q  V. m) a" y
  25. $serv->on("close",function($serv,$fd){
    # R. r) V) p  e# [6 Q
  26.         echo 'close';
    & [4 H' M6 }5 x1 N- w# i! G0 M: l$ b
  27. });
    2 J3 D* D1 ~# t6 G6 v3 P

  28. 2 N3 u  ?& t* i3 p' f8 Q5 B6 O) J
  29. $serv->start();4 j( J6 |! ~2 m

  30. 5 J9 Y' Z! M& F8 r; N/ w( B
复制代码
主播客户端
; s4 K8 F/ R$ n9 Z
  1. <!doctype html>
    8 q1 O/ F1 t$ e$ g% j
  2. <html>* B4 d/ L5 t. j5 e# e
  3. <head>
    / x% |7 Z- z# M: y0 ~( S
  4. <meta charset="utf-8">* H3 E) ?5 Z" Q: o4 B

  5. 3 W3 ^8 C: v% C7 r
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    5 M8 h3 Q' w( [) z2 @
  7. <title>404</title>
    - }/ L2 o3 y& l! ?) ^% U( d1 E- I* p
  8. <style>, ?; g- b) r8 |* U7 k! Z/ H( _
  9.         body{  i5 B9 ?1 U; _  {7 f
  10.                 background-color:#444;
    # _" [9 x1 l* ]: {
  11.                 font-size:14px;% ^/ W, S3 g' S- G% u
  12.         }' E! K3 h& I2 r6 k! [, Y
  13.         h3{7 c3 U! F7 P. v! n& R
  14.                 font-size:60px;- l6 @$ h1 M8 C. b7 @* {& s
  15.                 color:#eee;
    5 Q* a0 J4 Z( r
  16.                 text-align:center;- l' e( |6 @! G% s0 n3 |3 G
  17.                 padding-top:30px;
    0 z! w: E0 b+ c+ O
  18.                 font-weight:normal;
    3 {6 D3 L1 P/ o, p
  19.         }
    ) I$ @  N% |5 j! }/ |8 K) a
  20. </style>, F# ~5 n: E: d9 X5 {; r
  21. </head>
    & ?- s1 V' t, [0 I' k9 {% E
  22. ( `" Y& a. t" |3 k8 K& m- w
  23. <body>+ v9 p* b* o. \# q& h
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
      [3 E' g6 i% q
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    # {$ F8 X8 m1 P/ Z
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    / j, r. u- l9 E' }% \" H- n
  27. <script>1 b, A+ N5 L2 S! n) a7 @6 z
  28. var video=document.getElementById('video');6 T: f- S8 v9 g) C' Y! e- x
  29. var canvas=document.getElementById('canvas');, X- ~. ^# @/ V% E4 S# L2 E5 m
  30. var canvas2=document.getElementById('canvas2');
    1 }$ \$ n, X, L$ T: G) F
  31. var context=canvas.getContext('2d');( }7 `9 r. l, ^" C# ]* A, E
  32. var context2=canvas2.getContext('2d');2 o) r# c4 r! n
  33. function draw(){0 R1 Z) v  B$ W9 Y6 E
  34.         context.drawImage(video,0,0,400,400);
    ( f( X: u. A5 `) c5 J. t2 a/ n
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));, x- l/ n- I8 t. G
  36.         setTimeout(draw,800);) h0 l" o3 D  W
  37. }
    + e9 Y: k/ S/ n6 W+ p) K, D' y
  38. # Z6 z3 C( L1 ]9 L5 l
  39. //客户端跟服务端通讯
    6 k$ h- I. m5 n. G0 _+ e- D; }. N
  40. if (window.MozWebSocket)
    4 D7 P/ K) b8 C1 {+ A
  41. {
    , t; ^) g( `0 }8 _. _! N+ ~
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");, `% l5 {! `2 g! Q
  43. } else
    5 {8 D* b  b! Z$ z2 q! g4 k
  44. {
    4 V7 X$ {: e; d. e. ~$ Z& y" q
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    3 K6 V1 v& o7 D6 a0 ~
  46. }5 ?& K4 U0 Y$ T0 R" x
  47. 0 K, L  p+ j# l+ V$ F8 x
  48. ws.onopen=function(event){6 G/ o, A, A% X% |) ~% i
  49.         alert('连接成功');/ U! {: F- J/ K2 J9 u7 f
  50.         ws.binaryType = 'arraybuffer';
    6 u; Z6 W; a3 U
  51.         draw();
    5 e$ \. s! B  c1 j
  52. }' c( K9 w. B5 Q9 c2 s. m& E
  53. ws.onmessage=function(event){
    9 D& G. c  O; S$ X
  54.         //alert(event.data);( u* L- z6 k% o* J$ [  Q$ f
  55.         //ws.send(event.data+"client");
    1 b7 K, Y' n; g) c0 K
  56.         qrCodeImg = new Image();
    6 V/ \7 f7 V# q0 s  v2 S6 {  d
  57.         qrCodeImg.src = event.data;
    8 t3 X; s* q% S* _2 B: }
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    3 p" v. q: G" V, c
  59.         8 P. G  Y9 Q; ^
  60. }
    4 E) y7 q% D7 ~1 p) ?2 O
  61. ws.onclose=function(event){
    - n& h3 m+ r7 V" y! Q
  62.         alert('close');& ~: v4 _6 ]+ m' ]. v9 N3 a. |
  63. }
    ' \$ @. p2 r2 f' k- g9 Y8 t) x5 j7 s
  64. ws.onerror=function(event){) f; o* [6 q2 E7 P! x
  65.         alert('error');4 c  |/ A+ Z& `8 Q8 h
  66. }4 @; Q6 n, `( U* s5 v/ J
  67. //video,标签模拟视频
    6 e% v5 |! I- ]& i2 W5 i* R$ ]

  68. 6 w& f7 X1 L- E8 T
  69. </script>
    , h: [; L' H6 u$ M; r
  70. </body>$ X$ z  i& v; d) i
  71. </html>3 Y* U7 j8 _. z6 b2 p5 t" Y
  72. ' L; k# d% X7 `% ~1 a! \# T
复制代码
客户端:' W5 F# D+ ]! X5 u
  1. <html>1 ?- h/ P  w" f* e3 }7 R
  2. <head>2 H' M( n1 Z, e+ s; L) Z/ D
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    1 M3 F8 y  `& |
  4. <title>客户端直播页面</title>- @9 K: f) P9 i( B1 }$ e
  5. </head>! Q' ?1 ~8 _5 l# O6 u# `
  6. <body>
    " y; [5 u- I* w. v: i. n$ B
  7. <img id="receiver" style="width:720px;height:480px">  L5 \" ]4 `6 Q
  8. " d2 g- I% {% d$ |: F0 I/ S+ l, ?
  9. <script type="text/javascript" charset="utf-8">: p# [6 G$ q2 q! v5 `, `1 i
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    ! J+ W# X/ a; {# }* v2 u- H. ], b6 R
  11. var image = document.getElementById('receiver');
    4 u9 q5 Y; q. A3 }+ \# R( {
  12. receiver_socket.onmessage = function(data) {
      O) T0 s, V1 T" f% f
  13.         console.log(data.data);
    . T5 j: J1 e' ^. X8 f8 t
  14.         image.src = data.data;
    5 r0 ^7 \: ]. w$ a2 J' q& v
  15. }, T: U: I- Z# P* s  w
  16. </script>) i% U- k4 B# W% Q
  17. </body>! u0 w5 p( A1 ]* ?# x) T
  18. </html>' l  O, r8 \& r% c) P( ^0 U; u
  19. $ J! z6 ^  U- k" G" T# O+ ^/ t
复制代码
8 p' j4 s: L1 ~0 O4 R
# r1 L8 X: n. s: ~: J) N) P

8 _$ L# h. r+ \, |
& Z7 h. L; A" I3 }2 p+ X+ u2 L8 ]" i9 o

/ u, Y) |0 U) T  v* D4 x3 [' ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 09:41 , Processed in 0.098597 second(s), 19 queries .

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