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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
# ^! s, b. p; h. U* M
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);  [' E( j6 Z0 V* z; o
  2. $client=array();
    - F8 k2 M' D8 {! Y0 y/ ~
  3. $serv->on("open",function($serv,$req)use($client){
    + _4 W# b; F& ]' y4 T, |
  4.         //echo 'connect'.$req->fd;* f( U' t1 N$ |. F
  5.         $client[]=$req;
    4 G  C) O+ p0 D0 d! l8 i3 F
  6.         //var_dump($client);
    % V2 Y- U+ Q0 R  K( y% L# d( }2 {
  7.         $serv->push($req->fd,'aa');
    . R5 E3 K; G9 g0 a9 Q
  8. });
    ; d' {" [8 b) @/ Z& e" N

  9. 8 i4 r1 r. [3 Y9 o& p
  10. $serv->on("message",function($serv,$frame)use ($client){
    3 |1 g+ \) S5 Q! ~
  11.         /*var_dump($frame->data);
    - ?% G, c8 w( }. J4 V; n  z+ C' U
  12.         foreach($client as $key =>$val){0 d+ k$ p& c3 j! O0 N
  13.                 $serv->push($val->fd,'aa');& ?& `+ r, g* i
  14.         }*/4 w3 U* }( A7 ]8 a
  15.         $client=$serv->connection_list();8 t5 k4 ~) Y) \8 ], \
  16.         var_dump($client);
    4 ?) h6 q# P4 _$ Z; Y& C
  17.         foreach($client as $key =>$val){
    1 b  K9 U  T7 i: k5 R& _; k
  18.                 if($val!=$frame->fd){
    % ~% X* M& J' P- s( V& a% j  J
  19.                         $serv->push($val,$frame->data);
    ; a) b3 N3 R/ _2 Z- _2 |# m9 ^
  20.                 }
    ( D" J- H; _, Y8 h- ?4 K6 ^
  21.         }) n2 j! p' e, S# {
  22.         
    ( h* H0 e% f6 z" E5 W- c
  23. });; e, h7 [5 m' O* c
  24. 8 {3 X9 ]  x4 U
  25. $serv->on("close",function($serv,$fd){  K7 H4 k2 f  \
  26.         echo 'close';; s( a! f: m2 A  w4 u/ W# m
  27. });
    $ p, k1 V. l  Q0 \8 I, u4 R' V
  28. ( w* H! T* p1 q$ j! X/ M) p2 ~
  29. $serv->start();
    % \0 s9 e: V, H' C' L7 o( T  }+ e

  30. / w! y& s9 J6 _: d* y0 T% O, x
复制代码
主播客户端
: v& W+ s6 z6 G3 M( d
  1. <!doctype html>- \: F% B; H5 B- U' |5 c5 y1 L
  2. <html>
    - ^. e  ^4 G$ t9 \) P1 t( Q
  3. <head>+ q4 Y# V) N- f2 k/ m% t+ d
  4. <meta charset="utf-8">6 a% X, F9 {+ y1 ^3 v$ ~6 e
  5. 5 p  i# s) W9 K; L. i8 [: S- `
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    4 T+ ~0 v. U0 _+ Y8 J4 c
  7. <title>404</title>
    7 O, P9 }: u4 i# X* B. E
  8. <style>
    5 @( e1 O( [5 t# b
  9.         body{' _1 |+ F' P; e5 z
  10.                 background-color:#444;' q5 ]) H$ }8 d4 f( u9 X) |
  11.                 font-size:14px;
    # [8 c5 i5 T- {  Q' A
  12.         }9 a$ Y$ A7 k) x
  13.         h3{. K: q) k- ^! q  F  a
  14.                 font-size:60px;
    9 {9 E6 Y# C, X2 O6 }( j
  15.                 color:#eee;. a. u0 I3 n- o8 `+ ~, x
  16.                 text-align:center;! ?6 T: b; m- A% W7 }
  17.                 padding-top:30px;
    3 M8 K: N4 c( D0 Y. K
  18.                 font-weight:normal;6 D" r( t) |* S/ g* K2 A
  19.         }
    9 T: L9 W5 f6 v+ m
  20. </style>
    $ E3 H  g" [0 \7 w6 \
  21. </head>
    4 P8 `7 t  o# I/ ~- M

  22. - ^) f2 u0 q9 ~# F
  23. <body>
    # n, h6 Y, P8 h; N5 O
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>$ L; N2 |& g! V5 h5 k% ^! n
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>; V  m1 h" O: l9 Z
  26. <canvas width="400" id="canvas2" height="400" ></canvas>5 V! B1 r7 H; f2 y+ L
  27. <script>( b  |* o4 {  W: F8 e1 V
  28. var video=document.getElementById('video');
    5 Q. g( F* @( _+ Z1 ^, ~
  29. var canvas=document.getElementById('canvas');
    ; n) X5 B' o) f" d7 f
  30. var canvas2=document.getElementById('canvas2');
    3 h0 L/ x" ?' k. ]
  31. var context=canvas.getContext('2d');( }& \/ H4 H/ [" W& V' c! ]
  32. var context2=canvas2.getContext('2d');/ V( }- @& `; l1 M
  33. function draw(){  p* m- U4 l( a4 q0 x2 F! Y
  34.         context.drawImage(video,0,0,400,400);5 G8 e+ M! X$ b! t% R; s
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    0 e2 i8 u) m6 ?
  36.         setTimeout(draw,800);* j  V& R# F% |( N6 k. |& e( j
  37. }
    1 [. B( ~! H5 C' d2 u  P$ J
  38. ; T2 N7 \( u1 h& V* P
  39. //客户端跟服务端通讯2 w% K$ @: x) B* ^: S8 T. i5 Q% D
  40. if (window.MozWebSocket)$ `6 }0 r* t6 P( J) R4 _& O
  41. {
    / t2 T. I4 }: p, r
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    ) Q8 k2 ], H2 p- l
  43. } else
    + B; q4 G# o# G
  44. {8 f9 J* h% e+ m% }1 G
  45.         ws = new WebSocket("ws://182.61.42.187:9501");* r1 N& F) S: w- ~+ ^0 c, l
  46. }% i# P9 |  T. j/ T0 h. D3 @# P

  47. 0 b, s: E  A% g3 N
  48. ws.onopen=function(event){- X4 g! e/ w* `, ~" i
  49.         alert('连接成功');4 p( p1 a( `, m" |
  50.         ws.binaryType = 'arraybuffer';
      w* q# S4 i+ K; N4 i0 i
  51.         draw();
    . r% s/ s5 b1 I! M$ \
  52. }& b0 n, V2 d. Y5 V& I6 M
  53. ws.onmessage=function(event){
    ! W. @* m7 V! x" M) ^
  54.         //alert(event.data);
    5 ]1 H* q5 M! w# [. t& u' {
  55.         //ws.send(event.data+"client");6 J4 l+ l/ Y5 g/ d+ [
  56.         qrCodeImg = new Image();5 I+ O9 d3 T6 t$ z$ K
  57.         qrCodeImg.src = event.data;6 V3 _" D4 {8 d
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    8 O+ x/ ^  H2 w1 ]5 q. T' X1 C
  59.         
    2 c7 U5 y: l$ |& A3 M7 a- E. g
  60. }6 J9 g0 b4 M$ @7 |
  61. ws.onclose=function(event){
    ) V( u6 k; f+ I, r* b
  62.         alert('close');
    , w) z+ B9 v) d6 Z+ O
  63. }# E( D" V4 ]/ Q! K
  64. ws.onerror=function(event){; b/ C; N, z$ Z. J8 q9 O% p& w- _5 s( M
  65.         alert('error');7 e7 H  ^% b8 i9 t+ \
  66. }' D+ T0 u9 w& c; }& u' u0 b
  67. //video,标签模拟视频' o; E+ E" g. ]0 b/ D5 @0 T

  68. ! t6 {& [2 t: o/ @+ y: F+ L6 z
  69. </script>
    , F8 a5 v0 n0 x9 a  {
  70. </body>/ h; u. }& c6 V( ?
  71. </html>' W) ^, E# Y6 |! W
  72. 7 B. K0 }$ F# f6 R7 c; ]
复制代码
客户端:! b) q% m! Z2 w" I/ I' ]; r
  1. <html>
    . o2 M7 S- y" {% G3 d+ l
  2. <head>2 N* ^% r( E+ q% _
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    7 \/ @, l. H  x" {1 I2 Z1 {5 k
  4. <title>客户端直播页面</title>5 G7 F0 C0 ~0 b# H) P, R4 r
  5. </head>
    % M/ ]' \* M  A2 }& V
  6. <body>* j, e. `9 }- @, I
  7. <img id="receiver" style="width:720px;height:480px">
    5 J3 i7 M+ W$ C4 J( I% h/ ^

  8. ; Q3 M; V; x% r& S3 h% {
  9. <script type="text/javascript" charset="utf-8">
    2 K# Y3 c$ S# h: Y
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");: ]2 M  x, ?: x# @! G0 l, ^3 Q- K
  11. var image = document.getElementById('receiver');
    2 N, h$ T! E; v- D0 Q- \5 P* K: W
  12. receiver_socket.onmessage = function(data) {1 s  Q- u# k  A/ N$ G
  13.         console.log(data.data);
    5 Z% ~2 L. \, n) V
  14.         image.src = data.data;) e5 J# v# \. r5 h7 i
  15. }$ V3 g$ w7 i6 N) q, e( J
  16. </script>4 _6 n+ ]4 g6 m# g
  17. </body>
    . q! g) O$ u  f( I* F4 Y
  18. </html>
    3 m* m" }  ~  g5 M3 R, b; a
  19. + s+ K/ Q5 ]5 v1 J1 D
复制代码
/ q  ]5 T! U% a% ~. S) D# ]

' P$ N5 L; P4 g" @' t( y
  p4 F" o- s6 U9 e, M
: I+ P, V& j% c4 S& ^; ?9 c
/ ^1 b9 j! a/ ^3 u; T/ o$ u
% R6 m% x. \1 b% [" l" A. g
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 19:59 , Processed in 0.051642 second(s), 19 queries .

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