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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码# `8 \2 E0 }& P& c7 T* P5 @
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);% A5 y$ _! E$ I' l; W5 r! e6 b
  2. $client=array();
    ' Z/ `' e1 k4 v% j+ d% h: N
  3. $serv->on("open",function($serv,$req)use($client){
    0 h$ E3 X) Z! L2 l7 }9 r9 j6 d
  4.         //echo 'connect'.$req->fd;
    ) e. @3 V: O- h6 ?6 ]/ ^) I
  5.         $client[]=$req;
    4 C- n  r5 m2 O. ~
  6.         //var_dump($client);$ X& H& B, M+ A0 p
  7.         $serv->push($req->fd,'aa');9 {; v/ H$ `; s. v
  8. });
    3 Y7 o7 ^9 z" W; B, l6 E0 G

  9. 6 l& S  r6 ?. _6 z  `' J
  10. $serv->on("message",function($serv,$frame)use ($client){
    ' w: e. `1 v/ a+ I  o
  11.         /*var_dump($frame->data);
    ; V* ?" @4 E9 Q5 ~
  12.         foreach($client as $key =>$val){  Y) S/ G! g" t( f
  13.                 $serv->push($val->fd,'aa');
    5 k, b- J' w2 ?' z2 R* x
  14.         }*/# }- q2 x0 B1 ]: R. y2 R$ X
  15.         $client=$serv->connection_list();
      @0 k+ d5 B" y8 j6 i$ h6 r
  16.         var_dump($client);
    * j8 ^! I: Z3 L% l, E! l
  17.         foreach($client as $key =>$val){$ X8 D& E) F* t( C& t
  18.                 if($val!=$frame->fd){
    7 m# B7 }& D9 N$ S
  19.                         $serv->push($val,$frame->data);$ E* v2 S9 x9 M. x
  20.                 }' V" \- s% Y5 t+ j( r
  21.         }
    % C7 g- B, p7 a$ z" h+ M9 k' B3 B
  22.         
    8 B4 v: ?0 [7 T5 l& t% M) D/ c9 a  \
  23. });; C. s/ G5 F  W% J% ~

  24. . I7 t+ |) B& J2 A4 o& F
  25. $serv->on("close",function($serv,$fd){
    : o; Z4 @; y" M/ E
  26.         echo 'close';
    1 n" n, T. M2 P# B% R$ ^# g
  27. });5 s* |, P8 F# _0 J

  28. 6 V. |6 t# j+ g2 s
  29. $serv->start();. k8 z: G0 y3 }) Y

  30. ; l8 B9 O1 @" J- |5 ?$ {
