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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
. N/ l1 i2 @5 A  V# o8 ]* E9 d
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    7 I) i: [- q3 y' W1 s1 [5 s1 _
  2. $client=array();
    # H  I4 m5 D7 o" j
  3. $serv->on("open",function($serv,$req)use($client){
    # ~* y9 O/ ^! Z3 v8 t$ X  @! a  N
  4.         //echo 'connect'.$req->fd;
    ! T3 L+ p2 J. Z, g* i
  5.         $client[]=$req;
    5 o  H( K7 N0 f$ a$ H8 A
  6.         //var_dump($client);
    8 m# y' A. l: r0 h! W
  7.         $serv->push($req->fd,'aa');
    2 L+ C  u, }+ m" L0 \! e
  8. });
    4 K- H% q8 r- A0 @6 A/ s5 u
  9. ; e0 S# t% L' c
  10. $serv->on("message",function($serv,$frame)use ($client){
    6 h1 T$ {& a. D/ U
  11.         /*var_dump($frame->data);
    , M. Z- |3 K; d! S- V) N$ i& _: x
  12.         foreach($client as $key =>$val){
    8 n* f: H- y: o9 _: R
  13.                 $serv->push($val->fd,'aa');
    * z) \" V' X  ^6 y
  14.         }*/2 t7 W- }" h7 X& v
  15.         $client=$serv->connection_list();
    . U/ @% ~5 {9 y' r
  16.         var_dump($client);2 u+ i7 t- ~# Q* w/ z  t) |
  17.         foreach($client as $key =>$val){& N3 F, S+ g# d' ?9 h' P
  18.                 if($val!=$frame->fd){
    2 i% @7 L3 R8 o4 r
  19.                         $serv->push($val,$frame->data);
    ' n8 s1 P4 P: [0 N) R
  20.                 }+ n* k  g0 |$ t8 h* K/ m$ L# P, T
  21.         }. {2 C& P6 [# u
  22.         
    8 `* M+ B; U" |" \
  23. });
    8 a* ~' {0 D% v3 S% M

  24. 6 \) r0 _3 Z( C4 m
  25. $serv->on("close",function($serv,$fd){
    ! O: ~- e/ W* M! W
  26.         echo 'close';/ o. V' G' d2 `; m  R' |
  27. });
    . i5 O  j( Z: j6 X

  28. # E8 }7 @) h$ |! Q) T
  29. $serv->start();1 `- e& ?; g( u: I% h

  30. 8 }/ A; S3 b$ Y8 w+ h  q
复制代码
主播客户端8 [0 y$ P0 z: d2 K
  1. <!doctype html>
    $ z8 D$ n0 p7 l+ E3 l  q* Q3 r
  2. <html>6 b* K% L% y3 g" F  {1 F7 l+ N
  3. <head>
    : i, b5 i& y: Q' e! F
  4. <meta charset="utf-8">/ N9 _! k# K0 Y; l

  5. " I- J9 c2 l+ w# u+ h2 R+ F9 K
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">& N4 w/ T4 j% j# ?; `
  7. <title>404</title>: S3 O% r- L8 ~+ O# M5 U4 J: b3 X3 y
  8. <style>4 {9 I8 f1 S. D' l3 X& L# B) v5 d
  9.         body{- ^# l1 u, X: f  G  h6 Q4 z1 p8 R3 P
  10.                 background-color:#444;  e. I  a  y) T) o6 u& I" b
  11.                 font-size:14px;
    : ]1 G1 o6 Z8 ^: f' q
  12.         }; D/ W/ w- C: u! U+ f
  13.         h3{
    ' n, x3 w: J$ U) s, A' j  K$ P, q
  14.                 font-size:60px;
    0 x4 O: b% W/ w# C- I
  15.                 color:#eee;2 `+ w3 |6 a# a) ?
  16.                 text-align:center;4 U4 {) J, a# M0 F! e3 k$ Q
  17.                 padding-top:30px;
    " h5 ]8 j- ^7 B0 n" S
  18.                 font-weight:normal;
    ; w. J+ O, C9 z/ h+ l
  19.         }5 k# D% W) }# d) c; E
  20. </style>  f2 D, i( s1 f. A! q* r( c5 [
  21. </head>
    9 R9 _" d7 r7 F3 X" e" n

  22. ( R1 |4 z( Q' }
  23. <body>
    / d: Y+ s6 M  @7 ?5 W
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>  t& G& u( g" b- o' }" Y) ~2 E( ^4 X
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>/ H, [- z& k- B$ {- p
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    8 {: d% \/ u" m" X! a
  27. <script>" P- a9 T* i" v: }
  28. var video=document.getElementById('video');. z' n' b, f9 j
  29. var canvas=document.getElementById('canvas');
    0 h& V4 `  ]& ]* x5 v$ L
  30. var canvas2=document.getElementById('canvas2');+ a* A  W- l% p; p3 U) Q
  31. var context=canvas.getContext('2d');
    " B" r9 }8 p! h' w" `+ ~
  32. var context2=canvas2.getContext('2d');+ f! {3 o: I1 }) F2 G- i
  33. function draw(){
    # l* }- [8 k1 E5 F
  34.         context.drawImage(video,0,0,400,400);5 L' A3 }2 B+ z; @+ \
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    5 a' v2 R. T  V/ a$ d0 D
  36.         setTimeout(draw,800);
    ' u* X) k0 ^; Z" v
  37. }
    ! |6 m+ K2 _3 @

  38. + r% _4 V7 ^/ X( j& ^% G/ h  h
  39. //客户端跟服务端通讯
    9 g; m' T$ O# k+ _6 ?
  40. if (window.MozWebSocket)
    ( @& S8 ?7 t7 v0 m, E
  41. {( I% N( r( j+ S
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    , z" r; @8 N" Y
  43. } else4 p2 R2 I( h% a" I* i
  44. {
    8 G. \& s5 l0 Z! y" q
  45.         ws = new WebSocket("ws://182.61.42.187:9501");4 l6 r- J: ~+ K  w* H0 y- U9 U0 ]5 R
  46. }
    & \1 C3 H5 e/ y& k# t
  47. , X: w# C1 Q& d7 A7 G& m) Q
  48. ws.onopen=function(event){8 w7 m, y3 v5 G1 g; t8 m+ y
  49.         alert('连接成功');
    * L; W4 r/ r; U
  50.         ws.binaryType = 'arraybuffer';
    $ `5 T# |1 n" D' D/ l% i0 f, q# [
  51.         draw();
    ( v5 r& b$ y! R8 ]4 X) A  t! Q: U) Q  M
  52. }
    . a3 f: F9 `$ G' w1 d5 o
  53. ws.onmessage=function(event){: T& w8 Q5 ?( Q
  54.         //alert(event.data);
    * K. H+ P! f- p% H
  55.         //ws.send(event.data+"client");
    / A6 p7 A. o0 V2 C% X' D: m
  56.         qrCodeImg = new Image();. g9 L  o4 n" g+ P; _
  57.         qrCodeImg.src = event.data;3 Z/ @1 B8 G3 K' a; c
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);8 R; p4 C1 s7 _5 `  j6 T1 U0 u
  59.         / C/ K* H' f# K$ x
  60. }
    - l5 ?* t$ `* e9 G0 H9 n+ z
  61. ws.onclose=function(event){" w5 k0 S* t) Z* v% j& ?* t
  62.         alert('close');
    9 ^/ V" s. Z  ]7 i& s. l5 ^) d
  63. }
    4 M6 Q+ X9 I) c/ H7 P0 p
  64. ws.onerror=function(event){+ H5 Q% s3 s: I6 L& U9 N
  65.         alert('error');
    ( J% A/ x3 m) W& c" r
  66. }
    . ^2 z* e7 M+ Q8 ?% x
  67. //video,标签模拟视频
    ( b  o9 ?+ ^* e4 G

  68. - C* z: b2 m! n
  69. </script>9 x$ L% \2 F6 a0 ?( r
  70. </body>+ \$ q2 a; M& p* L) I' T4 t( D
  71. </html>
    3 }) m$ k4 u& k5 u! R' r) H; Y
  72. ) [3 k# X0 a! J9 q
复制代码
客户端:
$ K, D! L& z1 \$ Y( Q
  1. <html>
    1 ~# Q+ w5 @% b- I
  2. <head>
    8 Q% ]: j- J! g* m
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    * @( p0 q3 `( e# L% _2 s6 F
  4. <title>客户端直播页面</title>
      j& w* \3 X. R8 Q
  5. </head>
    - c/ W0 \" y& q( @0 A
  6. <body>  d, L9 o6 g' q% p( B- }
  7. <img id="receiver" style="width:720px;height:480px">+ {: T( i8 C# b! M. p* F2 i, E" M
  8. / _1 R* c5 r7 g; X) a
  9. <script type="text/javascript" charset="utf-8">
    . I* c) C5 K' K+ l8 t
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");  C9 s9 K# q" U* T7 v) g1 V( a9 ~
  11. var image = document.getElementById('receiver');3 ]+ j5 @5 b0 u% K
  12. receiver_socket.onmessage = function(data) {1 m3 b5 J8 w* P3 N6 X
  13.         console.log(data.data);9 W+ s+ [; f6 o  i) h2 ~5 B* q
  14.         image.src = data.data;! b: O& M3 {. j* m# F
  15. }( ~& Y0 }4 y1 b0 m* }0 n9 C+ X- L
  16. </script>
    * C% m/ F, a8 P" k" v
  17. </body>
    # Q6 ?: o! O% V
  18. </html>
    7 w$ t. i* b# l  b; L* H8 G. c
  19. / g/ i8 M3 v7 y/ }. [3 a6 p
复制代码
) z6 ^: S# C( o( l$ I+ a4 x3 ]
( ^) N$ ]# [0 p

- C/ U5 P2 d  L9 w4 l  B* y1 B5 i; g% g9 l/ A* o
. W5 n3 q( a# B# ?5 d, U7 e$ I
2 Z- x# s; f% t
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-9-21 00:14 , Processed in 0.056247 second(s), 19 queries .

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