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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
服务器代码
: Q- M) \! a4 p8 Z; ^+ W  u7 b
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    * P7 R7 u5 r2 e5 j! r
  2. $client=array();
    3 S+ I3 G; l$ s. Z6 O7 L5 `
  3. $serv->on("open",function($serv,$req)use($client){$ f4 i" r0 V+ h# n
  4.         //echo 'connect'.$req->fd;+ N! V7 t" n4 _8 |& ?0 a
  5.         $client[]=$req;
    5 C. ^: O1 G4 V. }) n/ y4 j
  6.         //var_dump($client);( {$ e- A) P; l* B3 J1 C. y8 ~, F* g
  7.         $serv->push($req->fd,'aa');
    - v3 K) s4 p; ]! b$ c! J
  8. });( O7 R3 w7 v+ ~0 @% C, S4 ?

  9. ' C5 G2 v; L: q8 l4 l$ ]0 K( o. p
  10. $serv->on("message",function($serv,$frame)use ($client){- d6 j' V$ M  I. M  ?7 e  I
  11.         /*var_dump($frame->data);
    7 ?0 g. k  P6 s
  12.         foreach($client as $key =>$val){$ p% n3 \4 M/ V( O9 H6 V/ U1 T4 L- N
  13.                 $serv->push($val->fd,'aa');
    % s. ?; ~' `: p* _! ?" u
  14.         }*/; H/ b) w" H4 O, y* J+ X
  15.         $client=$serv->connection_list();0 R: ?2 u1 u  p+ R5 G6 o: }5 {
  16.         var_dump($client);3 M* n" E( n  `) G9 Y8 E# B) E
  17.         foreach($client as $key =>$val){
    0 C) t6 x$ V$ }) ~8 i
  18.                 if($val!=$frame->fd){
    ! C" K) @) Q+ f
  19.                         $serv->push($val,$frame->data);
    - {5 U$ M9 R: U8 _/ y. \$ M0 Y
  20.                 }
    5 ~: I+ I) V7 h5 g0 Q" ]' O
  21.         }
    $ T6 D/ W8 Z5 `" L
  22.         
    % q2 C( u3 s7 L$ p8 R: J0 f7 w
  23. });9 p# B1 z5 U/ |

  24. - T3 r- A, f/ y- H& N
  25. $serv->on("close",function($serv,$fd){* Y/ O1 I7 ^, W) {
  26.         echo 'close';: u4 w, B4 o# k1 j* e- r
  27. });
    . m5 C) \, p5 ~1 S8 [* F4 }) Q. y$ r

  28. 4 g( R+ k! ?1 A. _8 f; m
  29. $serv->start();: }( F9 O/ G. h% P
  30. ! w* [! p8 a: I& [& W; `
