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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
' y# ^9 n* s# E
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);( X5 ^! G# A! ]1 \- `
  2. $client=array();# U& A. |0 n0 N% v7 l
  3. $serv->on("open",function($serv,$req)use($client){  I7 R3 x6 u  p- ?1 C& M, \7 {6 s; y
  4.         //echo 'connect'.$req->fd;
    # z" L3 Y* i6 @- H- u
  5.         $client[]=$req;
    ! [9 ?5 m% ]# X% E/ l- {5 v+ e
  6.         //var_dump($client);
    " U4 g4 {# M* T8 A' c7 z
  7.         $serv->push($req->fd,'aa');* ^8 Q2 p1 c2 M& g4 M' f
  8. });2 B4 \. u- [' F2 _4 B

  9. % g/ L+ s7 }; p1 D& b( K
  10. $serv->on("message",function($serv,$frame)use ($client){
    ! k$ q8 ]5 g1 l  Q
  11.         /*var_dump($frame->data);8 _3 `, x4 i* `0 X
  12.         foreach($client as $key =>$val){
    7 N! @+ x+ C& x
  13.                 $serv->push($val->fd,'aa');
    & {! S8 w3 Z2 j0 q
  14.         }*/' u( c( Z5 k* Y4 ^
  15.         $client=$serv->connection_list();
    ; e5 e; b8 d1 z
  16.         var_dump($client);
    ! Z7 u0 Z3 K5 T8 {
  17.         foreach($client as $key =>$val){* z$ J" Z$ b8 C
  18.                 if($val!=$frame->fd){* b: t) S* g5 @7 l) g4 t
  19.                         $serv->push($val,$frame->data);
    3 c; s' j: v% A  P4 A
  20.                 }
      E' K# w: C0 D0 D0 v4 o6 G
  21.         }( N2 ]. o+ b+ z. H
  22.         5 s& X6 E, `2 h7 w& _/ n
  23. });% u8 R7 G3 Y  Y2 }9 q
  24. 9 f) y# g  i" y5 {
  25. $serv->on("close",function($serv,$fd){
    ) D; B& \+ E& ]& z( t- Q
  26.         echo 'close';
    & m8 |$ R8 o) [8 a/ l7 b- x
  27. });2 m1 a& ]8 z+ S" j1 d: g
  28. & W* ~, o. X1 r8 [- D& V) g
  29. $serv->start();7 P( u, s  X. O# O* w: o

  30. # l& p( @0 f) H/ d; ^0 ^
复制代码
主播客户端2 i4 _* x4 F5 _
  1. <!doctype html>
    6 a" H; `& o& b; n3 @. T9 r
  2. <html>
    * w0 G! a5 Y- c( S0 Z4 k+ [# d7 r; x" N( J
  3. <head>
    & l) o8 T1 B( z, ~3 B
  4. <meta charset="utf-8">
    : x. H0 n. \; \& C
  5. # t3 T' Z3 V) @, h* a: q
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">1 D  V" L5 N( j9 W% C. O- s
  7. <title>404</title>
    , a1 s7 |' c  }0 J% J4 }
  8. <style>: h0 k- K" j8 }
  9.         body{
      T$ s4 Y5 U5 d, o: c& b
  10.                 background-color:#444;
    1 I* i0 d$ l! o+ ?/ I5 U' c4 y+ s
  11.                 font-size:14px;
    5 d* i5 i: j" h, N
  12.         }
    - V. |0 r. C' \/ f
  13.         h3{9 Q: p/ w2 Z5 |, I
  14.                 font-size:60px;
    ) Q1 a$ K8 P3 f# p* w5 z
  15.                 color:#eee;0 X1 a9 [0 r- Z. j! H
  16.                 text-align:center;6 G, w0 q; J; v) @5 N1 K: O1 G* w
  17.                 padding-top:30px;
    0 ]* }- R3 n/ ~0 S" C; Q) r+ w
  18.                 font-weight:normal;
    1 C0 g% {( r+ {
  19.         }' J3 f2 u# v6 m3 D; k4 X
  20. </style>( L# W4 @6 z) D) g# }
  21. </head>
    ' ?& g# f) W4 @: |" Y4 x/ n( s

  22. ) U$ l, S( K; u6 Y
  23. <body>
    8 z, d/ S. a6 U7 G8 I' C4 `& Z
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    3 Y8 j1 J: M3 i" X7 G
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    ) I' S$ V  `) |/ j& r
  26. <canvas width="400" id="canvas2" height="400" ></canvas>5 I- q! _$ Z+ g" J1 [
  27. <script>0 m; P% m1 q. N) g4 N% B
  28. var video=document.getElementById('video');' z+ G" x: k* D
  29. var canvas=document.getElementById('canvas');1 N5 s  j1 X2 e3 O
  30. var canvas2=document.getElementById('canvas2');
    " V& C' D( o) X$ x' s9 b! r
  31. var context=canvas.getContext('2d');- \0 D% P) v1 r1 y; A$ T
  32. var context2=canvas2.getContext('2d');) z0 Q- W" u4 f: R+ G
  33. function draw(){
    * K2 O" V$ @1 R. E6 P+ B
  34.         context.drawImage(video,0,0,400,400);6 G. g. |* ~& b! b& q- U
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    " R1 R' e- N0 V* {% b
  36.         setTimeout(draw,800);
    % }' }0 H) r- }3 a$ L( M
  37. }
    - [  s' t  o7 y) Q
  38. & }$ p0 u$ O) p+ S( \
  39. //客户端跟服务端通讯9 h" I  S/ O1 X; Y
  40. if (window.MozWebSocket)( K8 P1 h3 t( Z4 f( ]% Z
  41. {& w' g! X% w0 _
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    8 h9 `% g8 g# x* `% u, Y1 Y- d  j
  43. } else
    5 x6 L8 V& d# D, r( l! ~8 I: q  ~, Y
  44. {
    ' u. `' L' F1 G( z. k8 {
  45.         ws = new WebSocket("ws://182.61.42.187:9501");6 l9 L8 p6 G9 s  D5 S
  46. }5 ^9 J2 j6 z- R$ ]

  47. 1 \, b: |! t0 D2 T
  48. ws.onopen=function(event){: {" D2 j5 j- ^' c% g* F
  49.         alert('连接成功');
    - q: D/ g* K2 T$ V9 ]
  50.         ws.binaryType = 'arraybuffer';0 p) ]9 Y7 E" g9 P& ]
  51.         draw();$ W. c9 i4 D5 |2 x7 V
  52. }
    . P/ C0 H( ^7 }# v/ p; x4 g
  53. ws.onmessage=function(event){( U# M" i$ |: t% g% g$ }9 t
  54.         //alert(event.data);2 @7 A, F; K6 |1 `  I( D
  55.         //ws.send(event.data+"client");5 U5 f; Z4 D7 j. h' ^1 z' c
  56.         qrCodeImg = new Image();: x* K* F0 j* w# q7 B3 j
  57.         qrCodeImg.src = event.data;
    # n4 Q: Y6 A; T4 ?" R) f
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);; t7 a9 J% F+ `
  59.         
    2 g0 g0 l1 j2 i/ q
  60. }
    " ]2 z. S0 ?: C. M' R/ k
  61. ws.onclose=function(event){2 ^0 f/ x( E& t& W" `+ c
  62.         alert('close');
    ( a! R# c% C5 e' ~
  63. }
    / Q$ N# R4 X% s: {1 O! k# x
  64. ws.onerror=function(event){$ @+ e6 J( F6 V, u" ~) V
  65.         alert('error');
    4 ?7 A; p  e5 s6 m% p  `9 p/ U
  66. }
    4 J  F6 e/ h5 _# N: V0 o1 J
  67. //video,标签模拟视频
    , d4 {" Z" T# P: b
  68. 1 ^. w8 h+ j! G. ]4 k2 y
  69. </script>
    * y' Y2 O1 W5 _& e8 O& X6 L; y) G& A
  70. </body>
    0 }# ?% l+ o7 W8 @! I- w3 t
  71. </html>
    8 T) R" V3 o1 Y! j

  72. 5 m% D, k0 y6 h- `- T/ w; G8 [
复制代码
客户端:, V/ Y$ Z0 m* M- D2 e) m* c+ O
  1. <html>
    % y4 {* A) X' S6 I+ C5 Q& E! }" _
  2. <head>
    6 Z, k& b0 u/ \8 z$ F
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">+ T! F! l- Z7 M0 g3 @
  4. <title>客户端直播页面</title>
    ! t# n( {7 S. ~/ ?- o/ b
  5. </head>
    * ]1 T. _# h6 s9 |( X; D
  6. <body>& T+ f" @, e+ N1 o/ G
  7. <img id="receiver" style="width:720px;height:480px">
    . v( p, a3 P% D, q

  8. - f1 D0 F7 p2 [# y# o! b. [
  9. <script type="text/javascript" charset="utf-8">
    * Y2 M( v$ l) b9 [1 z# |. f+ R& V: Z4 B
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    ; |7 Y" |) i8 g8 C2 H( e
  11. var image = document.getElementById('receiver');, G+ k: ]' c5 l* i
  12. receiver_socket.onmessage = function(data) {
    ( ~5 P+ Z  x' k% ^* D
  13.         console.log(data.data);6 W5 y5 R& _+ }0 z( X
  14.         image.src = data.data;
    , ?9 p* a  C/ L9 a) @$ _
  15. }
      }. j! Q- s( W; V2 e0 |
  16. </script>
    7 }) Y& f0 @2 A# K, C" V  p
  17. </body>
    ; ?' {! p# h) Q. e" T; |5 Z0 d
  18. </html>, c1 t, Z! _2 N8 a
  19. ; y# v- j7 L9 J2 j- C' n
复制代码

" u3 i$ H) L6 `9 h1 O* A& _
% w& G: w1 Y/ \- C2 G  L! r" u5 p# V6 J# S8 D( V

/ K0 z) T2 i2 h- O4 ^" n& U
+ ^) R' K$ l0 W2 y7 }! [' j) J  r0 u/ f. q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-18 16:16 , Processed in 0.114898 second(s), 19 queries .

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