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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码# I9 _# S- e' Y) M4 S. q1 D
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);6 T+ l4 N4 g6 D/ I! U: j; D
  2. $client=array();
    & B7 X8 H8 ~* m1 S
  3. $serv->on("open",function($serv,$req)use($client){! y+ Q& T6 e: Z5 l# N' @0 I8 W3 s
  4.         //echo 'connect'.$req->fd;
    * _9 n7 q7 t& |7 A! G
  5.         $client[]=$req;3 ?7 k+ x% Y& l: ~8 @: N0 O
  6.         //var_dump($client);! n, M9 f2 r/ k( i; u5 J
  7.         $serv->push($req->fd,'aa');$ i5 t  k/ S: Z" s9 l1 S
  8. });! J' z4 f' [1 u2 M5 R

  9. 5 U& r/ E' G- b$ ?4 \
  10. $serv->on("message",function($serv,$frame)use ($client){3 }+ G5 m8 V, ^
  11.         /*var_dump($frame->data);
    9 H3 e6 {* m& Q1 `* N/ T
  12.         foreach($client as $key =>$val){
    6 M0 t0 A+ r) F  w2 P+ W+ p- M
  13.                 $serv->push($val->fd,'aa');, P( d1 e3 m9 b+ Y3 B6 b7 x
  14.         }*/
    9 f  y+ P1 t4 x/ b
  15.         $client=$serv->connection_list();
    . H" D8 t, S. D$ g# B, ?8 Z/ C
  16.         var_dump($client);
    1 f: O, c; C4 z; W
  17.         foreach($client as $key =>$val){4 @0 x3 G2 w" z2 Q5 d8 @
  18.                 if($val!=$frame->fd){1 V! @( ~( p5 }2 o# z& T
  19.                         $serv->push($val,$frame->data);- S# G. ^. N8 [7 J. B# y$ t
  20.                 }
    2 Q: W- v2 h4 ~
  21.         }+ C. h1 `) A! ?& V1 @* A
  22.         
    8 W4 R2 s6 q8 l3 m" A- V4 K
  23. });& x! ^* u# g5 y; ^6 [  b% A

  24. 2 J% A: V7 j" E8 G* i# q+ R9 z
  25. $serv->on("close",function($serv,$fd){
    ' T/ r$ }. T6 d* }
  26.         echo 'close';3 c3 P( {' u4 ~& M* F
  27. });+ B0 U+ u7 s, Z

  28. ( \1 ?) ^, `- E/ N& o( [
  29. $serv->start();
    ) w! l$ ^& d. f/ b, u8 t: M

  30. # q3 |" S* @, q% t& L" N0 y
复制代码
主播客户端
2 b0 [1 y$ e* c( D
  1. <!doctype html>
    & T% L# Z' f; t( b+ W
  2. <html>+ W/ m1 S" D4 b
  3. <head>
    $ F3 m) H+ B5 \3 E" l5 B" j
  4. <meta charset="utf-8">
    ! ^; L6 Y: f& j( B- Y$ Z9 Q# Q

  5. 0 P( ~" u8 X' ~' H/ @7 a# J
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    ! L8 t0 H. f1 c# {1 j- |' p
  7. <title>404</title>
    % o8 j$ H7 ]. T& |6 V% ?2 Y
  8. <style>
    - h3 ?" c7 g6 G" p
  9.         body{
    $ ]; p( g, T0 h
  10.                 background-color:#444;
    3 o, C6 T$ b2 Q! ^) u* j% O' _
  11.                 font-size:14px;9 U: |8 Z1 O+ m  Y3 Y: h# t
  12.         }
    & A3 I1 f9 O1 R: e1 ~( |* @. D
  13.         h3{3 u* E; K( `7 v2 t4 P; J5 N9 D
  14.                 font-size:60px;
    $ Y+ {, S7 O2 u( C) [% h) O* w
  15.                 color:#eee;' S8 ~2 k+ K& T- M# o( k3 f2 x7 `4 F" m
  16.                 text-align:center;8 `$ i( p6 z2 p5 s) N% Z% H
  17.                 padding-top:30px;, J+ S$ n) ^6 }) V  ~" F7 {2 @
  18.                 font-weight:normal;9 |( y6 q7 l; b
  19.         }, g7 i. _7 n1 q! m0 r: T, Q* \
  20. </style>& h0 E6 R0 s, H/ R* \" X2 q
  21. </head>
    1 N$ h) _" P$ I7 R1 _( C1 L

  22. $ g( J) h' E$ E  H
  23. <body>
    ) G) P/ ?- y* q
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    : d* }7 l- I$ c) K5 R2 g
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>, D1 m$ y" |) ?% O' t$ E  l9 Q4 A
  26. <canvas width="400" id="canvas2" height="400" ></canvas>9 B8 C0 p( n3 E
  27. <script># T. j7 J% w6 ~9 h
  28. var video=document.getElementById('video');# _: q7 Q" k- p4 [; Q
  29. var canvas=document.getElementById('canvas');
    0 h9 n9 n. E) q0 X+ `2 W+ m  t3 F
  30. var canvas2=document.getElementById('canvas2');
    / |: C4 X3 @% l  s4 m; a5 w- ]
  31. var context=canvas.getContext('2d');; |$ o* |/ F0 w
  32. var context2=canvas2.getContext('2d');$ @* g0 |: H  y1 m- w
  33. function draw(){
    ( N. g7 S6 m' w. S9 O0 e
  34.         context.drawImage(video,0,0,400,400);' j0 k0 w& N  K; H( x( |
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));5 A' a9 L! @0 _
  36.         setTimeout(draw,800);
    2 U' a" G& H- q) Q- J. |0 Q. h; S5 U
  37. }
    * H* |) R. e6 [9 O
  38. 2 V# t+ E# Q0 V/ r; ?9 [
  39. //客户端跟服务端通讯
    ) V$ D) w% {4 s5 }
  40. if (window.MozWebSocket)
    8 z3 M; I0 l7 g1 `- |
  41. {
    $ q4 Z2 E. A! a4 Y
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");  V6 a5 @; ~" L7 K4 S- D
  43. } else
    ( g  }8 ?& z% G
  44. {
    ! ~+ v( E0 Y* }! m5 ~1 q+ Z9 L
  45.         ws = new WebSocket("ws://182.61.42.187:9501");- h% \5 @% S5 A7 L# C6 E& z; \
  46. }) ]3 S+ D* J- m- L* z# H

  47. 3 y1 \" O" Y+ z& R, P5 ~$ F
  48. ws.onopen=function(event){* y; C0 q# y% ~/ k
  49.         alert('连接成功');' e8 D1 {# ?. e! I$ ^+ f
  50.         ws.binaryType = 'arraybuffer';
    9 R) H! \4 m3 R+ I
  51.         draw();
    * c% _5 V/ U  Q+ E8 w1 h
  52. }& ]" c; [) t/ \- ^6 {6 n( g" z" r
  53. ws.onmessage=function(event){/ u2 B1 }$ Q2 G' A' _
  54.         //alert(event.data);. k6 p/ }4 Y  y- q# e
  55.         //ws.send(event.data+"client");
    0 Q5 O* M1 {, g: y. {+ i
  56.         qrCodeImg = new Image();- U; c3 ?% x" }8 [- B$ F
  57.         qrCodeImg.src = event.data;6 i  n; o$ H* O; e
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    ' O" e, ^$ g  Y' N) C# Y
  59.         + t+ |" t; _$ D2 v8 j3 X# `: S
  60. }
    % `; ^* j- s5 o
  61. ws.onclose=function(event){
    8 T; J! q6 Z3 Y$ n; S, h( ^
  62.         alert('close');
    + F! w3 R7 D/ `+ D- u+ p
  63. }
    * K- l( D, \5 K9 |0 ^% j/ K1 @
  64. ws.onerror=function(event){$ p! g) }, e7 l* p
  65.         alert('error');
    ' F  j. A0 L% Q
  66. }
    : y* v" i; h! p/ f% T& X
  67. //video,标签模拟视频
    ; G1 D. U8 L$ D, i2 s* ^

  68. 3 o% m. E; ~. k3 P& N. v
  69. </script>3 _5 O# g  w/ K3 M, ?. h- j: w
  70. </body>5 O* o/ @9 H1 v5 C5 R0 W
  71. </html>- ~' _+ Z1 j3 f

  72.   A9 K( l1 |. s3 \7 U
复制代码
客户端:
& O3 r% B/ F3 E" \$ X+ Q+ D6 f
  1. <html>5 @2 b2 O4 n: |" r
  2. <head>
    % \( x9 L7 E1 V& b! q" S+ S3 W3 h
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
      I+ s0 ^: p+ D% R
  4. <title>客户端直播页面</title>
    " N) o* ~6 S/ Z2 d; M! s4 G  a! k
  5. </head>' \8 s7 v2 y3 A# Z! n. q; F! y
  6. <body>
    $ W7 T+ T4 J+ E5 D2 D$ P1 g( ?2 W
  7. <img id="receiver" style="width:720px;height:480px">
    ; b. H& W& G* r2 X7 h) C
  8. " f: Y3 r1 M5 z' _9 l* X' n7 m
  9. <script type="text/javascript" charset="utf-8">
    0 i2 q+ U0 R; m& g
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    8 P* a0 X( e/ r* c; E6 p  H
  11. var image = document.getElementById('receiver');
    . K: E4 u( v4 P5 V3 q
  12. receiver_socket.onmessage = function(data) {7 ?4 M( c- w3 p  l
  13.         console.log(data.data);
    ) Z1 x$ t% y+ ~& x7 Q0 N* `
  14.         image.src = data.data;
    , g7 T# a& j1 c, @
  15. }9 \# |% u: \, V$ ?9 h* @# J) K
  16. </script>
    . @  D8 I# |1 q2 m
  17. </body>
    6 j, _/ R) ~, Y
  18. </html>
    ) Z$ e/ U* o5 O: B
  19. 8 j3 j! h" C' I
复制代码
# b. e) `# ~* e. V  ^5 w
, m# q* c$ |# f  C' [) m, A
# @8 }  S8 W3 Z$ d/ q

, n! T- T. O- H* W) X! F9 C# R+ h) ~' X" c$ B8 n3 N  H/ T

" E7 B! Z. J5 m; g: P) v+ e$ F" {0 ?6 J
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-5-2 14:31 , Processed in 0.054841 second(s), 19 queries .

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