复制代码
主播客户端' z9 e- B* p( ~0 ^0 ^- ^' w) s
  1. <!doctype html>6 o' K5 Z* g. E) M) n6 N% y
  2. <html>
    0 u  Q3 a! W/ l
  3. <head>+ ]$ e& `# Q- x
  4. <meta charset="utf-8">
    . f! U3 i3 N- H  r+ l

  5. . z1 m4 q2 A9 p
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">8 N% a9 k7 N- m/ }! v4 `" \
  7. <title>404</title>
      {0 U9 X) L0 n/ _
  8. <style>& T; C* e$ v0 X  ?3 k0 j+ h- d# k
  9.         body{
    3 z$ \+ l$ B5 \9 p# g; s
  10.                 background-color:#444;
    ' o+ y$ n5 d- ?3 J
  11.                 font-size:14px;9 w( |" P8 w* @, f1 `9 g! r
  12.         }
    ; A6 A$ p3 s, u
  13.         h3{
    8 Q3 ?# }4 r/ O
  14.                 font-size:60px;
    5 C9 c' Q7 F+ L. u- s6 F3 x& ]
  15.                 color:#eee;
    ) p2 n, u8 t( Z
  16.                 text-align:center;& r  w6 [/ W8 D9 J, m# @1 Y
  17.                 padding-top:30px;
    " ^: y. @8 ~) O" D2 p' w7 n: |
  18.                 font-weight:normal;
    + e$ k  [1 E3 r, P6 Y2 _$ t3 W
  19.         }8 e5 k1 s. h, R( ?# f/ p" b7 O4 z3 m
  20. </style>
    # W8 g) ^$ |# q/ O% y
  21. </head>
    2 F8 Y- s' P- l8 c8 I2 c+ m' R. B

  22. . U) A( ~7 B% g( ~8 m
  23. <body>
      r2 h" X: M* {# g5 N; Y
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>, U  o; p% P+ |4 s' \3 v* J% w
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>5 \" e* a9 C3 L1 x, w; B
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    2 r" G8 _2 Y. d( P; s: z% `0 |: O" V
  27. <script>$ C  r0 M$ V% a  W" J
  28. var video=document.getElementById('video');
    0 z! M- t4 p' h% h1 S7 r0 j. p
  29. var canvas=document.getElementById('canvas');
    . o2 J; k1 F( m: L, a: A" R
  30. var canvas2=document.getElementById('canvas2');( y: U& \+ D: ^& m
  31. var context=canvas.getContext('2d');) j: |: h% n$ H' V1 C% u. ]  ?
  32. var context2=canvas2.getContext('2d');
    3 Q" P3 M0 Y- ~5 o
  33. function draw(){
    / O" ?& r1 a& ]' k
  34.         context.drawImage(video,0,0,400,400);* ?) C& r$ I0 l0 s" }) S
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));. g8 j1 Y) _# S; p  N
  36.         setTimeout(draw,800);
    . t3 ?& l  Q+ }7 r' s( v
  37. }
    # Z) u3 l. Y1 T, r

  38. 1 e; l* v- v' \0 D0 \/ c
  39. //客户端跟服务端通讯; s: O( z2 u) v( h
  40. if (window.MozWebSocket)5 j+ H8 B4 m/ P  U1 D# A% b# P# x
  41. {
    1 y9 H- u* ~9 ^
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");, _2 ]7 y8 ?* W* x) A* [4 w9 d2 \
  43. } else
    . C" B7 @5 b& c
  44. {
    9 q. F$ H) g6 @6 K8 o
  45.         ws = new WebSocket("ws://182.61.42.187:9501");! ?5 ~! v+ \" n' h$ t( N; e
  46. }" T$ x- O9 f0 k3 H& T; h
  47. / L7 P& d, p. ?: E  }( E
  48. ws.onopen=function(event){/ B! d8 ?1 M: j" ~) H! \$ M. m
  49.         alert('连接成功');* c" b( w0 z2 _6 R, N; a3 M+ P3 ^
  50.         ws.binaryType = 'arraybuffer';
    ; `( o" l8 a" N1 m
  51.         draw();
    7 N9 T7 j" `$ Y2 h( A; U0 ]8 r: g! Q4 R
  52. }
    # J! n: W9 X$ M" B& @1 W
  53. ws.onmessage=function(event){: u* U( O" z4 [  g( {5 @( v
  54.         //alert(event.data);* p  M2 }4 u7 x- a
  55.         //ws.send(event.data+"client");/ _, Y7 C' `1 ?5 N; R
  56.         qrCodeImg = new Image();
    6 J/ v: X& e9 r2 M, S0 \! r
  57.         qrCodeImg.src = event.data;
    5 X. j/ ^1 p) l# m0 B
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    " M6 J+ F3 R3 T
  59.         
      U7 Q: s0 G6 c* c8 G
  60. }
    5 C+ t! n; o- F: A4 u1 d& y9 l
  61. ws.onclose=function(event){
    9 |' ^. h5 n7 x
  62.         alert('close');
    ( }3 H9 [3 W0 ?( L$ @
  63. }
    4 R: f; Y5 i! k  ?' ^
  64. ws.onerror=function(event){3 O5 J. U8 u2 `1 i
  65.         alert('error');
    % A4 D" O+ a0 p( u( @0 w% z9 _
  66. }7 i1 {7 f, h8 ^1 o1 @3 M* \
  67. //video,标签模拟视频
    . k/ j/ R: ~  @9 b

  68. 4 l1 U1 T; `) e7 [/ D
  69. </script>
    4 `  Y$ m. J+ b3 A- I
  70. </body>
    8 s) ~2 a& H7 R/ W# q7 g* f/ W2 a
  71. </html>
    . R4 H7 [. a4 R5 R, r/ L
  72. 1 D; ~: \. d  H6 I
复制代码
客户端:
  M/ d: c4 \) ~& j1 \
  1. <html>
    6 u% W+ \& X3 r6 Y  j, `5 e. I
  2. <head>
    " r6 {: |. \3 C
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">; Z8 W+ q" K4 ]6 y" ~0 {3 T
  4. <title>客户端直播页面</title>
    + Z: H. \% u' S  n) A
  5. </head>
    ; |9 G1 v. F: O. f" \
  6. <body>$ r, W; [) L5 C, A
  7. <img id="receiver" style="width:720px;height:480px">8 v+ o& @( L. H2 ^
  8. ( Q5 W8 k5 D  T3 B, h( {2 w$ t
  9. <script type="text/javascript" charset="utf-8">
    % U+ l/ ^7 H8 V# D- H& ~
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");6 {$ e! i$ N; D, r. v5 d
  11. var image = document.getElementById('receiver');
    ' Z: d* u: F4 f% b2 Y% @/ X
  12. receiver_socket.onmessage = function(data) {
    / B/ @; @% O" h2 Y; k
  13.         console.log(data.data);; w) E8 ^9 |, F3 t
  14.         image.src = data.data;5 D, O+ f# p2 K( B" P! [
  15. }1 s! [& ~4 q" z9 q! z
  16. </script>
      X" h5 y* t5 t# X3 m, g
  17. </body>
    4 `2 L0 O2 S7 |" B7 a5 B4 h
  18. </html>5 w) K$ A  j! U1 V! \

  19. 4 a; B" h- ]% `' y# M
复制代码
* ?% R! ~0 A9 r
. n5 x7 `6 E- ~, t
7 i5 v" g. ~9 ?2 n: N

5 G6 H, _2 h% y' x3 u: U
& F: h: B' r9 N8 G$ n: `: [+ j. [0 s) m+ }- }* n7 x1 s7 O
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-4 07:25 , Processed in 0.106946 second(s), 20 queries .

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