复制代码
主播客户端/ m6 ^% N5 e, B& t0 M& r2 R& u9 ~9 j
  1. <!doctype html>
    ! e1 D7 N5 M, i/ d) b
  2. <html>
    ' o; i  C% L; ~1 s+ \
  3. <head>
    - b9 z, z# e' |$ U, B+ A0 j9 ?+ ]
  4. <meta charset="utf-8"># D4 m5 `  I, v% v9 \
  5. 8 ?; M9 q7 x4 x
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
      E0 o4 ^% T4 r6 [: b
  7. <title>404</title>( F9 _! F! {$ B8 i8 I7 ^
  8. <style>1 M3 L8 K. D- g. r" R/ \9 _; f8 @( r
  9.         body{& \0 R& e+ r( E$ K
  10.                 background-color:#444;% z) }# p2 R; Z4 R* c
  11.                 font-size:14px;
    : I( j: }8 }# @9 t  W5 B
  12.         }
    ; r  s2 Q' X- w, l  C! {4 A. H
  13.         h3{
      \. ]* S2 W% ?) b
  14.                 font-size:60px;, y0 d* v: E  P: ^$ h- f9 O
  15.                 color:#eee;5 b3 l& X% m1 l+ ^5 h# q
  16.                 text-align:center;
    + G2 Q, B3 F: G
  17.                 padding-top:30px;
    0 C4 j) j6 J% Z& _( q  f8 O( A
  18.                 font-weight:normal;, O6 C& k  `: n$ g( n) a( l
  19.         }" y% N8 s7 e6 Y0 ]& }
  20. </style>. N& p) o, X& R3 L! e: n. a
  21. </head>
    ; ^5 h5 V7 n3 a% Y. N/ G

  22. ' \3 T% A5 Q1 r( r4 t6 o
  23. <body>
    1 o+ J# w7 q' w* e1 l1 N8 b
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    ( {* r( ~; U9 Z$ Q% Q
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    8 ~% n6 K2 X9 i5 H0 y
  26. <canvas width="400" id="canvas2" height="400" ></canvas>( ~$ \9 N; b/ p" B# O. g/ q  m  M
  27. <script>. N2 d' M4 B& L2 _5 _
  28. var video=document.getElementById('video');. F/ F1 a$ h) s" K6 j; c/ t
  29. var canvas=document.getElementById('canvas');5 d, E1 V! f; X, Y- I  O. t
  30. var canvas2=document.getElementById('canvas2');. `; E/ q0 g8 W  J! u( q1 B
  31. var context=canvas.getContext('2d');, W; |- K5 j7 ?1 S5 Q; [3 _  {
  32. var context2=canvas2.getContext('2d');9 W9 B9 i, R/ p- k9 a0 Q
  33. function draw(){2 k, M. [: H# Z' q- p8 {# Y4 X
  34.         context.drawImage(video,0,0,400,400);
    2 Y1 k% X* R/ _) m1 H/ c2 S
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    0 c* k. p* h3 f' P; j3 U  N
  36.         setTimeout(draw,800);
    , w7 i3 ?, X$ O& _3 M
  37. }, j5 W2 `. ~: R( G5 B5 _8 h
  38. ' h1 M0 O3 Q* ~4 a( e
  39. //客户端跟服务端通讯& r! K7 r2 d# ~6 K8 v0 I
  40. if (window.MozWebSocket)
    7 L, m2 n# I+ u4 p$ ?+ r2 u
  41. {
    $ `# O0 l6 G4 r) a( }* g9 |0 Z3 L
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");8 O; ^& Y# x" q- R6 b
  43. } else
    . J! W& ~. d- b6 C! ^) R0 h
  44. {, _- L6 M8 Y# r' X
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    7 f6 v* X" }, \. ~: \$ N1 c
  46. }
    * O  C3 m6 M! f9 L

  47. 5 J) [' w& S; G2 _) r4 W
  48. ws.onopen=function(event){
    1 t' J2 Z' D# l% N
  49.         alert('连接成功');' H, ~3 ^6 c3 c3 I- [. M4 d
  50.         ws.binaryType = 'arraybuffer';
    6 m+ L- s$ H+ K; g
  51.         draw();- B: T) o$ I& o  h7 b( g( Z
  52. }
    $ i+ q1 `0 ]2 P, @1 X' W9 L
  53. ws.onmessage=function(event){
    ! C: L! D1 J3 l$ g# b
  54.         //alert(event.data);
    1 ]4 B3 V' v. C' z
  55.         //ws.send(event.data+"client");
    , b: F: R1 ]' ^1 ]% O7 q
  56.         qrCodeImg = new Image();. q) t( ]# _8 [4 W2 R
  57.         qrCodeImg.src = event.data;
    ( `5 U. j' V' s
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    , m  @3 l' A" d( g. Y% u
  59.         
    ! k5 |1 e" }' u) r& Q
  60. }7 {* f* {# K& H
  61. ws.onclose=function(event){$ u- p8 U$ z! M
  62.         alert('close');
    ( ~5 i' E& ]& w. a
  63. }
    & n, A" L- ^; U& B9 o  ]1 @! F) C
  64. ws.onerror=function(event){
    7 R- W1 [" H  ]: e
  65.         alert('error');: P1 q2 r: T5 j- \7 h2 U
  66. }# n% Q- P4 m3 X- U1 ^+ t
  67. //video,标签模拟视频; [7 j: [( n2 g
  68. 1 b1 D  m! Q4 C
  69. </script>
    5 n/ Y& g- d8 M* Y5 ^9 z) c- A
  70. </body>
    ! Q: i4 u" @, d9 v0 t- H6 N8 F2 F
  71. </html>: t+ M/ `4 }! x% d  K" R, r/ k& @9 m

  72. # m% _8 _1 |/ C! F( N
复制代码
客户端:* G% [3 [, S2 A2 t6 M
  1. <html>
    " C( q$ g5 l. x  @. q& z
  2. <head>+ o4 E/ r" Y  Y8 a4 q6 v6 |; w
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">3 n  y( y& n6 P; W2 i( m
  4. <title>客户端直播页面</title>, t- m. A$ b$ c' ]7 `2 J
  5. </head>
    " j& ~0 x8 d' u/ S( h& {- T% a
  6. <body>' A0 y: `0 l1 {% `% ~1 k
  7. <img id="receiver" style="width:720px;height:480px">( M& N! Y3 _  M" H( q: q% m
  8. $ }* ?* R8 Q7 k# w3 L! P; c& W
  9. <script type="text/javascript" charset="utf-8">1 P) d! ~- |4 Y4 j+ A
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");1 Q4 \" Q% P2 T0 K: m! I/ e5 x
  11. var image = document.getElementById('receiver');
    " g1 s% O6 ~6 }6 V( H
  12. receiver_socket.onmessage = function(data) {; A7 ^* h/ L2 i& y% A' B
  13.         console.log(data.data);
    . V7 C6 T) [' G* F6 z$ o
  14.         image.src = data.data;  k6 }& ]9 w7 L6 N- [4 ]
  15. }  O; c6 ]  }9 |5 E/ ]
  16. </script>$ P# {1 l9 K: U
  17. </body>3 J9 W: {7 ?; A* p+ y2 E- h
  18. </html>  K% \) ~9 q" t' k3 {
  19. 1 s7 b' _! ~4 o4 E. i: f
复制代码

2 p. L; s3 A# A
2 C% v* r" @" Z8 f6 X# ^) o4 p% y$ w, q3 [  a0 d5 G  D% X

% I8 f. A, R- L
; l$ R5 r  ]: D6 b( [6 _  F! [* I8 h) C/ V
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-19 23:53 , Processed in 0.135831 second(s), 19 queries .

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