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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码' U5 j9 z6 r) q  m0 s5 q' y! ^) Y
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    : j) V, O$ g7 w- C
  2. $client=array();
    + I) k" x- m1 G9 l6 l
  3. $serv->on("open",function($serv,$req)use($client){
      ?7 T6 ]* P0 v) O
  4.         //echo 'connect'.$req->fd;1 J$ ~, b9 n& k. o* }7 }
  5.         $client[]=$req;, q& y+ D% H0 B8 i
  6.         //var_dump($client);
    4 }, b+ K' _2 R3 K! a# K
  7.         $serv->push($req->fd,'aa');
    - I. F! m2 k/ y
  8. });
    , b& B! Q: f7 G
  9. * r% F0 T" }/ i& G5 S0 C8 Y# m
  10. $serv->on("message",function($serv,$frame)use ($client){0 |! G# c' g, ]' P
  11.         /*var_dump($frame->data);
    : w5 R% I* m* k# |1 q+ l$ V# _0 C
  12.         foreach($client as $key =>$val){
    . V! i7 P9 G' d. B! s
  13.                 $serv->push($val->fd,'aa');: {2 ~9 q, `8 A
  14.         }*/1 A- c/ L# @& X! U3 X0 f# D
  15.         $client=$serv->connection_list();
    5 T+ V3 Q3 k% H# f
  16.         var_dump($client);
    - V( c- K7 L" O( w- l& R" Z
  17.         foreach($client as $key =>$val){
    3 T" L1 Q* t2 E
  18.                 if($val!=$frame->fd){6 y8 ?% |- x+ F7 Y( K) w1 g
  19.                         $serv->push($val,$frame->data);
    $ }5 k( q6 B& q1 ]4 p6 u6 T
  20.                 }
    % J1 Z3 s2 `" p* Z
  21.         }" T2 v# \3 r. K, H  U# I
  22.         
    ! G4 P) ^0 \+ q& X5 I2 ?
  23. });
    ; g3 I8 x6 l# v  j  N& C

  24. * f+ b( K" w& o
  25. $serv->on("close",function($serv,$fd){( g1 b' [1 d8 q/ K$ D
  26.         echo 'close';
    / \$ o& W9 L4 d1 P$ f# R! K
  27. });$ s( x, c& x( y" v
  28. 0 V, Y' m; a8 J/ v( p2 ?
  29. $serv->start();
    . v$ `! w# j! J2 `3 J

  30.   g7 v/ f2 J: Q, l
复制代码
主播客户端" h9 q3 w6 t& ?1 p; i* J* V% v$ v
  1. <!doctype html>
    / o. O$ G0 k$ d# |$ n$ G
  2. <html>
    ! i+ o2 a2 K9 ~6 ]; S- Q
  3. <head>
    / E3 Y6 z+ K. [+ K
  4. <meta charset="utf-8">
    ; L3 p) B( P" v5 g7 G

  5. # V- ?( g/ |: \9 \& ?# G
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    * [# P' m8 ]- B; M+ I
  7. <title>404</title>! V6 `1 W# ]4 P7 N8 }
  8. <style>2 r! [- l; a. i/ R% _' Q% |) _* Y  L
  9.         body{$ ^; V1 q+ J' \/ _8 N4 X5 [! L2 `5 S
  10.                 background-color:#444;
    " ~. j7 k' l# y4 Z
  11.                 font-size:14px;
    , s! {+ p1 t. x) j  ^
  12.         }
    - V; U% q7 L* z2 `$ Z0 I5 G$ L1 N
  13.         h3{5 J& P7 i5 b: \5 s
  14.                 font-size:60px;5 L5 V4 o& V1 b/ \* I9 ^# T% J
  15.                 color:#eee;( h, k0 }4 s; K( Z' m5 u
  16.                 text-align:center;
    . Q+ n$ m3 ]' `% A4 I
  17.                 padding-top:30px;. `( P* y" e0 k7 u& o9 f
  18.                 font-weight:normal;/ i8 G6 [* X6 q
  19.         }  e/ U# Z% ?4 Z& E* M+ s3 ~$ K, K
  20. </style>: j" A$ }, n7 o& Z5 [
  21. </head>3 u6 _4 O% j1 `3 i& r
  22. 0 C0 ?- y0 N7 P2 Z9 |" @
  23. <body>
    2 E$ x* z! L% g% e! o
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>' J0 w$ [" w- `7 N/ @1 A
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    6 c1 v7 R$ O2 O$ ~. }5 E4 ?; Q
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    3 f% j7 ?+ {7 V% s4 z
  27. <script>
    + W/ w! j( g6 Q
  28. var video=document.getElementById('video');% L: h5 e0 T5 O) a
  29. var canvas=document.getElementById('canvas');* Q3 T1 m  c8 a/ x( f- E2 D2 X
  30. var canvas2=document.getElementById('canvas2');  T: L: T. P/ Y* z
  31. var context=canvas.getContext('2d');' P9 Y+ ?( `! X: C, |
  32. var context2=canvas2.getContext('2d');
    & C0 s. K! F4 g& m
  33. function draw(){
    ' n7 H" [/ n; H& a! F* u
  34.         context.drawImage(video,0,0,400,400);( O' u: k; b8 x
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    0 ~4 {& _* E* l2 M6 s: P7 t6 A
  36.         setTimeout(draw,800);
    ' X1 |& z, R" r$ t2 K" Q
  37. }
      q3 G' K/ N7 o6 |4 R

  38. 8 Q# G7 n3 M( u. _( f/ |" K1 d4 E  |
  39. //客户端跟服务端通讯/ E* D; o3 \+ H7 u  J5 G4 z, Y
  40. if (window.MozWebSocket)
    : O' x* f; d* l1 M7 F
  41. {% E0 ]7 M+ q( @$ [+ T& n
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    9 w2 o5 ^* I( Q+ [$ d5 e$ ?
  43. } else6 e9 F" X( P6 b1 F: c
  44. {
    % s4 q7 |1 ^9 h: s! M3 Y2 F% p9 ^
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    1 ~- a/ Q  `0 ?9 H9 y
  46. }
    & a. j3 r, `9 z# E/ A! X

  47. ! i. P1 Y; L0 W5 t  u& n
  48. ws.onopen=function(event){
    / ^! C8 o( d/ g3 C
  49.         alert('连接成功');6 j) X8 D4 ^, U3 Q
  50.         ws.binaryType = 'arraybuffer';
    $ C; `- p: D/ E' [+ {5 ~8 Z
  51.         draw();
    8 S, O  d$ ?$ \6 B* z1 F- M( o
  52. }
    + U5 `, W7 Q/ ]4 @" X
  53. ws.onmessage=function(event){; F; R) _1 _6 G8 J" i8 g
  54.         //alert(event.data);. N" G8 V* C7 x! m
  55.         //ws.send(event.data+"client");
    + D* ]! X3 J: i% J% ^- p
  56.         qrCodeImg = new Image();
    ) u7 ?+ w" j* y1 w7 u2 [
  57.         qrCodeImg.src = event.data;
    ( C: u0 R) u* [  A! m
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    # A; M8 w8 [9 X" M! a- ]5 W* }
  59.         $ Z: D, l5 ^& `: S& K' v1 }
  60. }
    ) K8 F! k. E1 c6 B  S( f' d
  61. ws.onclose=function(event){
    : X. P- i8 l; w, \
  62.         alert('close');
    5 S* B* G3 f7 ^& `$ B5 T
  63. }
    0 v8 F% W$ n" t# n! V" p" A
  64. ws.onerror=function(event){! r8 E$ O+ c$ G
  65.         alert('error');
    % k& ?' U; _0 z* m( Z( U' C, n
  66. }! |" y3 z' }# R- z: k" Y. b; r
  67. //video,标签模拟视频  A" o( |$ W, J: x, e  e
  68. 2 S! k1 T6 w# h4 j% {& G9 x# n
  69. </script>7 p! I# g; K3 {) a9 h
  70. </body>
    7 b5 Z, h! `/ S& |& q
  71. </html>
    / C8 `: ~; e: X, P. u7 y6 r, ^% p

  72. ; w( F0 e& k% ?
复制代码
客户端:/ k& l; H% |8 B/ o1 A
  1. <html>4 x& P5 h: X3 b9 p
  2. <head>8 |9 o4 Y: V1 }; q) V$ }% n+ N$ t+ d
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">9 n( Y/ E2 c* ~2 P# h' V
  4. <title>客户端直播页面</title>
    . t* s' x5 B$ R, z# l
  5. </head>& [# E+ a6 z2 p4 H  }
  6. <body>
    $ U: {* v& V- Y& i) i4 A
  7. <img id="receiver" style="width:720px;height:480px">
    4 U# I! \2 c+ l

  8. 6 `- K8 ?4 m- Y4 V$ a9 H0 L& O7 }  V
  9. <script type="text/javascript" charset="utf-8">0 [# H8 e- k; Z
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    6 v6 Z5 w4 G7 u& ~; h
  11. var image = document.getElementById('receiver');
    ' Z) K) _# [& Z1 ^( V8 b3 R& X
  12. receiver_socket.onmessage = function(data) {
    9 d% B2 ^+ m6 o
  13.         console.log(data.data);
    7 O: B5 o( ?( q3 _5 h
  14.         image.src = data.data;
    4 p3 O* ?. f) V# i6 K" ?. F# g
  15. }
    ) X2 @- [2 ?0 \, c- M9 f$ a
  16. </script>
    $ \* y: o1 V* L9 C
  17. </body>/ }4 B# ?. Y' n7 T8 N: ]
  18. </html>% Q# h* x' \, t

  19. ) n! X  X6 o5 a' s, m; }
复制代码
* F" p; U+ q( p+ v& b7 c
3 M# A$ H' P- |2 n4 l5 L7 c1 E

5 U3 v. p% C4 O3 L4 H9 f% D
4 V7 [) g7 ?. J0 d, |
& z$ }  e( R& H4 n* X  j# ?2 s/ J9 E7 L: n% |  t+ B# }1 l3 T
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2025-2-5 19:47 , Processed in 0.137825 second(s), 19 queries .

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