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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码: v, z! s9 k/ E6 j/ n: m
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);: P0 U% L* T9 J% O1 @; u8 Y/ h
  2. $client=array();& t2 l$ C% a9 K
  3. $serv->on("open",function($serv,$req)use($client){; D6 K1 N; t# l5 |& ^4 B/ h& z
  4.         //echo 'connect'.$req->fd;
    ( n5 g! H( j! q8 t% f& ?' ^
  5.         $client[]=$req;
    0 k2 Q& B0 K& P# f! C0 H
  6.         //var_dump($client);/ E/ `1 U# h5 f; e2 Y- c2 O
  7.         $serv->push($req->fd,'aa');- ]3 t* p$ D3 o* b- B
  8. });
    , i) Z8 Y$ }7 a9 a- n
  9. 8 n! C9 p% H7 b. Q: `+ E& u
  10. $serv->on("message",function($serv,$frame)use ($client){& m& E0 p5 }/ ~+ i
  11.         /*var_dump($frame->data);! ?2 ]: O2 C8 ]8 w1 ?4 c  R9 ?
  12.         foreach($client as $key =>$val){/ N* o: C! U6 g
  13.                 $serv->push($val->fd,'aa');7 V: M" `) Y" Y' ]; [
  14.         }*/
    * S/ w: \7 ^1 f: {' K/ ~5 o
  15.         $client=$serv->connection_list();3 n: ]" S+ ?3 l6 ~2 e
  16.         var_dump($client);# C  H) ~) w7 I! G8 p5 r
  17.         foreach($client as $key =>$val){) f0 A4 [6 d7 M2 ~% h2 }; r
  18.                 if($val!=$frame->fd){
    : Y, D1 [5 e- d7 z5 b  c9 z
  19.                         $serv->push($val,$frame->data);
    6 A+ C+ V4 |  g+ c5 L
  20.                 }, F/ o# a, @% U
  21.         }6 l' c! N3 G2 \
  22.         - [" ?# X7 _2 m/ n& l1 F
  23. });) z( o' @" X) C1 t

  24. & V* N/ H9 s3 c7 y
  25. $serv->on("close",function($serv,$fd){
    . a4 R* x. U% X$ i
  26.         echo 'close';
    ; W! J( w5 D2 E! x6 W, s
  27. });4 E+ ~! w- t& N5 @! x$ P$ G7 ~- Z

  28. 7 |1 [, Y2 O+ l1 {
  29. $serv->start();2 c% v6 q2 v! ?2 P. W+ p

  30. 6 d2 l5 M  ~) b; _
复制代码
主播客户端2 y& B: h3 [# z) r3 ~8 N
  1. <!doctype html>7 G: m, I+ @! T5 I8 d* n& m# U
  2. <html># ?4 y6 Q. S$ n" A8 r8 c$ ~
  3. <head>" U0 ]7 G% {6 T. A4 l  e
  4. <meta charset="utf-8">
    ( i) L, f0 N+ x1 h# v0 O
  5. $ J. {4 D7 @8 D4 `- [: ^" o3 M
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    3 H( i+ {* }6 [. ~8 n7 z3 k- `
  7. <title>404</title>  q' S5 d+ v( z0 j
  8. <style>
    / D# T) k, c' j) m
  9.         body{6 P: c9 K, D3 r0 G; E
  10.                 background-color:#444;
    # V3 Q: k3 g! ^, i
  11.                 font-size:14px;
    3 p- O, w  D* R) S
  12.         }( B3 L$ }, J* O. ?: |0 f4 C
  13.         h3{6 X; S0 u' X/ U( s0 q" ?; K! t
  14.                 font-size:60px;
    0 q& F7 O* j2 x% F1 o1 \5 z
  15.                 color:#eee;
    ; U! K' x9 _9 p  Y
  16.                 text-align:center;
    1 c$ L% n& K! Q/ w/ g; Q3 X! r
  17.                 padding-top:30px;
      S: I& W" S0 `9 {' r/ Z
  18.                 font-weight:normal;
    7 P( K. i0 T0 }) t
  19.         }" b6 a/ U0 X/ F, M* M6 m- k& l- v
  20. </style>
    # i/ B7 I2 y  O. S# v
  21. </head>
    & p! h) R+ J) k; F3 A5 j9 z

  22. 9 \: m5 g% J: y) y, z' C. @- n
  23. <body>, }3 X0 @; N: P4 i# u8 O, f" ]9 N: _" a# i
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>; R! _+ V* q; A, D! i) o. z
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    ; X4 X2 [6 ?  K. n
  26. <canvas width="400" id="canvas2" height="400" ></canvas>: `: v5 E4 ^) F2 l8 W
  27. <script>
    * ?0 w* g! j' s: d% u: ^% a
  28. var video=document.getElementById('video');  i# ~* b3 l- s5 B
  29. var canvas=document.getElementById('canvas');! Q; ?# x4 D7 y( n* K' o: ^
  30. var canvas2=document.getElementById('canvas2');
    / W5 O- |8 V! i
  31. var context=canvas.getContext('2d');
    * h9 P  o& o7 O" V
  32. var context2=canvas2.getContext('2d');
    , L6 S6 a$ |; p1 }8 h* r* }! P
  33. function draw(){
    # R, Y- X& ^4 B* k  a
  34.         context.drawImage(video,0,0,400,400);0 ^' C0 v% ]# r+ N' m
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));+ i% V6 |1 l; L. m" i1 [8 M
  36.         setTimeout(draw,800);
    " }- u% f+ c0 D
  37. }
    $ O1 f" z2 q+ [; h
  38. , `" n& u3 K' |" h' [: O
  39. //客户端跟服务端通讯
    6 D$ A, ]- L% E, {8 A/ v* Q
  40. if (window.MozWebSocket)8 R- o2 Q- _' E. b8 }
  41. {
    5 z, ~6 F) p* k- B) D3 ~
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    / w3 Y6 c% b1 b, l2 I/ r8 n
  43. } else
    3 K4 S% b0 E0 E- W
  44. {! M) z% Q* S' _$ [3 I, V5 W
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    4 d2 K! [) o+ o. [8 D
  46. }2 {. S9 r9 n  |+ W! z8 z: p

  47. 7 S3 N) E; I, _/ W6 `/ C) J" L7 Q$ a
  48. ws.onopen=function(event){! G) d0 M: N4 D
  49.         alert('连接成功');6 w8 U9 G3 Y. ~: Y5 J* s
  50.         ws.binaryType = 'arraybuffer';
    - A  a3 F$ N6 {  _3 m
  51.         draw();* B$ Q# i& W" |  M, Z" J8 A& e* R
  52. }! j6 c$ t, B5 b
  53. ws.onmessage=function(event){) f' j/ ]. H$ J* F9 e4 w  u
  54.         //alert(event.data);
    % {; D* o( a  @/ ^
  55.         //ws.send(event.data+"client");
    ' y, K8 u) O% M4 V
  56.         qrCodeImg = new Image();
    3 _! p) m7 c8 U$ \* ~, d
  57.         qrCodeImg.src = event.data;
    & `' K" [4 y6 q, V' a2 f
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    ; r/ c4 m  i* ]8 I# Y( c9 i! f7 w
  59.         
    , I- s8 T, V4 x8 j
  60. }
    4 q  d) n, I8 J8 B9 p
  61. ws.onclose=function(event){' N- p6 _. @( V
  62.         alert('close');2 M9 o. v3 Y1 W8 X& z- m, _
  63. }
    4 e: A7 u% _5 G( e
  64. ws.onerror=function(event){
    9 x) T: ?8 _/ R0 y/ l
  65.         alert('error');! x  a& {  }2 P4 L8 C: ~3 q
  66. }  \3 O7 i7 B! G
  67. //video,标签模拟视频' r8 d1 J! O1 E1 b  B
  68. ( |' c% y, ^0 ~. k5 p
  69. </script>
    $ T1 ^; ]5 B  E: m" @  {7 ?
  70. </body>( _! r0 ^) ^6 v; X9 K
  71. </html>
    $ e! d/ l( h& s/ W+ W( F: L& L

  72. 3 J) i/ N, H+ e2 I! j7 c, z: c/ B
复制代码
客户端:0 U1 G, R& {: z# m# w. S; D# N. ]
  1. <html>+ ^+ ^6 u, F$ n2 j% p" t
  2. <head>6 e& Q: n" Y- A6 i+ n, i
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    ( Q7 c  a/ j0 s* O* J% l
  4. <title>客户端直播页面</title>" \- c- |; D/ c9 w4 A& f- n! A( y
  5. </head>, P+ q& D; J7 \1 e& ~% {* q
  6. <body>
    ! {# c& F1 l& G# |0 a" b
  7. <img id="receiver" style="width:720px;height:480px">
    7 r2 I$ ~4 L5 q' R% `4 t

  8. " ]' ?5 K, i: U% O/ o6 |
  9. <script type="text/javascript" charset="utf-8">' }. S5 o1 B6 Z4 A0 ?
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");- l: p+ P2 j4 F$ h* }
  11. var image = document.getElementById('receiver');
    4 y  m' I/ Z, x5 y+ C4 r9 f
  12. receiver_socket.onmessage = function(data) {
    ; }/ Q( T: e8 D1 P# Y2 c7 W
  13.         console.log(data.data);
    3 k8 o& ~) ~& t. S8 }. y
  14.         image.src = data.data;# `  e: Z( M8 ?( U' Q
  15. }
    ) B, b/ E9 a  q; C# Y
  16. </script>% ~! h# F7 B. b
  17. </body>* }0 ^# H2 }0 l/ L( g- J
  18. </html>
    ) P. h/ X9 j2 @
  19. ; a, a2 L; O% `. n+ u
复制代码

8 t1 _6 b( J$ m5 s3 G, u1 N/ z' ]: H/ [  j; S+ T: ]1 E' }
! P+ G9 `2 m4 W, ]$ }# p' s5 J

# u: h! Q' ?. P% d% _- R" x2 @) W' j  t( q! R* v
4 U( E) U$ n( W: ~" R
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 14:35 , Processed in 0.073377 second(s), 20 queries .

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