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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
8 u  {$ s' b: W+ J; L/ p
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    % M9 I& g/ i1 X- e% X$ t
  2. $client=array();
    $ \; E7 D& g' i/ z8 X$ X& b
  3. $serv->on("open",function($serv,$req)use($client){
    / D/ x- |- d9 z1 z: Z5 [
  4.         //echo 'connect'.$req->fd;
    / L2 l+ r$ V* \3 c
  5.         $client[]=$req;+ ]+ J5 U; ?, T2 g
  6.         //var_dump($client);
    1 T% m/ M) F2 q; c
  7.         $serv->push($req->fd,'aa');1 C# m5 W8 }, n* h7 Y- b
  8. });, ~- ^# J% `5 e8 e% H0 x

  9. $ |' r: s* I7 ~# |1 S( l
  10. $serv->on("message",function($serv,$frame)use ($client){
    7 j( z. R6 `# Q0 V" ~
  11.         /*var_dump($frame->data);
    : K* X& s) ?6 d: I- x/ z! \- O
  12.         foreach($client as $key =>$val){  e: b+ E( W& d7 \
  13.                 $serv->push($val->fd,'aa');
    % P" z4 ]. E8 E3 R+ b
  14.         }*/
    - A% p/ a% `3 h4 \$ B
  15.         $client=$serv->connection_list();  X( P' y7 k) i4 h& e; l* s: @
  16.         var_dump($client);) c: f/ S9 y1 ]5 _# P
  17.         foreach($client as $key =>$val){
    $ j+ h  r2 T4 U3 o1 R& {* \
  18.                 if($val!=$frame->fd){- ^8 f! X# d" e) m& g4 O7 h+ ]7 w9 a
  19.                         $serv->push($val,$frame->data);
    ; a1 R3 D/ a5 I
  20.                 }
    7 @0 c" k3 b/ v- f
  21.         }
    7 N! H. I6 u$ O6 }3 T4 J# c( h9 _$ d# @
  22.         : T6 S+ f/ I/ m3 H- ]5 L& N; E% V
  23. });0 A' r* Q- y/ H+ Z$ p+ Q
  24. 6 r  Y3 B9 Z0 R: j
  25. $serv->on("close",function($serv,$fd){
    ! A* y! Q  F0 l! {% o+ C
  26.         echo 'close';* F: x& t  C( j+ H' K
  27. });" S+ S1 ~) g( O
  28. 9 r2 E, R, a2 V$ Q. p
  29. $serv->start();
    / Q+ c; ?3 Q% v* p5 d
  30. * Z6 H% s' {; @: }8 o1 M  _
复制代码
主播客户端
" A. ^/ {2 d4 B4 O1 R- N5 s5 S
  1. <!doctype html>; n6 n0 C- k* r: p* _! r) c6 g
  2. <html>
    $ _2 n! f. U( k0 X& n. H
  3. <head>" m6 z7 f7 _! B6 w( M* ?, n
  4. <meta charset="utf-8">
    6 o" M5 I$ U) @
  5. ( Q: ]9 V# Y4 \$ d1 C- W
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">4 t$ J. T5 ~5 J, l1 e
  7. <title>404</title>
    ! X7 b3 H8 J( m9 z$ `
  8. <style>
    8 w* `  H% p, r
  9.         body{
    + o3 d3 z0 N0 A- ]; |1 h; L
  10.                 background-color:#444;
    & l4 u% L6 i# X
  11.                 font-size:14px;! q5 _# C/ X  h- E; ?- d0 y" B
  12.         }+ y8 N- l3 J% L$ _
  13.         h3{
    " c6 _2 z/ K! E% [# T0 W
  14.                 font-size:60px;+ g; `  w3 y/ p1 M& l- i% G1 D+ I* ~
  15.                 color:#eee;
    5 `% h* Z! E9 Z
  16.                 text-align:center;
    ) `% W8 q; Z" Q
  17.                 padding-top:30px;
    ( y/ e) C6 ?; L( D0 P+ F
  18.                 font-weight:normal;* T! o  \. i2 d/ z& v
  19.         }
    0 S4 O9 ^2 m9 r5 Q; b- K
  20. </style>
    % C( b9 K+ C4 E0 ]$ M+ ~1 d; X
  21. </head>5 T; i7 C4 K) Q" n5 ]% L* S( E

  22. 3 h/ V  U$ N8 s$ v( Y( D# c$ v) F
  23. <body>! N5 M8 _, T( g
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>6 q0 K3 z8 x# j) r4 s" F9 o
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    - I/ }; P: k5 x! G4 b, R
  26. <canvas width="400" id="canvas2" height="400" ></canvas>" Z4 |# E1 H8 \  Q# [" W" b
  27. <script>- \: v# U, |( a& z. w2 G: y
  28. var video=document.getElementById('video');' M( C" \! S4 h9 E$ _5 c' U
  29. var canvas=document.getElementById('canvas');
    # a4 U" }$ @6 L! E! H3 _$ l; X& j
  30. var canvas2=document.getElementById('canvas2');
    9 \$ G( d, \* S5 |
  31. var context=canvas.getContext('2d');$ s* k* D! Z9 ?
  32. var context2=canvas2.getContext('2d');
    : w+ E7 |7 S# u: K' S
  33. function draw(){* [) H2 r, t! Y6 K6 T- E- R/ e1 Q
  34.         context.drawImage(video,0,0,400,400);
    ( f$ ]7 C4 m. q6 i7 }
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));1 p( v. B. M. F9 S# f/ J5 l9 k5 m
  36.         setTimeout(draw,800);
    - ]7 U& ?4 e/ q' m5 f  W- Z
  37. }
    ) B9 S1 f: T, T$ v

  38. ' b  O4 p  A7 F' v( T2 E
  39. //客户端跟服务端通讯
    - T9 S0 ^3 Y8 }$ T6 D# A' A
  40. if (window.MozWebSocket). q  A: {& [" v! k) Y. D
  41. {6 {" r5 Y  ?( T- x: A
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    , c$ T* O0 Y/ f' E: l
  43. } else7 W; C7 m0 w( J- D# b! O8 g
  44. {
    $ o. R4 n4 P8 X! z
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    0 {$ p& X4 Q8 l9 _
  46. }
    & M# K6 K  j" B+ g! c/ w" E6 n
  47. 7 s! Z. X5 [0 D2 x+ @4 P
  48. ws.onopen=function(event){
    4 U* X0 N8 n) U. T
  49.         alert('连接成功');
    " T# I, n4 g/ D4 R1 y' z, }# P" L
  50.         ws.binaryType = 'arraybuffer';  ?5 w* ]3 l3 [1 v  Q" M
  51.         draw();0 n; @3 C  C, e  o1 Y: ^) R
  52. }7 d" `3 V9 n9 r2 l5 j
  53. ws.onmessage=function(event){, H0 s7 k: `1 r# Z9 t. M* t
  54.         //alert(event.data);
    . H2 _, I! W& U* ^6 C
  55.         //ws.send(event.data+"client");
    * U) G( ~# Q, U9 R0 v0 c
  56.         qrCodeImg = new Image();3 E# z3 `; P! g% R! L8 |  q1 C3 T
  57.         qrCodeImg.src = event.data;
    ' n5 T* F7 z/ M7 b8 ]* [
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);  N  u' g- [, X, l3 ~5 @( b6 y) j
  59.         ! G7 J$ U; U4 O& z, C0 x( ^# p
  60. }0 j" p0 O, D+ S& @6 ~
  61. ws.onclose=function(event){$ r, q) V: e& @3 `. Q4 Q* L& b
  62.         alert('close');0 Y( w: j' l  c* j4 }! k$ C
  63. }
    9 o4 d6 m3 a' P8 O; Y6 o
  64. ws.onerror=function(event){
    , Z0 s( n, I; ]: d5 e1 s) V
  65.         alert('error');
      v, ^) q1 \/ u
  66. }
    & Q* i+ \/ z& V: O# t
  67. //video,标签模拟视频
    , [  E6 T( Z: _5 e
  68. 2 }$ C9 w3 H& @. I- m$ e
  69. </script>
    4 s: w6 p+ W& r
  70. </body>
    1 v. |( g1 O$ M0 ^5 C. [7 B: y
  71. </html>
    & t5 T" Q9 A; {5 j
  72. $ C6 C  @% s) o8 @% L. V( t  f
复制代码
客户端:: ?; g6 e+ E6 \! B
  1. <html>+ I) E# a0 \( Y( V* v
  2. <head>
    , w- U9 x5 ~2 R; X, o0 R& j
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">& F+ f8 [8 r( I" `) q( s
  4. <title>客户端直播页面</title>; Y8 U! I3 b% R
  5. </head># R3 K  G- J3 `  Y# D% l9 d- j
  6. <body>
    2 R6 l  s6 ?/ f# S5 }
  7. <img id="receiver" style="width:720px;height:480px">
    5 u0 ]9 T; v! V; Y* \

  8. , X; f% w8 l3 r8 }% O7 J
  9. <script type="text/javascript" charset="utf-8">+ |! ~; ~9 P$ J. Q% Y
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");3 w, s; E/ X9 [( f, l
  11. var image = document.getElementById('receiver');( u; W# j0 m- T5 p; H" g0 ?* n, ?
  12. receiver_socket.onmessage = function(data) {  u, A: B. e% l1 M$ H9 P
  13.         console.log(data.data);& i0 E" e+ R. ]& f# j: N- a7 j
  14.         image.src = data.data;
    " n2 t# z4 A2 e9 _$ W# h4 k( x
  15. }" }8 K. Z5 I( r; c) d* L' P  T/ n
  16. </script>, C( G6 Q: h- T, o
  17. </body>
    % ~% F3 e7 G; Z) U" D1 p6 l3 o
  18. </html>! [" s# z- ]! g
  19. 7 P% M1 }1 j. N8 X% `
复制代码
& L+ [, n8 a) Y
! m! d" E+ ^6 ^9 H% F  I$ E% O

. Y6 A& c; t6 x- Q* j
: x! p# @. z! {+ M+ S0 L! f+ u/ v) a( [# J2 ?
5 h3 y( k" I" n6 b9 }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 07:09 , Processed in 0.061860 second(s), 19 queries .

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