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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
7 I* y& i" }1 @# V
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    5 \+ p7 s/ Q4 e" y1 G
  2. $client=array();
    1 g% ~! _  O# A
  3. $serv->on("open",function($serv,$req)use($client){
    ) |7 z% X# i, t4 f9 P# ?( p
  4.         //echo 'connect'.$req->fd;, f# B6 X& C6 [3 B2 N
  5.         $client[]=$req;4 e$ m3 J! e$ [" m# i# t
  6.         //var_dump($client);
    ! C- |5 J5 |* X. E
  7.         $serv->push($req->fd,'aa');
    / X) C( J5 Y9 O! t. S+ U3 X
  8. });
    7 Q) i  I4 {, W
  9. 8 M5 S" R( t. ^$ p
  10. $serv->on("message",function($serv,$frame)use ($client){
    " r. R& i+ G: S4 z" B
  11.         /*var_dump($frame->data);+ ?/ K. x! ~) t$ t' k6 A1 k+ l
  12.         foreach($client as $key =>$val){7 w$ K$ A: S/ z
  13.                 $serv->push($val->fd,'aa');
    ( e6 G$ N3 B8 C3 Y& k3 q7 \3 g  x  e
  14.         }*/8 L" F/ p: W1 i: M% F) {5 R
  15.         $client=$serv->connection_list();9 }' D4 c% R- M0 Q/ c3 A
  16.         var_dump($client);
    5 j7 `4 J4 F4 N. Q& |/ f2 m
  17.         foreach($client as $key =>$val){- K# s! O4 J- d& I1 J) Y& U3 i6 x5 a
  18.                 if($val!=$frame->fd){
    0 R* L3 W; {* M  v. ~+ z, {
  19.                         $serv->push($val,$frame->data);" q% W2 Z9 U8 s
  20.                 }7 p7 S! Y# z: N6 _
  21.         }" R' o* d$ q& @
  22.         2 U+ b( ^1 K4 Q7 W* Z1 V
  23. });) ]  t  k- z* v$ m* [* m

  24. $ |- @( G/ s3 u4 \
  25. $serv->on("close",function($serv,$fd){+ X2 f; q2 l1 |/ ?- h  G! K! m3 Q
  26.         echo 'close';
    ; H1 g, I" F+ b0 `
  27. });& h4 i, N; S/ @

  28. ! c- F/ H% X$ p: H! ]9 f7 F
  29. $serv->start();
    1 v; T+ |! H& A
  30. 9 v7 X! \% ~; z8 x) p" L3 [
