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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
  ~5 ?0 ]: Y( X& A+ k: A! c
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);3 L; U; s  Z+ p0 D% h/ Y. Y
  2. $client=array();
    9 R1 `( ^$ F, F  F; U5 Q6 \# i- C7 e1 K
  3. $serv->on("open",function($serv,$req)use($client){
    . O" N6 h: I# D8 M! c* C
  4.         //echo 'connect'.$req->fd;
    5 L) B9 @' U8 ]8 ^9 m8 M* o
  5.         $client[]=$req;
    9 m4 y/ }0 L( W+ o2 n
  6.         //var_dump($client);. J# h. f" G. F/ M. c. V
  7.         $serv->push($req->fd,'aa');
    $ E# f+ r4 ^" Q) I
  8. });
    & E& g9 M: Y3 V

  9. 1 i( ]; j8 h* Z$ }
  10. $serv->on("message",function($serv,$frame)use ($client){" A& ^  j& x! C2 z: I
  11.         /*var_dump($frame->data);
    : g' G5 x  Q8 R+ d0 P9 C4 [
  12.         foreach($client as $key =>$val){
    2 s6 c; l! U! X
  13.                 $serv->push($val->fd,'aa');
    6 d" o3 m$ s4 {" ~
  14.         }*/
    2 I/ J- p3 y" d3 u' r. t
  15.         $client=$serv->connection_list();! \0 f7 Z. g8 K5 M
  16.         var_dump($client);5 u! l  V3 B' f) c
  17.         foreach($client as $key =>$val){! x' x. e( s  p# n& N3 F4 a& n
  18.                 if($val!=$frame->fd){- _* }' P" l3 z" L4 A" k# R
  19.                         $serv->push($val,$frame->data);- M8 s4 N& U( B" S! I; h
  20.                 }/ G2 g8 W! U# `- T
  21.         }4 q2 E, A7 \8 H7 X( ~
  22.         # S2 r# m4 p+ n: K( Q' u. Q# ~- S
  23. });, `1 j& k7 \( a  N
  24. 2 \0 r( c/ H; x5 M. _
  25. $serv->on("close",function($serv,$fd){
    # Y2 S3 g) S* k" k' S* X
  26.         echo 'close';4 ]2 \8 r/ }4 v- e' A* A3 m3 w* `% U
  27. });
    2 P+ \) R) J; N5 G; z: `" S

  28. 1 a; }1 A) D1 u* b1 ]+ @# l
  29. $serv->start();
    1 S; L; W8 f, D( X8 v0 y

  30. * y4 k4 k+ ]  ~0 L( T' U2 u
复制代码
主播客户端, S( d# y" x. z; W; I
  1. <!doctype html>
    5 ^  V, D5 @7 y7 D$ T5 n
  2. <html>+ k: v; w& g0 [7 t' r5 Z) y
  3. <head>$ P8 [- d" y* Z
  4. <meta charset="utf-8">
    + o9 J" ^4 W$ M) o6 k6 c- ^
  5. $ N# u4 Y7 ~2 T  n  x* ]7 E
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    # ~) I+ ]! G( k- \7 U7 z
  7. <title>404</title>
    3 N  _9 \3 v6 s/ d- ]! R
  8. <style>6 m) o0 h& K) G% e. Z+ Y$ V
  9.         body{
    $ U& V  s+ |0 [- \4 v+ E3 M: u5 X) Z# {
  10.                 background-color:#444;
    / @4 c2 z% C( b7 T$ j7 _
  11.                 font-size:14px;
    . D" [* L$ e) l* @, b" j% f  x
  12.         }+ R6 P! c1 g6 w0 e
  13.         h3{1 Z& ^+ Q% p$ K! y' K! x1 l7 e3 W& E( R
  14.                 font-size:60px;9 z/ m  W, h) q1 R% p
  15.                 color:#eee;
    2 v1 S0 p) w; j5 }
  16.                 text-align:center;: r7 E7 |0 U7 L/ B
  17.                 padding-top:30px;: A% q8 m$ m. {# k
  18.                 font-weight:normal;: m' n& P& k! k' B/ s8 Y: `
  19.         }# X, x; t, {9 f! K
  20. </style>
    / K$ x- d( i7 A+ B* V
  21. </head>
    , f% C1 ^8 F$ B$ [) I

  22. 3 r$ I- g* r/ @
  23. <body>
      g% x# ~4 C! C+ t6 t5 i
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    & V0 I+ g3 e( R+ H& o
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>& c3 f& @8 ^0 o; I; H3 J
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    3 o1 I1 O2 a$ E- ^: g+ I2 {
  27. <script>
    3 y/ n% w" z# M! B' N
  28. var video=document.getElementById('video');
    ; A6 u8 y( |5 p! T8 A/ u
  29. var canvas=document.getElementById('canvas');
    - b* U1 q0 o+ }7 \$ ]
  30. var canvas2=document.getElementById('canvas2');! ?6 t9 O, T/ ]5 y! Q# g
  31. var context=canvas.getContext('2d');
    * f' r) Y" `4 I
  32. var context2=canvas2.getContext('2d');
    3 ]+ ?/ F* }' l% W
  33. function draw(){4 i* w* ]( [2 ]+ |
  34.         context.drawImage(video,0,0,400,400);2 j3 _0 T9 ~! Q
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    ' Z7 O. e* l4 z2 |
  36.         setTimeout(draw,800);. n& s3 F# r8 z8 Z, ~4 D$ H$ E
  37. }8 j7 v. A% d8 J  u

  38. 6 ^  `9 }' ?, p0 \
  39. //客户端跟服务端通讯
    6 ]: S0 }0 g8 S9 u
  40. if (window.MozWebSocket)
    5 O& c9 E+ K# P
  41. {
    6 [! x# n2 E' p
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");: ~0 V! r1 Z0 t- T2 n* E
  43. } else' s# K; M9 v' i% K( S
  44. {
    * o; P) G! x0 k7 P+ K- M
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    0 N# L5 C* t3 D  ~) I+ L5 H
  46. }/ p; I8 `2 H7 L" X6 a  P% b

  47.   d% @% c* s9 e: W/ Y( v
  48. ws.onopen=function(event){4 x6 n0 ~" @7 t0 K" x& M# J% U' \, [
  49.         alert('连接成功');
    ! i( L5 L( y( b6 t1 h" y
  50.         ws.binaryType = 'arraybuffer';
    $ I+ f; H3 u4 M
  51.         draw();( `: k* m" h6 [$ v8 g& o: T: I
  52. }
    ; M) I% {' w( {  s( X& {
  53. ws.onmessage=function(event){6 ~. X. B2 F+ }
  54.         //alert(event.data);
    ( `8 D( G$ i4 R3 w" n$ z7 I; h
  55.         //ws.send(event.data+"client");1 F4 u; p; c0 Z
  56.         qrCodeImg = new Image();
      t1 |) C* w/ {! \
  57.         qrCodeImg.src = event.data;
    . R/ W# s+ @3 @* g3 N& Y  {" S, S
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);' N/ a; z" \4 ], R. G) y; ^0 }
  59.         
      g0 S/ P0 H9 }# T) e- l
  60. }
    - T: Y- @; i3 h7 f+ `
  61. ws.onclose=function(event){" c; g. a, x! h3 ]+ |5 S
  62.         alert('close');
    ( C8 a2 I+ A/ e* k! i0 S
  63. }
    1 q+ O# x+ h1 e4 d) \7 I* W+ j2 ^2 l
  64. ws.onerror=function(event){& _5 t5 X5 O+ F
  65.         alert('error');
    % ^/ P4 c$ a; r& T: u
  66. }; [  P/ Y" m2 L3 Q$ F8 f
  67. //video,标签模拟视频" F: A' Q# e8 [9 d" n$ B
  68. " l  x& k7 S7 u$ l
  69. </script>
    1 s  e% V1 H/ ^' Q& \& \# I) y" E
  70. </body>
    5 X" h/ s# d- x* N1 v
  71. </html>& Z0 i1 h- O! _& b3 y

  72. 0 Z# z  C8 j- G1 A& @0 U2 e
复制代码
客户端:
0 s" q5 A' `/ n: z5 z
  1. <html>
    - Z& f3 d1 c% O
  2. <head>6 l% y5 r. v) V6 E1 f! n; m
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    . r# j( ^# v" s( G. T# C( S% D
  4. <title>客户端直播页面</title>" b# ]$ F& I5 t3 n6 e$ \) F
  5. </head>3 b" g; f' u3 C" W3 F* q
  6. <body>
    1 I8 d, g6 t4 j5 c9 g1 V
  7. <img id="receiver" style="width:720px;height:480px">
    " e/ a- ]+ ]; j' E+ s5 t. l

  8. # O& I6 I% R* _1 `( Y
  9. <script type="text/javascript" charset="utf-8">( w& h+ k2 t" W7 y/ t" x
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    - U. r7 g: O5 O* B7 K$ z( [7 K
  11. var image = document.getElementById('receiver');' T: E3 G' R" u* H5 l: ]
  12. receiver_socket.onmessage = function(data) {
    ' o" b) k5 \) }! G7 m7 w# u
  13.         console.log(data.data);
    1 c% w5 l! X& n* C2 i
  14.         image.src = data.data;$ X" k  l1 p/ V* ^  y# r
  15. }+ z7 x5 t8 m  S7 I; w; m* w% C
  16. </script>9 V* h/ v# ~% p6 N# G( j  O
  17. </body>9 j, k0 l3 D2 l& Y3 ?
  18. </html>
    # ^1 N$ a, p  D5 J, n+ K9 m0 P
  19. ' w$ I$ G" S! U: e
复制代码
  q; g5 _9 C5 R* \- X; Z0 F' p, y9 N

+ J$ e9 M* ^' K- g+ u+ y
: B) e$ A( t: z( O/ v1 {. V( U2 E7 l' P; F5 r) n7 o7 \3 k
) Y! |7 ]: r, F
# i1 c5 O6 _; b' R: V* S% ?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 14:39 , Processed in 0.057625 second(s), 19 queries .

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