复制代码
主播客户端& C& H' z5 o" L" u3 B$ ?
  1. <!doctype html>/ H5 s, b4 l# n) _$ k* Y9 T
  2. <html>  B9 U2 v" Y8 q* Z! K. s
  3. <head>
    , o7 i$ C9 F( p& q
  4. <meta charset="utf-8">
    6 G$ c  b  U" M
  5. ( \  T  [! F$ H" f% K( V% |
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">( v- P, C( M" R8 k  G$ c- ?
  7. <title>404</title>: A. A  w7 A- I5 o( J
  8. <style>% u0 J5 _4 n2 I
  9.         body{
    . F: {2 ]! {2 w% J3 D# n
  10.                 background-color:#444;: \8 R2 Q6 @6 m, c# C7 X' c
  11.                 font-size:14px;' W! z& z- _+ I9 N; {) ]$ L
  12.         }
    4 P! i. y6 s7 ]) j: D. D
  13.         h3{* l, J- d, t# S" z4 E3 j
  14.                 font-size:60px;1 x% X  f- h1 t5 O+ {9 T4 m* Y3 h
  15.                 color:#eee;) L  x! \: y% y* a" w, k0 `
  16.                 text-align:center;
    4 V$ o' J6 X* p& [. D7 B' Q7 D5 l0 t
  17.                 padding-top:30px;
    # P- H9 C# f! h7 h0 W7 C' P1 y$ O
  18.                 font-weight:normal;$ d. Z& {: p) M4 ~+ j9 K: Z
  19.         }( x( [+ g8 x) e) L" l4 [: \
  20. </style>- R% I- o6 Y  U0 ^8 C/ h
  21. </head>
    # o3 U, }3 S, O/ r

  22. " o- }" e0 ~: Q% ~) ~. S
  23. <body>  @- ]  s5 [7 {- ]* ?( S
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>2 b4 t" X. [' a9 W
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>& _; l  S/ ^- w+ }* w( k5 A, k8 t, x
  26. <canvas width="400" id="canvas2" height="400" ></canvas>! Q; d0 k: u1 W9 v
  27. <script>
    * |" v( T" Q, _" p
  28. var video=document.getElementById('video');* U) R2 l' h+ j9 s1 l
  29. var canvas=document.getElementById('canvas');* D% x$ g1 {7 {
  30. var canvas2=document.getElementById('canvas2');' f3 G- X& B& X# u) F( d9 c
  31. var context=canvas.getContext('2d');7 S4 Z/ X# g+ m: I1 g  K& |4 y% ~
  32. var context2=canvas2.getContext('2d');3 I, `7 u% r: l8 [: P
  33. function draw(){
    ) f% E( a# R9 I8 ^8 p/ b
  34.         context.drawImage(video,0,0,400,400);' `9 W- h. F) ]- B: S0 Q! [4 _8 l
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    ' j7 C* n' M& w) i+ G; |6 |" T& _8 y5 @7 F
  36.         setTimeout(draw,800);
    ) q9 F5 f: e1 Q, d; B! h
  37. }
    ( j9 A$ |% c3 \9 H4 B

  38. * \5 v* U" y1 Z" i: |3 L
  39. //客户端跟服务端通讯6 g4 c' ?2 z- @; B+ s/ E; Z- Y! M
  40. if (window.MozWebSocket)
    - k# _3 q% j$ {  d( i
  41. {6 Z3 e& r4 e! G1 U2 q
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");8 V9 z) n4 \4 U$ ]# t6 D, B6 u
  43. } else
    # ~- @  Y5 ^. B$ D
  44. {
    1 P' e, K$ O, K/ t
  45.         ws = new WebSocket("ws://182.61.42.187:9501");: g0 N& W) D7 ]- \# A
  46. }
    + x8 J9 l, r2 S7 {0 r, {
  47. 4 @9 h! z3 r( U8 u; @
  48. ws.onopen=function(event){+ e# U! d' F! @: i
  49.         alert('连接成功');2 M' W* p$ o6 T- Q
  50.         ws.binaryType = 'arraybuffer';  x1 o8 M2 r6 P! n; v
  51.         draw();4 {9 k( Y7 L! g* h
  52. }, e1 a! P$ T- H, q
  53. ws.onmessage=function(event){
    ) ~, `* ^3 h, g0 m
  54.         //alert(event.data);
    7 Q: O. ~) P# i' W8 R& m  k/ C& G
  55.         //ws.send(event.data+"client");' |& X3 H6 k( L7 u1 f8 N  ?
  56.         qrCodeImg = new Image();
    ( p6 x1 d8 g# h
  57.         qrCodeImg.src = event.data;# A& y% A( o0 p: S& Z% n6 M; Y
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);) ~( k! \' v9 ?  w' `+ l
  59.         
    , M( i# A% d! ?: `8 x0 Z5 y0 o
  60. }
    $ J) ]4 d" M  j* _
  61. ws.onclose=function(event){
    2 E! B: G9 I' X- s0 s% m3 H( A2 q
  62.         alert('close');
    , N" M' \6 k  O& V& j0 M
  63. }7 B: `1 }4 U! l) n" n+ t
  64. ws.onerror=function(event){$ k0 g* ^6 _4 f  T
  65.         alert('error');% `1 g0 W1 g' y* I. B
  66. }
    0 k9 T" D* C* a9 Y3 E  X% R* P$ Q
  67. //video,标签模拟视频
    ) a, h, Z8 u2 A$ T/ g
  68. " m) r# E  N  R) R6 ^8 A
  69. </script>, u. Y5 ^0 s% }3 K. i2 ]
  70. </body>
    3 M$ @6 n2 m' H, b& j
  71. </html>
    & L# W3 @# P" i  _
  72. 6 A( M0 n9 v+ |' Y& W+ q" u
复制代码
客户端:! q( h* L# V5 L) }9 I
  1. <html>
    $ W5 V. r  }2 {: Z4 ]/ Z) P
  2. <head>
    # j" t6 J8 b# y  G& v
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">* ?& ^8 A( w& C, s
  4. <title>客户端直播页面</title>
    ( ]. K9 H' Y, e! m8 k
  5. </head>
    . v1 N! c: I1 f/ O% }
  6. <body>4 Q$ A  r1 W. g, `2 V! q2 R) S
  7. <img id="receiver" style="width:720px;height:480px">$ K( Z6 x; w5 E7 D/ U; }
  8. / J  a  ?% F6 Z9 V
  9. <script type="text/javascript" charset="utf-8">( z+ D( i+ y" ^+ U
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    2 v+ O# {* \/ n
  11. var image = document.getElementById('receiver');$ }7 z8 E( U4 I) |8 ?
  12. receiver_socket.onmessage = function(data) {# u4 q' g+ ~5 @, I( S
  13.         console.log(data.data);+ i7 W" h% M: ?% x+ }9 Z0 o8 B
  14.         image.src = data.data;- M% T' G- Q9 G$ b1 D- l) ?* ?
  15. }8 H# @; g1 L) S% B6 }0 B/ |& k( m
  16. </script>
    * Y7 j& j0 d. L* V
  17. </body>0 r2 ~' L# I& ]! B% n" ~8 r
  18. </html>* o+ W1 Y: H: a* L
  19. / i  J3 S# y9 d* o/ l% J
复制代码

4 W3 |. H; h6 `, T- q3 k. t" B
9 y3 M  p3 ]# f  H( d5 U, ]/ u' w5 r* N4 f7 C: ~2 Z+ B
" k" c7 W  l$ l

. B$ }/ t6 t8 m- V( H; ?& {
0 z  r  Y8 j" @
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-19 23:59 , Processed in 0.064812 second(s), 20 queries .

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